diff --git a/configure.ac b/configure.ac
index 5ba5582..c5cfb49 100644
--- a/configure.ac
+++ b/configure.ac
@@ -231,7 +231,7 @@ PKG_CHECK_MODULES(EMPATHY,
    gcr-3 >= $GCR_REQUIRED
    libpulse
    libpulse-mainloop-glib
-   webkitgtk-3.0 >= $WEBKIT_REQUIRED
+   webkit2gtk-4.0 >= $WEBKIT_REQUIRED
    libsoup-2.4
    gee-0.8
 ])
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index fc35bec..228c6cf 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -3268,7 +3268,7 @@ chat_create_ui (EmpathyChat *chat)
 			  chat);
 	gtk_container_add (GTK_CONTAINER (priv->scrolled_window_chat),
 			   GTK_WIDGET (chat->view));
-	gtk_widget_show (GTK_WIDGET (chat->view));
+	gtk_widget_show_all (GTK_WIDGET (priv->scrolled_window_chat));
 
 	/* Add input GtkTextView */
 	chat->input_text_view = empathy_input_text_view_new ();
diff --git a/libempathy-gtk/empathy-chat.ui b/libempathy-gtk/empathy-chat.ui
index 436c8db..13e5018 100644
--- a/libempathy-gtk/empathy-chat.ui
+++ b/libempathy-gtk/empathy-chat.ui
@@ -26,18 +26,13 @@
             <property name="orientation">vertical</property>
             <property name="spacing">6</property>
             <child>
-              <object class="GtkScrolledWindow" id="scrolled_window_chat">
+              <object class="GtkVBox" id="scrolled_window_chat">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">automatic</property>
-                <property name="shadow_type">in</property>
                 <child>
                   <placeholder/>
                 </child>
               </object>
-              <packing>
-                <property name="position">0</property>
-              </packing>
             </child>
             <child>
               <object class="GtkScrolledWindow" id="scrolled_window_input">
diff --git a/libempathy-gtk/empathy-log-window.c b/libempathy-gtk/empathy-log-window.c
index d58de82..627b5bc 100644
--- a/libempathy-gtk/empathy-log-window.c
+++ b/libempathy-gtk/empathy-log-window.c
@@ -398,15 +398,15 @@ insert_or_change_row (EmpathyLogWindow *self,
       g_string_append_c (escaped_text, c);
     }
 
-  script = g_strdup_printf ("javascript:%s([%s], '%s', '%s', '%s');",
+  script = g_strdup_printf ("%s([%s], '%s', '%s', '%s');",
       method,
       g_strdelimit (str, ":", ','),
       escaped_text->str,
       icon != NULL ? icon : "",
       date);
 
-  webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self->priv->webview),
-      script);
+  webkit_web_view_run_javascript (WEBKIT_WEB_VIEW (self->priv->webview),
+      script, NULL, NULL, NULL);
 
   g_string_free (escaped_text, TRUE);
   g_free (str);
@@ -443,11 +443,11 @@ store_events_row_deleted (GtkTreeModel *model,
   char *str = gtk_tree_path_to_string (path);
   char *script;
 
-  script = g_strdup_printf ("javascript:deleteRow([%s]);",
+  script = g_strdup_printf ("deleteRow([%s]);",
       g_strdelimit (str, ":", ','));
 
-  webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self->priv->webview),
-      script);
+  webkit_web_view_run_javascript (WEBKIT_WEB_VIEW (self->priv->webview),
+      script, NULL, NULL, NULL);
 
   g_free (str);
   g_free (script);
@@ -462,12 +462,12 @@ store_events_has_child_rows (GtkTreeModel *model,
   char *str = gtk_tree_path_to_string (path);
   char *script;
 
-  script = g_strdup_printf ("javascript:hasChildRows([%s], %u);",
+  script = g_strdup_printf ("hasChildRows([%s], %u);",
       g_strdelimit (str, ":", ','),
       gtk_tree_model_iter_has_child (model, iter));
 
-  webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self->priv->webview),
-      script);
+  webkit_web_view_run_javascript (WEBKIT_WEB_VIEW (self->priv->webview),
+      script, NULL, NULL, NULL);
 
   g_free (str);
   g_free (script);
@@ -492,12 +492,12 @@ store_events_rows_reordered (GtkTreeModel *model,
 
   new_order_s = g_strjoinv (",", new_order_strv);
 
-  script = g_strdup_printf ("javascript:reorderRows([%s], [%s]);",
+  script = g_strdup_printf ("reorderRows([%s], [%s]);",
       str == NULL ? "" : g_strdelimit (str, ":", ','),
       new_order_s);
 
-  webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self->priv->webview),
-      script);
+  webkit_web_view_run_javascript (WEBKIT_WEB_VIEW (self->priv->webview),
+      script, NULL, NULL, NULL);
 
   g_free (str);
   g_free (script);
@@ -506,17 +506,27 @@ store_events_rows_reordered (GtkTreeModel *model,
 }
 
 static gboolean
-events_webview_handle_navigation (WebKitWebView *webview,
-    WebKitWebFrame *frame,
-    WebKitNetworkRequest *request,
-    WebKitWebNavigationAction *navigation_action,
-    WebKitWebPolicyDecision *policy_decision,
+events_webview_decide_policy (WebKitWebView *webview,
+    WebKitPolicyDecision *decision,
+    WebKitPolicyDecisionType decision_type,
     EmpathyLogWindow *window)
 {
+  WebKitNavigationPolicyDecision *navigation_decision;
+  WebKitNavigationAction *action;
+  WebKitURIRequest *request;
+
+  if (decision_type != WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION
+      && decision_type != WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION)
+    return FALSE;
+
+  navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION (decision);
+  action = webkit_navigation_policy_decision_get_navigation_action (navigation_decision);
+  request = webkit_navigation_action_get_request (action);
+
   empathy_url_show (GTK_WIDGET (webview),
-      webkit_network_request_get_uri (request));
+      webkit_uri_request_get_uri (request));
 
-  webkit_web_policy_decision_ignore (policy_decision);
+  webkit_policy_decision_ignore (decision);
   return TRUE;
 }
 
@@ -762,8 +772,8 @@ empathy_log_window_init (EmpathyLogWindow *self)
   g_free (uri);
 
   /* handle all navigation externally */
-  g_signal_connect (self->priv->webview, "navigation-policy-decision-requested",
-      G_CALLBACK (events_webview_handle_navigation), self);
+  g_signal_connect (self->priv->webview, "decide-policy",
+      G_CALLBACK (events_webview_decide_policy), self);
 
   /* listen to changes to the treemodel */
   g_signal_connect (self->priv->store_events, "row-inserted",
@@ -1988,6 +1998,8 @@ log_window_find_populate (EmpathyLogWindow *self,
   GtkTreeModel *model;
   GtkTreeSelection *selection;
   GtkListStore *store;
+  WebKitWebView *webview = WEBKIT_WEB_VIEW (self->priv->webview);
+  WebKitFindController *controller = webkit_web_view_get_find_controller (webview);
 
   gtk_tree_store_clear (self->priv->store_events);
 
@@ -2007,8 +2019,7 @@ log_window_find_populate (EmpathyLogWindow *self,
   if (TPAW_STR_EMPTY (search_criteria))
     {
       tp_clear_pointer (&self->priv->hits, tpl_log_manager_search_free);
-      webkit_web_view_set_highlight_text_matches (
-          WEBKIT_WEB_VIEW (self->priv->webview), FALSE);
+      webkit_find_controller_search_next (controller);
       log_window_who_populate (self);
       return;
     }
@@ -2018,8 +2029,8 @@ log_window_find_populate (EmpathyLogWindow *self,
       self);
 
   /* highlight the search text */
-  webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (self->priv->webview),
-      search_criteria, FALSE, 0);
+  webkit_find_controller_search (controller, search_criteria,
+      WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE, 20);
 
   tpl_log_manager_search_async (self->priv->log_manager,
       search_criteria, TPL_EVENT_MASK_ANY,
@@ -2573,6 +2584,7 @@ static void
 log_window_find_row (EmpathyLogWindow *self,
     GdkEventButton *event)
 {
+#if 0
   WebKitHitTestResult *hit = webkit_web_view_get_hit_test_result (
       WEBKIT_WEB_VIEW (self->priv->webview), event);
   WebKitDOMNode *inner_node;
@@ -2629,6 +2641,7 @@ log_window_find_row (EmpathyLogWindow *self,
   g_object_unref (hit);
 
   log_window_update_buttons_sensitivity (self);
+#endif
 }
 
 static gboolean
@@ -3141,9 +3154,9 @@ log_window_maybe_expand_events (void)
 
   /* If there's only one result, expand it */
   if (gtk_tree_model_iter_n_children (model, NULL) == 1)
-    webkit_web_view_execute_script (
+    webkit_web_view_run_javascript (
         WEBKIT_WEB_VIEW (log_window->priv->webview),
-        "javascript:expandAll()");
+        "expandAll();", NULL, NULL, NULL);
 }
 
 static gboolean
@@ -3281,12 +3294,12 @@ log_window_got_messages_for_date_cb (GObject *manager,
       path = gtk_tree_model_get_path (model, &iter);
       str = gtk_tree_path_to_string (path);
 
-      script = g_strdup_printf ("javascript:scrollToRow([%s]);",
+      script = g_strdup_printf ("scrollToRow([%s]);",
           g_strdelimit (str, ":", ','));
 
-      webkit_web_view_execute_script (
+      webkit_web_view_run_javascript (
           WEBKIT_WEB_VIEW (log_window->priv->webview),
-          script);
+          script, NULL, NULL, NULL);
 
       gtk_tree_path_free (path);
       g_free (str);
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
index a870702..53b36c8 100644
--- a/libempathy-gtk/empathy-theme-adium.c
+++ b/libempathy-gtk/empathy-theme-adium.c
@@ -168,27 +168,33 @@ free_queued_item (QueuedItem *item)
 }
 
 static gboolean
-theme_adium_navigation_policy_decision_requested_cb (WebKitWebView *view,
-    WebKitWebFrame *web_frame,
-    WebKitNetworkRequest *request,
-    WebKitWebNavigationAction *action,
-    WebKitWebPolicyDecision *decision,
+theme_adium_decide_policy_cb (WebKitWebView *webview,
+    WebKitPolicyDecision *decision,
+    WebKitPolicyDecisionType decision_type,
     gpointer data)
 {
+  WebKitNavigationPolicyDecision *navigation_decision;
+  WebKitNavigationAction *action;
+  WebKitURIRequest *request;
   const gchar *uri;
 
-  /* Only call url_show on clicks */
-  if (webkit_web_navigation_action_get_reason (action) !=
-      WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED)
-    {
-      webkit_web_policy_decision_use (decision);
-      return TRUE;
-    }
+  g_print ("decide policy\n");
+
+  if (decision_type != WEBKIT_POLICY_DECISION_TYPE_NAVIGATION_ACTION
+      && decision_type != WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION)
+    return FALSE;
 
-  uri = webkit_network_request_get_uri (request);
-  empathy_url_show (GTK_WIDGET (view), uri);
+  navigation_decision = WEBKIT_NAVIGATION_POLICY_DECISION (decision);
+  action = webkit_navigation_policy_decision_get_navigation_action (navigation_decision);
+  request = webkit_navigation_action_get_request (action);
+  uri = webkit_uri_request_get_uri (request);
 
-  webkit_web_policy_decision_ignore (decision);
+  if (g_str_has_prefix (uri, "file://"))
+    return FALSE;
+
+  empathy_url_show (GTK_WIDGET (webview), uri);
+
+  webkit_policy_decision_ignore (decision);
   return TRUE;
 }
 
@@ -238,7 +244,7 @@ theme_adium_load_template (EmpathyThemeAdium *self)
   template = string_with_format (self->priv->data->template_html,
     variant_path, NULL);
 
-  webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (self),
+  webkit_web_view_load_html (WEBKIT_WEB_VIEW (self),
       template, basedir_uri);
 
   g_free (basedir_uri);
@@ -741,7 +747,7 @@ theme_adium_add_html (EmpathyThemeAdium *self,
     }
 
   script = g_string_free (string, FALSE);
-  webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self), script);
+  webkit_web_view_run_javascript (WEBKIT_WEB_VIEW (self), script, NULL, NULL, NULL);
   g_free (script);
 }
 
@@ -762,6 +768,7 @@ theme_adium_append_event_escaped (EmpathyThemeAdium *self,
     }
 }
 
+#if 0
 static void
 theme_adium_remove_focus_marks (EmpathyThemeAdium *self,
     WebKitDOMNodeList *nodes)
@@ -772,7 +779,7 @@ theme_adium_remove_focus_marks (EmpathyThemeAdium *self,
   for (i = 0; i < webkit_dom_node_list_get_length (nodes); i++)
     {
       WebKitDOMNode *node = webkit_dom_node_list_item (nodes, i);
-      WebKitDOMHTMLElement *element = WEBKIT_DOM_HTML_ELEMENT (node);
+      WebKitDOMElement *element = WEBKIT_DOM_ELEMENT (node);
       gchar *class_name;
       gchar **classes, **iter;
       GString *new_class_name;
@@ -781,7 +788,7 @@ theme_adium_remove_focus_marks (EmpathyThemeAdium *self,
       if (element == NULL)
         continue;
 
-      class_name = webkit_dom_html_element_get_class_name (element);
+      class_name = webkit_dom_element_get_class_name (element);
       classes = g_strsplit (class_name, " ", -1);
       new_class_name = g_string_sized_new (strlen (class_name));
 
@@ -798,17 +805,19 @@ theme_adium_remove_focus_marks (EmpathyThemeAdium *self,
             }
         }
 
-      webkit_dom_html_element_set_class_name (element, new_class_name->str);
+      webkit_dom_element_set_class_name (element, new_class_name->str);
 
       g_free (class_name);
       g_strfreev (classes);
       g_string_free (new_class_name, TRUE);
     }
 }
+#endif
 
 static void
 theme_adium_remove_all_focus_marks (EmpathyThemeAdium *self)
 {
+#if 0
   WebKitDOMDocument *dom;
   WebKitDOMNodeList *nodes;
   GError *error = NULL;
@@ -834,6 +843,7 @@ theme_adium_remove_all_focus_marks (EmpathyThemeAdium *self)
     }
 
   theme_adium_remove_focus_marks (self, nodes);
+#endif
 }
 
 enum
@@ -1164,6 +1174,7 @@ void
 empathy_theme_adium_edit_message (EmpathyThemeAdium *self,
     EmpathyMessage *message)
 {
+#if 0
   WebKitDOMDocument *doc;
   WebKitDOMElement *span;
   gchar *id, *parsed_body;
@@ -1261,6 +1272,7 @@ except:
 finally:
   g_free (id);
   g_free (parsed_body);
+#endif
 }
 
 void
@@ -1276,13 +1288,18 @@ empathy_theme_adium_scroll (EmpathyThemeAdium *self,
 void
 empathy_theme_adium_scroll_down (EmpathyThemeAdium *self)
 {
-  webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self), "alignChat(true);");
+  webkit_web_view_run_javascript (WEBKIT_WEB_VIEW (self), "alignChat(true);",
+      NULL, NULL, NULL);
 }
 
 gboolean
 empathy_theme_adium_get_has_selection (EmpathyThemeAdium *self)
 {
+#if 0
   return webkit_web_view_has_selection (WEBKIT_WEB_VIEW (self));
+#else
+  return FALSE;
+#endif
 }
 
 void
@@ -1305,9 +1322,13 @@ empathy_theme_adium_find_previous (EmpathyThemeAdium *self,
     gboolean new_search,
     gboolean match_case)
 {
+#if 0
   /* FIXME: Doesn't respect new_search */
   return webkit_web_view_search_text (WEBKIT_WEB_VIEW (self),
       search_criteria, match_case, FALSE, TRUE);
+#else
+  return FALSE;
+#endif
 }
 
 gboolean
@@ -1316,9 +1337,13 @@ empathy_theme_adium_find_next (EmpathyThemeAdium *self,
     gboolean new_search,
     gboolean match_case)
 {
+#if 0
   /* FIXME: Doesn't respect new_search */
   return webkit_web_view_search_text (WEBKIT_WEB_VIEW (self),
       search_criteria, match_case, TRUE, TRUE);
+#else
+  return FALSE;
+#endif
 }
 
 void
@@ -1341,23 +1366,28 @@ empathy_theme_adium_highlight (EmpathyThemeAdium *self,
     const gchar *text,
     gboolean match_case)
 {
+#if 0
   webkit_web_view_unmark_text_matches (WEBKIT_WEB_VIEW (self));
   webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (self),
       text, match_case, 0);
   webkit_web_view_set_highlight_text_matches (WEBKIT_WEB_VIEW (self),
       TRUE);
+#endif
 }
 
 void
 empathy_theme_adium_copy_clipboard (EmpathyThemeAdium *self)
 {
+#if 0
   webkit_web_view_copy_clipboard (WEBKIT_WEB_VIEW (self));
+#endif
 }
 
 static void
 theme_adium_remove_mark_from_message (EmpathyThemeAdium *self,
     guint32 id)
 {
+#if 0
   WebKitDOMDocument *dom;
   WebKitDOMNodeList *nodes;
   gchar *class;
@@ -1382,6 +1412,7 @@ theme_adium_remove_mark_from_message (EmpathyThemeAdium *self,
     }
 
   theme_adium_remove_focus_marks (self, nodes);
+#endif
 }
 
 static void
@@ -1478,13 +1509,18 @@ empathy_theme_adium_set_show_avatars (EmpathyThemeAdium *self,
 }
 
 static void
-theme_adium_load_finished_cb (WebKitWebView *view,
-    WebKitWebFrame *frame,
+theme_adium_load_changed_cb (WebKitWebView *view,
+    WebKitLoadEvent load_event,
     gpointer user_data)
 {
   EmpathyThemeAdium *self = EMPATHY_THEME_ADIUM (view);
   GList *l;
 
+  g_print ("load changed %d", load_event);
+
+  if (load_event != WEBKIT_LOAD_FINISHED)
+    return;
+
   DEBUG ("Page loaded");
   self->priv->pages_loading--;
 
@@ -1566,6 +1602,7 @@ theme_adium_dispose (GObject *object)
   G_OBJECT_CLASS (empathy_theme_adium_parent_class)->dispose (object);
 }
 
+#if 0
 static gboolean
 theme_adium_inspector_show_window_cb (WebKitWebInspector *inspector,
     EmpathyThemeAdium *self)
@@ -1595,7 +1632,6 @@ theme_adium_inspect_web_view_cb (WebKitWebInspector *inspector,
     WebKitWebView *web_view,
     EmpathyThemeAdium *self)
 {
-  GtkWidget *scrolled_window;
   GtkWidget *inspector_web_view;
 
   if (!self->priv->inspector_window)
@@ -1609,28 +1645,18 @@ theme_adium_inspect_web_view_cb (WebKitWebInspector *inspector,
       g_signal_connect (self->priv->inspector_window, "delete-event",
             G_CALLBACK (gtk_widget_hide_on_delete), NULL);
 
-      /* Pack a scrolled window */
-      scrolled_window = gtk_scrolled_window_new (NULL, NULL);
-
-      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
-              GTK_POLICY_AUTOMATIC,
-              GTK_POLICY_AUTOMATIC);
-      gtk_container_add (GTK_CONTAINER (self->priv->inspector_window),
-             scrolled_window);
-      gtk_widget_show (scrolled_window);
-
-      /* Pack a webview in the scrolled window. That webview will be
+      /* Pack a webview in the window. That webview will be
        * used to render the inspector tool. */
       inspector_web_view = webkit_web_view_new ();
-      gtk_container_add (GTK_CONTAINER (scrolled_window),
+      gtk_container_add (GTK_CONTAINER (self->priv->inspector_window),
              inspector_web_view);
-      gtk_widget_show (scrolled_window);
 
       return WEBKIT_WEB_VIEW (inspector_web_view);
     }
 
   return NULL;
 }
+#endif
 
 static void
 theme_adium_constructed (GObject *object)
@@ -1639,7 +1665,11 @@ theme_adium_constructed (GObject *object)
   const gchar *font_family = NULL;
   gint font_size = 0;
   WebKitWebView *webkit_view = WEBKIT_WEB_VIEW (object);
+#if 0
   WebKitWebInspector *webkit_inspector;
+#endif
+
+  G_OBJECT_CLASS (empathy_theme_adium_parent_class)->constructed (object);
 
   /* Set default settings */
   font_family = tp_asv_get_string (self->priv->data->info, "DefaultFontFamily");
@@ -1647,10 +1677,12 @@ theme_adium_constructed (GObject *object)
 
   if (font_family && font_size)
     {
+#if 0
       g_object_set (webkit_web_view_get_settings (webkit_view),
         "default-font-family", font_family,
         "default-font-size", font_size,
         NULL);
+#endif
     }
   else
     {
@@ -1660,6 +1692,7 @@ theme_adium_constructed (GObject *object)
     }
 
   /* Setup webkit inspector */
+#if 0
   webkit_inspector = webkit_web_view_get_inspector (webkit_view);
   g_signal_connect (webkit_inspector, "inspect-web-view",
       G_CALLBACK (theme_adium_inspect_web_view_cb), object);
@@ -1667,6 +1700,7 @@ theme_adium_constructed (GObject *object)
       G_CALLBACK (theme_adium_inspector_show_window_cb), object);
   g_signal_connect (webkit_inspector, "close-window",
       G_CALLBACK (theme_adium_inspector_close_window_cb), object);
+#endif
 
   /* Load template */
   theme_adium_load_template (EMPATHY_THEME_ADIUM (object));
@@ -1765,10 +1799,10 @@ empathy_theme_adium_init (EmpathyThemeAdium *self)
   /* Show avatars by default. */
   self->priv->show_avatars = TRUE;
 
-  g_signal_connect (self, "load-finished",
-      G_CALLBACK (theme_adium_load_finished_cb), NULL);
-  g_signal_connect (self, "navigation-policy-decision-requested",
-        G_CALLBACK (theme_adium_navigation_policy_decision_requested_cb), NULL);
+  g_signal_connect (self, "load-changed",
+      G_CALLBACK (theme_adium_load_changed_cb), NULL);
+  g_signal_connect (self, "decide-policy",
+        G_CALLBACK (theme_adium_decide_policy_cb), NULL);
   g_signal_connect (self, "context-menu",
       G_CALLBACK (theme_adium_context_menu_cb), NULL);
 
@@ -1811,7 +1845,8 @@ empathy_theme_adium_set_variant (EmpathyThemeAdium *self,
   script = g_strdup_printf ("setStylesheet(\"mainStyle\",\"%s\");",
       variant_path);
 
-  webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self), script);
+  webkit_web_view_run_javascript (WEBKIT_WEB_VIEW (self), script,
+      NULL, NULL, NULL);
 
   g_free (variant_path);
   g_free (script);
diff --git a/libempathy-gtk/empathy-theme-adium.h b/libempathy-gtk/empathy-theme-adium.h
index 698d284..33d9f8f 100644
--- a/libempathy-gtk/empathy-theme-adium.h
+++ b/libempathy-gtk/empathy-theme-adium.h
@@ -21,7 +21,7 @@
 #ifndef __EMPATHY_THEME_ADIUM_H__
 #define __EMPATHY_THEME_ADIUM_H__
 
-#include <webkit/webkitwebview.h>
+#include <webkit2/webkit2.h>
 
 #include "empathy-message.h"
 
diff --git a/libempathy-gtk/empathy-webkit-utils.c b/libempathy-gtk/empathy-webkit-utils.c
index 90dc28c..c55d0e8 100644
--- a/libempathy-gtk/empathy-webkit-utils.c
+++ b/libempathy-gtk/empathy-webkit-utils.c
@@ -154,7 +154,7 @@ empathy_webkit_bind_font_setting (WebKitWebView *webview,
     GSettings *gsettings,
     const char *key)
 {
-  WebKitWebSettings *settings = webkit_web_view_get_settings (webview);
+  WebKitSettings *settings = webkit_web_view_get_settings (webview);
 
   g_settings_bind_with_mapping (gsettings, key,
       settings, "default-font-family",
@@ -224,6 +224,13 @@ empathy_webkit_context_menu_selection_done_cb (GtkMenuShell *menu,
   g_object_unref (hit_test_result);
 }
 
+static void
+empathy_webkit_select_all (WebKitWebView *view)
+{
+  webkit_web_view_execute_editing_command (view,
+      WEBKIT_EDITING_COMMAND_SELECT_ALL);
+}
+
 GtkWidget *
 empathy_webkit_create_context_menu (WebKitWebView *view,
     WebKitHitTestResult *hit_test_result,
@@ -245,10 +252,11 @@ empathy_webkit_create_context_menu (WebKitWebView *view,
   gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
 
   g_signal_connect_swapped (item, "activate",
-      G_CALLBACK (webkit_web_view_select_all),
+      G_CALLBACK (empathy_webkit_select_all),
       view);
 
   /* Copy menu item */
+#if 0
   if (webkit_web_view_can_copy_clipboard (view))
     {
       item = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, NULL);
@@ -258,6 +266,7 @@ empathy_webkit_create_context_menu (WebKitWebView *view,
           G_CALLBACK (webkit_web_view_copy_clipboard),
           view);
     }
+#endif
 
   /* Clear menu item */
   if (flags & EMPATHY_WEBKIT_MENU_CLEAR)
@@ -321,6 +330,7 @@ empathy_webkit_context_menu_for_event (WebKitWebView *view,
     GdkEventButton *event,
     EmpathyWebKitMenuFlags flags)
 {
+#if 0
   GtkWidget *menu;
   WebKitHitTestResult *hit_test_result;
 
@@ -333,6 +343,7 @@ empathy_webkit_context_menu_for_event (WebKitWebView *view,
       event->button, event->time);
 
   g_object_unref (hit_test_result);
+#endif
 }
 
 void
diff --git a/libempathy-gtk/empathy-webkit-utils.h b/libempathy-gtk/empathy-webkit-utils.h
index 98fdc4d..bbab2cc 100644
--- a/libempathy-gtk/empathy-webkit-utils.h
+++ b/libempathy-gtk/empathy-webkit-utils.h
@@ -22,7 +22,7 @@
 #define _EMPATHY_WEBKIT_UTILS__H_
 
 #include <tp-account-widgets/tpaw-string-parser.h>
-#include <webkit/webkit.h>
+#include <webkit2/webkit2.h>
 
 G_BEGIN_DECLS
 
