diff --git a/libedataserver/e-client.c b/libedataserver/e-client.c
index 1d7879c..ea38868 100644
--- a/libedataserver/e-client.c
+++ b/libedataserver/e-client.c
@@ -228,6 +228,7 @@ client_finalize (GObject *object)
 	g_static_rec_mutex_lock (&priv->prop_mutex);
 
 	if (priv->source) {
+		printf ("%s: client:%p source:%p(%d)\n", __FUNCTION__, client, priv->source, ((GObject *)priv->source)->ref_count);
 		g_object_unref (priv->source);
 		priv->source = NULL;
 	}
@@ -423,6 +424,12 @@ e_client_class_init (EClientClass *klass)
 }
 
 static void
+clients_source_gone_cb (gpointer user_data, GObject *gone)
+{
+	printf ("   %s: client:%p source gone:%p\n", __FUNCTION__, user_data, gone);
+}
+
+static void
 client_set_source (EClient *client,
                    ESource *source)
 {
@@ -437,6 +444,8 @@ client_set_source (EClient *client,
 	if (client->priv->source)
 		g_object_unref (client->priv->source);
 
+	printf ("%s: client:%p source:%p => %p(%d) '%s'/%s\n", __FUNCTION__, client, client->priv->source, source, ((GObject *)source)->ref_count, e_source_peek_name (source), e_source_peek_color_spec (source));
+	g_object_weak_ref ((GObject *) source, clients_source_gone_cb, client);
 	client->priv->source = source;
 }
 
