diff --git a/src/Makefile.am b/src/Makefile.am
index c232652..40adee6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -159,6 +159,8 @@ empathy_call_SOURCES = \
        empathy-call-window.h \
        empathy-call-window-fullscreen.c \
        empathy-call-window-fullscreen.h \
+       empathy-about-dialog.c \
+       empathy-about-dialog.h \
        empathy-audio-sink.c \
        empathy-audio-sink.h \
        empathy-audio-src.c \
diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c
index bd5538a..cea0567 100644
--- a/src/empathy-call-window.c
+++ b/src/empathy-call-window.c
@@ -58,6 +58,7 @@
 #include "empathy-call-window-fullscreen.h"
 #include "empathy-call-factory.h"
 #include "empathy-video-widget.h"
+#include "empathy-about-dialog.h"
 #include "empathy-audio-src.h"
 #include "empathy-audio-sink.h"
 #include "empathy-video-src.h"
@@ -729,6 +730,113 @@ create_pipeline (EmpathyCallWindow *self)
   g_object_unref (bus);
 }
 
+static void
+empathy_call_window_settings_cb (GtkAction *action,
+    EmpathyCallWindow *self)
+{
+  GdkDisplay *display;
+  GError *error = NULL;
+  gchar *path, *cmd;
+  GAppInfo *app_info;
+  GdkAppLaunchContext *context = NULL;
+
+  /* Try to run from source directory if possible */
+  path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"), "src",
+      "empathy", NULL);
+
+  if (!g_file_test (path, G_FILE_TEST_EXISTS))
+    {
+      g_free (path);
+      path = g_build_filename (BIN_DIR, "empathy", NULL);
+    }
+
+  cmd = g_strconcat (path, " -p", NULL);
+
+  app_info = g_app_info_create_from_commandline (cmd, NULL, 0, &error);
+  if (app_info == NULL)
+    {
+      DEBUG ("Failed to create app info: %s", error->message);
+      g_error_free (error);
+      goto out;
+    }
+
+  display = gdk_display_get_default ();
+  context = gdk_display_get_app_launch_context (display);
+
+  if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context,
+      &error))
+    {
+      g_warning ("Failed to open debug window: %s", error->message);
+      g_error_free (error);
+      goto out;
+    }
+
+out:
+  tp_clear_object (&app_info);
+  tp_clear_object (&context);
+  g_free (path);
+  g_free (cmd);
+}
+
+static void
+empathy_call_window_contents_cb (GtkAction *action,
+    EmpathyCallWindow *self)
+{
+  empathy_url_show (GTK_WIDGET (self), "ghelp:empathy?audio-video");
+}
+
+static void
+empathy_call_window_debug_cb (GtkAction *action,
+    EmpathyCallWindow *self)
+{
+  GdkDisplay *display;
+  GError *error = NULL;
+  gchar *path;
+  GAppInfo *app_info;
+  GdkAppLaunchContext *context = NULL;
+
+  /* Try to run from source directory if possible */
+  path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"), "src",
+      "empathy-debugger", NULL);
+
+  if (!g_file_test (path, G_FILE_TEST_EXISTS))
+    {
+      g_free (path);
+      path = g_build_filename (BIN_DIR, "empathy-debugger", NULL);
+    }
+
+  app_info = g_app_info_create_from_commandline (path, NULL, 0, &error);
+  if (app_info == NULL)
+    {
+      DEBUG ("Failed to create app info: %s", error->message);
+      g_error_free (error);
+      goto out;
+    }
+
+  display = gdk_display_get_default ();
+  context = gdk_display_get_app_launch_context (display);
+
+  if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context,
+      &error))
+    {
+      g_warning ("Failed to open debug window: %s", error->message);
+      g_error_free (error);
+      goto out;
+    }
+
+out:
+  tp_clear_object (&app_info);
+  tp_clear_object (&context);
+  g_free (path);
+}
+
+static void
+empathy_call_window_about_cb (GtkAction *action,
+    EmpathyCallWindow *self)
+{
+  empathy_about_dialog_new (GTK_WINDOW (self));
+}
+
 static gboolean
 empathy_call_window_configure_event_cb (GtkWidget *widget,
     GdkEvent  *event,
@@ -815,7 +923,6 @@ empathy_call_window_init (EmpathyCallWindow *self)
   g_free (filename);
 
   empathy_builder_connect (gui, self,
-    "menuhangup", "activate", empathy_call_window_hangup_cb,
     "hangup", "clicked", empathy_call_window_hangup_cb,
     "audiocall", "clicked", empathy_call_window_audio_call_cb,
     "videocall", "clicked", empathy_call_window_video_call_cb,
@@ -824,6 +931,10 @@ empathy_call_window_init (EmpathyCallWindow *self)
     "camera", "toggled", empathy_call_window_camera_toggled_cb,
     "dialpad", "toggled", empathy_call_window_dialpad_cb,
     "menufullscreen", "activate", empathy_call_window_fullscreen_cb,
+    "menusettings", "activate", empathy_call_window_settings_cb,
+    "menucontents", "activate", empathy_call_window_contents_cb,
+    "menudebug", "activate", empathy_call_window_debug_cb,
+    "menuabout", "activate", empathy_call_window_about_cb,
     "menupreviewdisable", "activate", empathy_call_window_disable_camera_cb,
     "menupreviewminimise", "activate", empathy_call_window_minimise_camera_cb,
     "menupreviewmaximise", "activate", empathy_call_window_maximise_camera_cb,
diff --git a/src/empathy-call-window.ui b/src/empathy-call-window.ui
index 88127e1..81707a1 100644
--- a/src/empathy-call-window.ui
+++ b/src/empathy-call-window.ui
@@ -11,11 +11,11 @@
           </object>
         </child>
         <child>
-          <object class="GtkAction" id="menuhangup">
-            <property name="icon_name">call-stop</property>
-            <property name="name">menuhangup</property>
-            <property name="label" translatable="yes">Hang up</property>
+          <object class="GtkAction" id="menufullscreen">
+            <property name="stock_id">gtk-fullscreen</property>
+            <property name="name">menufullscreen</property>
           </object>
+          <accelerator key="F11"/>
         </child>
         <child>
           <object class="GtkAction" id="edit">
@@ -31,17 +31,34 @@
           </object>
         </child>
         <child>
-          <object class="GtkAction" id="view">
-            <property name="name">view</property>
-            <property name="label" translatable="yes">_View</property>
+          <object class="GtkAction" id="menusettings">
+            <property name="name">menusettings</property>
+            <property name="label" translatable="yes">Settings</property>
           </object>
         </child>
         <child>
-          <object class="GtkAction" id="menufullscreen">
-            <property name="stock_id">gtk-fullscreen</property>
-            <property name="name">menufullscreen</property>
+          <object class="GtkAction" id="help">
+            <property name="name">help</property>
+            <property name="label" translatable="yes">_Help</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="menucontents">
+            <property name="name">menucontents</property>
+            <property name="label" translatable="yes">Contents</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="menudebug">
+            <property name="name">menudebug</property>
+            <property name="label" translatable="yes">Call log</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkAction" id="menuabout">
+            <property name="name">menuabout</property>
+            <property name="label" translatable="yes">About</property>
           </object>
-          <accelerator key="F11"/>
         </child>
         <child>
           <object class="GtkAction" id="menupreviewminimise">
@@ -66,13 +83,16 @@
     <ui>
       <menubar name="menubar1">
         <menu action="call">
-          <menuitem action="menuhangup"/>
+          <menuitem action="menufullscreen"/>
         </menu>
         <menu action="edit">
           <menu action="menumicrophone"/>
+          <menuitem name="menusettings" action="menusettings"/>
         </menu>
-        <menu action="view">
-          <menuitem action="menufullscreen"/>
+        <menu action="help">
+          <menuitem name="menucontents" action="menucontents"/>
+          <menuitem name="menudebug" action="menudebug"/>
+          <menuitem name="menuabout" action="menuabout"/>
         </menu>
       </menubar>
       <popup name="video-popup">
diff --git a/src/empathy-main-window.c b/src/empathy-main-window.c
index a9e76a2..4aa720a 100644
--- a/src/empathy-main-window.c
+++ b/src/empathy-main-window.c
@@ -1875,9 +1875,8 @@ main_window_edit_blocked_contacts_cb (GtkAction         *action,
 			G_CALLBACK (gtk_widget_destroy), NULL);
 }
 
-static void
-main_window_edit_preferences_cb (GtkAction         *action,
-				 EmpathyMainWindow *window)
+void
+empathy_main_window_show_preferences (EmpathyMainWindow *window)
 {
 	EmpathyMainWindowPriv *priv = GET_PRIV (window);
 
@@ -1893,6 +1892,13 @@ main_window_edit_preferences_cb (GtkAction         *action,
 }
 
 static void
+main_window_edit_preferences_cb (GtkAction         *action,
+				 EmpathyMainWindow *window)
+{
+	empathy_main_window_show_preferences (window);
+}
+
+static void
 main_window_help_about_cb (GtkAction         *action,
 			   EmpathyMainWindow *window)
 {
diff --git a/src/empathy-main-window.h b/src/empathy-main-window.h
index 38879fb..064086a 100644
--- a/src/empathy-main-window.h
+++ b/src/empathy-main-window.h
@@ -53,6 +53,8 @@ GType empathy_main_window_get_type (void);
 
 GtkWidget *empathy_main_window_dup (void);
 
+void empathy_main_window_show_preferences (EmpathyMainWindow *window);
+
 G_END_DECLS
 
 #endif /* __EMPATHY_MAIN_WINDOW_H__ */
diff --git a/src/empathy.c b/src/empathy.c
index 6e2b165..8ac944d 100644
--- a/src/empathy.c
+++ b/src/empathy.c
@@ -106,6 +106,7 @@ struct _EmpathyApp
   /* Properties */
   gboolean no_connect;
   gboolean start_hidden;
+  gboolean show_preferences;
 
   gboolean activated;
 
@@ -230,11 +231,31 @@ new_ft_handler_cb (EmpathyFTFactory *factory,
   g_object_unref (handler);
 }
 
+static gboolean
+empathy_app_local_command_line (GApplication *app,
+    gchar ***arguments,
+    gint *exit_status);
+
 static int
 empathy_app_command_line (GApplication *app,
     GApplicationCommandLine *cmdline)
 {
   EmpathyApp *self = (EmpathyApp *) app;
+  gchar **args, **argv;
+  gint argc, exit_status, i;
+
+  args = g_application_command_line_get_arguments (cmdline, &argc);
+  /* We have to make an extra copy of the array, since g_option_context_parse()
+   * assumes that it can remove strings from the array without freeing them. */
+  argv = g_new (gchar*, argc + 1);
+  for (i = 0; i <= argc; i++)
+    argv[i] = args[i];
+
+  if (empathy_app_local_command_line (app, &argv, &exit_status))
+    DEBUG ("failed to parse command line!");
+
+  g_free (argv);
+  g_strfreev (args);
 
   if (!self->activated)
     {
@@ -273,6 +294,9 @@ empathy_app_command_line (GApplication *app,
       self->start_hidden = FALSE;
     }
 
+  if (self->show_preferences)
+    empathy_main_window_show_preferences (EMPATHY_MAIN_WINDOW (self->window));
+
   if (!self->start_hidden)
     empathy_window_present (GTK_WINDOW (self->window));
 
@@ -301,6 +325,7 @@ empathy_app_local_command_line (GApplication *app,
   gboolean retval = FALSE;
   GError *error = NULL;
   gboolean no_connect = FALSE, start_hidden = FALSE;
+  gboolean show_preferences = FALSE;
 
   GOptionContext *optcontext;
   GOptionEntry options[] = {
@@ -312,6 +337,9 @@ empathy_app_local_command_line (GApplication *app,
         0, G_OPTION_ARG_NONE, &start_hidden,
         N_("Don't display the contact list or any other dialogs on startup"),
         NULL },
+      { "show-preferences", 'p',
+        0, G_OPTION_ARG_NONE, &show_preferences,
+        NULL, NULL },
       { "version", 'v',
         G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, show_version_cb,
         NULL, NULL },
@@ -322,9 +350,14 @@ empathy_app_local_command_line (GApplication *app,
   g_option_context_add_group (optcontext, gtk_get_option_group (TRUE));
   g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
 
-  argv = *arguments;
-  for (i = 0; argv[i] != NULL; i++)
-    argc++;
+  argc = g_strv_length (*arguments);
+
+  /* We dup the args because g_option_context_parse() sets things to NULL,
+   * but we want to parse all the command line to the primary instance
+   * if necessary. */
+  argv = g_new (gchar*, argc + 1);
+  for (i = 0; i <= argc; i++)
+    argv[i] = (*arguments)[i];
 
   if (!g_option_context_parse (optcontext, &argc, &argv, &error))
     {
@@ -337,10 +370,13 @@ empathy_app_local_command_line (GApplication *app,
       retval = TRUE;
     }
 
+  g_free (argv);
+
   g_option_context_free (optcontext);
 
   self->no_connect = no_connect;
   self->start_hidden = start_hidden;
+  self->show_preferences = show_preferences;
 
   return retval;
 }
