diff --git a/configure.ac b/configure.ac
index 7d2d5d2..4b88a4f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -105,6 +105,7 @@ PKG_CHECK_MODULES(LIBEMPATHYGTK,
    telepathy-glib >= $TELEPATHY_GLIB_REQUIRED
    libmissioncontrol >= $MISSION_CONTROL_REQUIRED
    telepathy-farsight
+   farsight2-0.10
    gstreamer-0.10
    gstreamer-interfaces-0.10
 ])
diff --git a/libempathy-gtk/empathy-contact-list-store.c b/libempathy-gtk/empathy-contact-list-store.c
index e7982f3..f5c7719 100644
--- a/libempathy-gtk/empathy-contact-list-store.c
+++ b/libempathy-gtk/empathy-contact-list-store.c
@@ -736,7 +736,8 @@ contact_list_store_setup (EmpathyContactListStore *store)
 					       G_TYPE_BOOLEAN,       /* Is active */
 					       G_TYPE_BOOLEAN,       /* Is online */
 					       G_TYPE_BOOLEAN,       /* Is separator */
-					       G_TYPE_BOOLEAN};      /* Can VoIP */
+					       G_TYPE_BOOLEAN,       /* Can make audio calls */
+					       G_TYPE_BOOLEAN};      /* Can make video calls */
 	
 	priv = GET_PRIV (store);
 
@@ -870,7 +871,12 @@ contact_list_store_add_contact (EmpathyContactListStore *store,
 				    EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, contact,
 				    EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, FALSE,
 				    EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, FALSE,
-				    EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP, empathy_contact_can_voip (contact),
+				    EMPATHY_CONTACT_LIST_STORE_COL_CAN_AUDIO_CALL,
+				      empathy_contact_get_capabilities (contact) &
+				        EMPATHY_CAPABILITIES_AUDIO,
+				    EMPATHY_CONTACT_LIST_STORE_COL_CAN_VIDEO_CALL,
+				      empathy_contact_get_capabilities (contact) &
+				        EMPATHY_CAPABILITIES_VIDEO,
 				    -1);
 	}
 
@@ -887,7 +893,12 @@ contact_list_store_add_contact (EmpathyContactListStore *store,
 				    EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, contact,
 				    EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, FALSE,
 				    EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, FALSE,
-				    EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP, empathy_contact_can_voip (contact),
+				    EMPATHY_CONTACT_LIST_STORE_COL_CAN_AUDIO_CALL,
+				      empathy_contact_get_capabilities (contact) &
+				        EMPATHY_CAPABILITIES_AUDIO,
+				    EMPATHY_CONTACT_LIST_STORE_COL_CAN_VIDEO_CALL,
+				      empathy_contact_get_capabilities (contact) &
+				        EMPATHY_CAPABILITIES_VIDEO,
 				    -1);
 		g_free (l->data);
 	}
@@ -1056,7 +1067,12 @@ contact_list_store_contact_update (EmpathyContactListStore *store,
 				    EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, FALSE,
 				    EMPATHY_CONTACT_LIST_STORE_COL_IS_ONLINE, now_online,
 				    EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, FALSE,
-				    EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP, empathy_contact_can_voip (contact),
+				    EMPATHY_CONTACT_LIST_STORE_COL_CAN_AUDIO_CALL,
+				      empathy_contact_get_capabilities (contact) &
+				        EMPATHY_CAPABILITIES_AUDIO,
+				    EMPATHY_CONTACT_LIST_STORE_COL_CAN_VIDEO_CALL,
+				      empathy_contact_get_capabilities (contact) &
+				        EMPATHY_CAPABILITIES_VIDEO,
 				    -1);
 	}
 
diff --git a/libempathy-gtk/empathy-contact-list-store.h b/libempathy-gtk/empathy-contact-list-store.h
index 10354ff..75f6e0f 100644
--- a/libempathy-gtk/empathy-contact-list-store.h
+++ b/libempathy-gtk/empathy-contact-list-store.h
@@ -60,7 +60,8 @@ typedef enum {
 	EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE,
 	EMPATHY_CONTACT_LIST_STORE_COL_IS_ONLINE,
 	EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR,
-	EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP,
+	EMPATHY_CONTACT_LIST_STORE_COL_CAN_AUDIO_CALL,
+	EMPATHY_CONTACT_LIST_STORE_COL_CAN_VIDEO_CALL,
 	EMPATHY_CONTACT_LIST_STORE_COL_COUNT
 } EmpathyContactListStoreCol;
 
diff --git a/libempathy-gtk/empathy-contact-list-view.c b/libempathy-gtk/empathy-contact-list-view.c
index ca224f5..d8d1153 100644
--- a/libempathy-gtk/empathy-contact-list-view.c
+++ b/libempathy-gtk/empathy-contact-list-view.c
@@ -615,9 +615,10 @@ contact_list_view_row_activated (GtkTreeView       *view,
 }
 
 static void
-contact_list_view_voip_activated_cb (EmpathyCellRendererActivatable *cell,
-				     const gchar                    *path_string,
-				     EmpathyContactListView         *view)
+contact_list_start_voip_call (EmpathyCellRendererActivatable *cell,
+    const gchar                    *path_string,
+    EmpathyContactListView         *view,
+    gboolean with_video)
 {
 	EmpathyContactListViewPriv *priv = GET_PRIV (view);
 	GtkTreeModel               *model;
@@ -639,15 +640,32 @@ contact_list_view_voip_activated_cb (EmpathyCellRendererActivatable *cell,
 
 	if (contact) {
 		EmpathyCallFactory *factory;
-
 		factory = empathy_call_factory_get ();
-		empathy_call_factory_new_call (factory, contact);
-
+		empathy_call_factory_new_call_with_streams (factory, contact,
+			TRUE, with_video);
 		g_object_unref (contact);
 	}
 }
 
 static void
+contact_list_view_video_call_activated_cb (
+    EmpathyCellRendererActivatable *cell,
+    const gchar                    *path_string,
+    EmpathyContactListView         *view)
+{
+  contact_list_start_voip_call (cell, path_string, view, TRUE);
+}
+
+
+static void
+contact_list_view_audio_call_activated_cb (EmpathyCellRendererActivatable *cell,
+				     const gchar                    *path_string,
+				     EmpathyContactListView         *view)
+{
+  contact_list_start_voip_call (cell, path_string, view, FALSE);
+}
+
+static void
 contact_list_view_cell_set_background (EmpathyContactListView *view,
 				       GtkCellRenderer       *cell,
 				       gboolean               is_group,
@@ -708,7 +726,8 @@ contact_list_view_pixbuf_cell_data_func (GtkTreeViewColumn     *tree_column,
 }
 
 static void
-contact_list_view_voip_cell_data_func (GtkTreeViewColumn      *tree_column,
+contact_list_view_audio_call_cell_data_func (
+				       GtkTreeViewColumn      *tree_column,
 				       GtkCellRenderer        *cell,
 				       GtkTreeModel           *model,
 				       GtkTreeIter            *iter,
@@ -721,7 +740,7 @@ contact_list_view_voip_cell_data_func (GtkTreeViewColumn      *tree_column,
 	gtk_tree_model_get (model, iter,
 			    EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
 			    EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE, &is_active,
-			    EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP, &can_voip,
+			    EMPATHY_CONTACT_LIST_STORE_COL_CAN_AUDIO_CALL, &can_voip,
 			    -1);
 
 	g_object_set (cell,
@@ -733,6 +752,33 @@ contact_list_view_voip_cell_data_func (GtkTreeViewColumn      *tree_column,
 }
 
 static void
+contact_list_view_video_call_cell_data_func (
+				       GtkTreeViewColumn      *tree_column,
+				       GtkCellRenderer        *cell,
+				       GtkTreeModel           *model,
+				       GtkTreeIter            *iter,
+				       EmpathyContactListView *view)
+{
+	gboolean is_group;
+	gboolean is_active;
+	gboolean can_voip;
+
+	gtk_tree_model_get (model, iter,
+			    EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+			    EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE, &is_active,
+			    EMPATHY_CONTACT_LIST_STORE_COL_CAN_VIDEO_CALL, &can_voip,
+			    -1);
+
+	g_object_set (cell,
+		      "visible", !is_group && can_voip,
+		      "icon-name", EMPATHY_IMAGE_VIDEO_CALL,
+		      NULL);
+
+	contact_list_view_cell_set_background (view, cell, is_group, is_active);
+}
+
+
+static void
 contact_list_view_avatar_cell_data_func (GtkTreeViewColumn     *tree_column,
 					 GtkCellRenderer       *cell,
 					 GtkTreeModel          *model,
@@ -948,12 +994,28 @@ contact_list_view_setup (EmpathyContactListView *view)
 	gtk_tree_view_column_add_attribute (col, cell,
 					    "is_group", EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP);
 
-	/* Voip Capability Icon */
+	/* Audio Call Icon */
+	cell = empathy_cell_renderer_activatable_new ();
+	gtk_tree_view_column_pack_start (col, cell, FALSE);
+	gtk_tree_view_column_set_cell_data_func (
+		col, cell,
+		(GtkTreeCellDataFunc) contact_list_view_audio_call_cell_data_func,
+		view, NULL);
+
+	g_object_set (cell,
+		      "visible", FALSE,
+		      NULL);
+
+	g_signal_connect (cell, "path-activated",
+			  G_CALLBACK (contact_list_view_audio_call_activated_cb),
+			  view);
+
+	/* Video Call Icon */
 	cell = empathy_cell_renderer_activatable_new ();
 	gtk_tree_view_column_pack_start (col, cell, FALSE);
 	gtk_tree_view_column_set_cell_data_func (
 		col, cell,
-		(GtkTreeCellDataFunc) contact_list_view_voip_cell_data_func,
+		(GtkTreeCellDataFunc) contact_list_view_video_call_cell_data_func,
 		view, NULL);
 
 	g_object_set (cell,
@@ -961,7 +1023,7 @@ contact_list_view_setup (EmpathyContactListView *view)
 		      NULL);
 
 	g_signal_connect (cell, "path-activated",
-			  G_CALLBACK (contact_list_view_voip_activated_cb),
+			  G_CALLBACK (contact_list_view_video_call_activated_cb),
 			  view);
 
 	/* Avatar */
diff --git a/libempathy-gtk/empathy-images.h b/libempathy-gtk/empathy-images.h
index 6abd2e8..8dbb3ad 100644
--- a/libempathy-gtk/empathy-images.h
+++ b/libempathy-gtk/empathy-images.h
@@ -38,6 +38,7 @@ G_BEGIN_DECLS
 #define EMPATHY_IMAGE_CONTACT_INFORMATION "gtk-info"
 #define EMPATHY_IMAGE_GROUP_MESSAGE       "system-users"
 #define EMPATHY_IMAGE_VOIP                "audio-input-microphone"
+#define EMPATHY_IMAGE_VIDEO_CALL          "camera-web"
 #define EMPATHY_IMAGE_LOG                 "document-open-recent"
 #define EMPATHY_IMAGE_DOCUMENT_SEND       "document-send"
 
diff --git a/libempathy/empathy-call-factory.c b/libempathy/empathy-call-factory.c
index f412139..6882cbb 100644
--- a/libempathy/empathy-call-factory.c
+++ b/libempathy/empathy-call-factory.c
@@ -133,15 +133,18 @@ empathy_call_factory_get (void)
 }
 
 void
-empathy_call_factory_new_call (EmpathyCallFactory *factory,
-  EmpathyContact *contact)
+empathy_call_factory_new_call_with_streams (EmpathyCallFactory *factory,
+    EmpathyContact *contact,
+    gboolean initial_audio,
+    gboolean initial_video)
 {
   EmpathyCallHandler *handler;
 
   g_return_if_fail (factory != NULL);
   g_return_if_fail (contact != NULL);
 
-  handler = empathy_call_handler_new_for_contact (contact);
+  handler = empathy_call_handler_new_for_contact_with_streams (contact,
+    initial_audio, initial_video);
 
   g_signal_emit (factory, signals[NEW_CALL_HANDLER], 0,
     handler, TRUE);
@@ -149,6 +152,14 @@ empathy_call_factory_new_call (EmpathyCallFactory *factory,
   g_object_unref (handler);
 }
 
+
+void
+empathy_call_factory_new_call (EmpathyCallFactory *factory,
+    EmpathyContact *contact)
+{
+  empathy_call_factory_new_call_with_streams (factory, contact, TRUE, FALSE);
+}
+
 void
 empathy_call_factory_claim_channel (EmpathyCallFactory *factory,
   EmpathyDispatchOperation *operation)
diff --git a/libempathy/empathy-call-factory.h b/libempathy/empathy-call-factory.h
index 13b16b6..3360152 100644
--- a/libempathy/empathy-call-factory.h
+++ b/libempathy/empathy-call-factory.h
@@ -67,6 +67,9 @@ EmpathyCallFactory *empathy_call_factory_get (void);
 void empathy_call_factory_new_call (EmpathyCallFactory *factory,
   EmpathyContact *contact);
 
+void empathy_call_factory_new_call_with_streams (EmpathyCallFactory *factory,
+  EmpathyContact *contact, gboolean initial_audio, gboolean initial_video);
+
 void empathy_call_factory_claim_channel (EmpathyCallFactory *factory,
   EmpathyDispatchOperation *operation);
 
diff --git a/libempathy/empathy-call-handler.c b/libempathy/empathy-call-handler.c
index f6cea96..0c84595 100644
--- a/libempathy/empathy-call-handler.c
+++ b/libempathy/empathy-call-handler.c
@@ -27,6 +27,8 @@
 #include <telepathy-farsight/channel.h>
 #include <telepathy-farsight/stream.h>
 
+#include <gst/farsight/fs-element-added-notifier.h>
+
 #include "empathy-call-handler.h"
 #include "empathy-dispatcher.h"
 #include "empathy-marshal.h"
@@ -49,7 +51,9 @@ static guint signals[LAST_SIGNAL] = {0};
 enum {
   PROP_TP_CALL = 1,
   PROP_GST_BUS,
-  PROP_CONTACT
+  PROP_CONTACT,
+  PROP_INITIAL_AUDIO,
+  PROP_INITIAL_VIDEO
 };
 
 /* private structure */
@@ -59,6 +63,9 @@ typedef struct {
   EmpathyTpCall *call;
   EmpathyContact *contact;
   TfChannel *tfchannel;
+  gboolean initial_audio;
+  gboolean initial_video;
+  FsElementAddedNotifier *fsnotifier;
 } EmpathyCallHandlerPriv;
 
 #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyCallHandler)
@@ -91,6 +98,12 @@ empathy_call_handler_dispose (GObject *object)
 
   priv->call = NULL;
 
+  if (priv->fsnotifier != NULL)
+    {
+      g_object_unref (priv->fsnotifier);
+    }
+  priv->fsnotifier = NULL;
+
   /* release any references held by the object here */
   if (G_OBJECT_CLASS (empathy_call_handler_parent_class)->dispose)
     G_OBJECT_CLASS (empathy_call_handler_parent_class)->dispose (object);
@@ -138,6 +151,12 @@ empathy_call_handler_set_property (GObject *object,
       case PROP_TP_CALL:
         priv->call = g_value_dup_object (value);
         break;
+      case PROP_INITIAL_AUDIO:
+        priv->initial_audio = g_value_get_boolean (value);
+        break;
+      case PROP_INITIAL_VIDEO:
+        priv->initial_video = g_value_get_boolean (value);
+        break;
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
     }
@@ -157,6 +176,12 @@ empathy_call_handler_get_property (GObject *object,
       case PROP_TP_CALL:
         g_value_set_object (value, priv->call);
         break;
+      case PROP_INITIAL_AUDIO:
+        g_value_set_boolean (value, priv->initial_audio);
+        break;
+      case PROP_INITIAL_VIDEO:
+        g_value_set_boolean (value, priv->initial_video);
+        break;
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
     }
@@ -189,6 +214,20 @@ empathy_call_handler_class_init (EmpathyCallHandlerClass *klass)
     G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
   g_object_class_install_property (object_class, PROP_TP_CALL, param_spec);
 
+  param_spec = g_param_spec_boolean ("initial-audio",
+    "initial-audio", "Whether the call should start with audio",
+    TRUE,
+    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (object_class, PROP_INITIAL_AUDIO,
+      param_spec);
+
+  param_spec = g_param_spec_boolean ("initial-video",
+    "initial-video", "Whether the call should start with video",
+    FALSE,
+    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (object_class, PROP_INITIAL_VIDEO,
+    param_spec);
+
   signals[CONFERENCE_ADDED] =
     g_signal_new ("conference-added", G_TYPE_FROM_CLASS (klass),
       G_SIGNAL_RUN_LAST, 0, NULL, NULL,
@@ -233,6 +272,17 @@ empathy_call_handler_new_for_contact (EmpathyContact *contact)
 }
 
 EmpathyCallHandler *
+empathy_call_handler_new_for_contact_with_streams (EmpathyContact *contact,
+    gboolean audio, gboolean video)
+{
+  return EMPATHY_CALL_HANDLER (g_object_new (EMPATHY_TYPE_CALL_HANDLER,
+    "contact", contact,
+    "initial-audio", audio,
+    "initial-video", video,
+    NULL));
+}
+
+EmpathyCallHandler *
 empathy_call_handler_new_for_channel (EmpathyTpCall *call)
 {
   return EMPATHY_CALL_HANDLER (g_object_new (EMPATHY_TYPE_CALL_HANDLER,
@@ -252,10 +302,49 @@ empathy_call_handler_bus_message (EmpathyCallHandler *handler,
 }
 
 static void
+conference_element_added (FsElementAddedNotifier *notifier,
+    GstBin *bin,
+    GstElement *element,
+    gpointer user_data)
+{
+  GstElementFactory *factory;
+  const gchar *name;
+
+  factory = gst_element_get_factory (element);
+  name = gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory));
+
+  if (!tp_strdiff (name, "x264enc"))
+    {
+      /* Ensure that the encoder creates the baseline profile */
+      g_object_set (element,
+          "byte-stream", TRUE,
+          "bframes", 0,
+          "b-adapt", FALSE,
+          "cabac", FALSE,
+          "dct8x8", FALSE,
+          NULL);
+    }
+  else if (!tp_strdiff (name, "gstrtpbin"))
+    {
+      /* Lower the jitterbuffer latency to make it more suitable for video
+       * conferencing */
+      g_object_set (element, "latency", 100, NULL);
+    }
+}
+
+static void
 empathy_call_handler_tf_channel_session_created_cb (TfChannel *tfchannel,
   FsConference *conference, FsParticipant *participant,
   EmpathyCallHandler *self)
 {
+  EmpathyCallHandlerPriv *priv = GET_PRIV (self);
+
+  priv->fsnotifier = fs_element_added_notifier_new ();
+  fs_element_added_notifier_add (priv->fsnotifier, GST_BIN (conference));
+
+  g_signal_connect (priv->fsnotifier, "element-added",
+    G_CALLBACK (conference_element_added), NULL);
+
   g_signal_emit (G_OBJECT (self), signals[CONFERENCE_ADDED], 0,
     GST_ELEMENT (conference));
 }
@@ -409,7 +498,8 @@ empathy_call_handler_request_cb (EmpathyDispatchOperation *operation,
 
   empathy_call_handler_start_tpfs (self);
 
-  empathy_tp_call_to (priv->call, priv->contact);
+  empathy_tp_call_to (priv->call, priv->contact,
+    priv->initial_audio, priv->initial_video);
 
   empathy_dispatch_operation_claim (operation);
 }
diff --git a/libempathy/empathy-call-handler.h b/libempathy/empathy-call-handler.h
index db2396d..ab7d42d 100644
--- a/libempathy/empathy-call-handler.h
+++ b/libempathy/empathy-call-handler.h
@@ -64,6 +64,9 @@ GType empathy_call_handler_get_type (void);
 EmpathyCallHandler * empathy_call_handler_new_for_contact (
   EmpathyContact *contact);
 
+EmpathyCallHandler * empathy_call_handler_new_for_contact_with_streams (
+  EmpathyContact *contact, gboolean audio, gboolean video);
+
 EmpathyCallHandler * empathy_call_handler_new_for_channel (
   EmpathyTpCall *call);
 
diff --git a/libempathy/empathy-tp-call.c b/libempathy/empathy-tp-call.c
index a5c0003..a4915f4 100644
--- a/libempathy/empathy-tp-call.c
+++ b/libempathy/empathy-tp-call.c
@@ -317,9 +317,13 @@ tp_call_update_status (EmpathyTpCall *call)
 }
 
 void
-empathy_tp_call_to (EmpathyTpCall *call, EmpathyContact *contact)
+empathy_tp_call_to (EmpathyTpCall *call, EmpathyContact *contact,
+  gboolean audio, gboolean video)
 {
   EmpathyTpCallPriv *priv = GET_PRIV (call);
+  EmpathyCapabilities capabilities = 0;
+
+  g_assert (audio || video);
 
   priv->contact = g_object_ref (contact);
   priv->is_incoming = FALSE;
@@ -327,7 +331,13 @@ empathy_tp_call_to (EmpathyTpCall *call, EmpathyContact *contact)
   g_object_notify (G_OBJECT (call), "is-incoming");
   g_object_notify (G_OBJECT (call), "contact");
   g_object_notify (G_OBJECT (call), "status");
-  tp_call_request_streams_for_capabilities (call, EMPATHY_CAPABILITIES_AUDIO);
+
+  if (video)
+    capabilities |= EMPATHY_CAPABILITIES_VIDEO;
+  if (audio)
+    capabilities |= EMPATHY_CAPABILITIES_AUDIO;
+
+  tp_call_request_streams_for_capabilities (call, capabilities);
 }
 
 static void
diff --git a/libempathy/empathy-tp-call.h b/libempathy/empathy-tp-call.h
index 0817734..406ed1c 100644
--- a/libempathy/empathy-tp-call.h
+++ b/libempathy/empathy-tp-call.h
@@ -76,7 +76,8 @@ GType empathy_tp_call_get_type (void) G_GNUC_CONST;
 EmpathyTpCall *empathy_tp_call_new (TpChannel *channel);
 void empathy_tp_call_close (EmpathyTpCall *call);
 
-void empathy_tp_call_to (EmpathyTpCall *call, EmpathyContact *contact);
+void empathy_tp_call_to (EmpathyTpCall *call, EmpathyContact *contact,
+  gboolean audio, gboolean video);
 
 void empathy_tp_call_accept_incoming_call (EmpathyTpCall *call);
 void empathy_tp_call_request_video_stream_direction (EmpathyTpCall *call,
diff --git a/python/pyempathy/pyempathy.defs b/python/pyempathy/pyempathy.defs
index 6f8f0f6..2143825 100644
--- a/python/pyempathy/pyempathy.defs
+++ b/python/pyempathy/pyempathy.defs
@@ -598,6 +598,17 @@
   )
 )
 
+(define-method new_call_with_streams
+  (of-object "EmpathyCallFactory")
+  (c-name "empathy_call_factory_new_call_with_streams")
+  (return-type "none")
+  (parameters
+    '("EmpathyContact*" "contact")
+    '("gboolean" "initial_audio")
+    '("gboolean" "initial_video")
+  )
+)
+
 (define-method claim_channel
   (of-object "EmpathyCallFactory")
   (c-name "empathy_call_factory_claim_channel")
@@ -624,6 +635,16 @@
   )
 )
 
+(define-function call_handler_new_for_contact_with_streams
+  (c-name "empathy_call_handler_new_for_contact_with_streams")
+  (return-type "EmpathyCallHandler*")
+  (parameters
+    '("EmpathyContact*" "contact")
+    '("gboolean" "audio")
+    '("gboolean" "video")
+  )
+)
+
 (define-function call_handler_new_for_channel
   (c-name "empathy_call_handler_new_for_channel")
   (return-type "EmpathyCallHandler*")
@@ -2053,6 +2074,8 @@
   (return-type "none")
   (parameters
     '("EmpathyContact*" "contact")
+    '("gboolean" "audio")
+    '("gboolean" "video")
   )
 )
 
@@ -2513,11 +2536,23 @@
   (return-type "none")
   (parameters
     '("TpSocketAddressType" "type")
-    '("EmpatyTpTubeAcceptStreamTubeCb*" "callback")
+    '("EmpathyTpTubeAcceptStreamTubeCb*" "callback")
     '("gpointer" "user_data")
   )
 )
 
+(define-method call_when_ready
+  (of-object "EmpathyTpTube")
+  (c-name "empathy_tp_tube_call_when_ready")
+  (return-type "none")
+  (parameters
+    '("EmpathyTpTubeReadyCb*" "callback")
+    '("gpointer" "user_data")
+    '("GDestroyNotify" "destroy")
+    '("GObject*" "weak_object")
+  )
+)
+
 
 
 ;; From empathy-tube-handler.h
