diff --git a/addressbook/libebook/e-book-view.c b/addressbook/libebook/e-book-view.c
index 5b11620..5914905 100644
--- a/addressbook/libebook/e-book-view.c
+++ b/addressbook/libebook/e-book-view.c
@@ -286,6 +286,7 @@ e_book_view_dispose (GObject *object)
 	if (book_view->priv->gdbus_bookview) {
 		GError *error = NULL;
 
+		g_signal_handlers_disconnect_matched (book_view->priv->gdbus_bookview, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, book_view);
 		e_gdbus_book_view_call_dispose_sync (book_view->priv->gdbus_bookview, NULL, &error);
 		g_object_unref (book_view->priv->gdbus_bookview);
 		book_view->priv->gdbus_bookview = NULL;
diff --git a/calendar/libecal/e-cal-view.c b/calendar/libecal/e-cal-view.c
index f64c37d..ec50375 100644
--- a/calendar/libecal/e-cal-view.c
+++ b/calendar/libecal/e-cal-view.c
@@ -193,8 +193,10 @@ e_cal_view_set_property (GObject *object, guint property_id, const GValue *value
 
 	switch (property_id) {
 	case PROP_VIEW:
-		if (priv->gdbus_calview != NULL)
+		if (priv->gdbus_calview != NULL) {
+			g_signal_handlers_disconnect_matched (priv->gdbus_calview, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, view);
 			g_object_unref (priv->gdbus_calview);
+		}
 
 		priv->gdbus_calview = g_object_ref (g_value_get_pointer (value));
 		g_signal_connect (priv->gdbus_calview, "objects-added", G_CALLBACK (objects_added_cb), view);
@@ -247,8 +249,10 @@ e_cal_view_finalize (GObject *object)
 	view = E_CAL_VIEW (object);
 	priv = view->priv;
 
-	if (priv->gdbus_calview != NULL)
+	if (priv->gdbus_calview != NULL) {
+		g_signal_handlers_disconnect_matched (priv->gdbus_calview, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, view);
 		g_object_unref (priv->gdbus_calview);
+	}
 
 	g_object_unref (priv->client);
 
