Jorg, I think the problem is that you are not wrapping your Metadata dict in a variant. (gdb) bt #0 0x00bd0832 in ?? () from /lib/ld-linux.so.2 #1 0x01022e71 in raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 #2 0x0102634e in abort () at abort.c:92 #3 0x00d723a0 in g_assertion_message (domain=0xd956e6 "GLib", file=0xddd57c "/build/buildd/glib2.0-2.28.4/./glib/gvariant-serialiser.c", line=1319, func=0xddd780 "g_variant_serialised_n_children", message=) at /build/buildd/glib2.0-2.28.4/./glib/gtestutils.c:1358 #4 0x00d8e328 in g_variant_serialised_n_children (serialised=...) at /build/buildd/glib2.0-2.28.4/./glib/gvariant-serialiser.c:1319 #5 0x00d8a3d9 in g_variant_n_children (value=0x88d36b0) at /build/buildd/glib2.0-2.28.4/./glib/gvariant-core.c:819 #6 0x00d86e6e in g_variant_iter_init (iter=0xbfcf3a04, value=0x88d36b0) at /build/buildd/glib2.0-2.28.4/./glib/gvariant.c:2595 #7 0x080572b9 in mpris_player_dbus_proxy_get_Metadata (self=0x88a0198) at mpris2-interfaces.c:1280 #8 0x0805c261 in mpris2_controller_clean_metadata (self=0x88a66c8) at mpris2-controller.c:648 #9 0x0805c780 in mpris2_controller_property_changed_cb (self=0x88a66c8, interface_source=0x88cc028 "org.mpris.MediaPlayer2.Player", changed_properties=0x88c9690, invalid=0x88c2798, invalid_length1=0) ---Type to continue, or q to quit--- at mpris2-controller.c:517 #10 0x00e65372 in g_closure_invoke (closure=0x88d3188, return_value=0x0, n_param_values=5, param_values=0x889d9c8, invocation_hint=0xbfcf3c30) at /build/buildd/glib2.0-2.28.4/./gobject/gclosure.c:767 #11 0x00e78048 in signal_emit_unlocked_R (node=0x88b4bb0, detail=0, instance=0x88a0690, emission_return=0x0, instance_and_params=0x889d9c8) at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:3252 #12 0x00e80b29 in g_signal_emit_valist (instance=0x88a0690, signal_id=29, detail=0, var_args=0xbfcf3e88 "\230>Ͽ\002") at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:2983 #13 0x00e80e3d in g_signal_emit_by_name (instance=0x88a0690, detailed_signal=0x806666b "properties-changed") at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:3077 #14 0x08060cf2 in _dbus_handle_free_desktop_properties_properties_changed ( proxy=0x88a0690, sender_name=0x88d42d0 ":1.611", signal_name=0x88b7f20 "PropertiesChanged", parameters=0x88d3748) at freedesktop-interfaces.c:721 #15 free_desktop_properties_proxy_g_signal (proxy=0x88a0690, sender_name=0x88d42d0 ":1.611", signal_name=0x88b7f20 "PropertiesChanged", parameters=0x88d3748) at freedesktop-interfaces.c:730 #16 0x005836a6 in _gio_marshal_VOID__STRING_STRING_VARIANT (closure=0x8897388, ---Type to continue, or q to quit--- return_value=0x0, n_param_values=4, param_values=0x88d4680, invocation_hint=0xbfcf4110, marshal_data=0x8060ad0) at /build/buildd/glib2.0-2.28.4/./gio/gio-marshal.c:775 #17 0x00e63cc7 in g_type_class_meta_marshal (closure=0x8897388, return_value=0x0, n_param_values=4, param_values=0x88d4680, invocation_hint=0xbfcf4110, marshal_data=0x48) at /build/buildd/glib2.0-2.28.4/./gobject/gclosure.c:878 #18 0x00e65372 in g_closure_invoke (closure=0x8897388, return_value=0x0, n_param_values=4, param_values=0x88d4680, invocation_hint=0xbfcf4110) at /build/buildd/glib2.0-2.28.4/./gobject/gclosure.c:767 #19 0x00e77e45 in signal_emit_unlocked_R (node=0x889ef40, detail=0, instance=0x88a0690, emission_return=0x0, instance_and_params=0x88d4680) at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:3290 #20 0x00e80b29 in g_signal_emit_valist (instance=0x88a0690, signal_id=26, detail=0, var_args=0xbfcf42d8 "yW\232") at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:2983 #21 0x00e80cc2 in g_signal_emit (instance=0x88a0690, signal_id=26, detail=0) at /build/buildd/glib2.0-2.28.4/./gobject/gsignal.c:3040 #22 0x00569080 in on_signal_received (connection=0x886d000, sender_name=0x88cc1e0 ":1.611", object_path=0x888a380 "/org/mpris/MediaPlayer2", ---Type to continue, or q to quit--- interface_name=0x88b7fe0 "org.freedesktop.DBus.Properties", signal_name=0x88d43e8 "PropertiesChanged", parameters=0x88d3748, user_data=0x88a0690) at /build/buildd/glib2.0-2.28.4/./gio/gdbusproxy.c:754 #23 0x00557440 in emit_signal_instance_in_idle_cb (data=0x88c3280) at /build/buildd/glib2.0-2.28.4/./gio/gdbusconnection.c:3400 #24 0x00d46311 in g_idle_dispatch (source=0x884a940, callback=0x5573a0 , user_data=0x88c3280) at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:4545 #25 0x00d4aaa8 in g_main_dispatch (context=0x8873028) at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:2440 #26 g_main_context_dispatch (context=0x8873028) at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:3013 #27 0x00d4b270 in g_main_context_iterate (context=0x8873028, block=14006304, dispatch=1, self=) at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:3091 #28 0x00d4b92b in g_main_loop_run (loop=0xb15007f0) at /build/buildd/glib2.0-2.28.4/./glib/gmain.c:3299 #29 0x0804d028 in main (argc=1, argv=0xbfcf4584) at sound-service.c:76 The problem is that my generated C code is expecting the dict to be in variant. The interface definition in Vala is type as a hashtable but the C code automatically assumes everything has outer wrapper layer of a variant. Take a look at the rhythmbox or banshee and see what they return over d-feet. its the same code on my side that handles all clients and its just yours that's is crashing my service.