--- /dev/null
+[METHOD]    org.freesmartphone.Info.GetInfo()
+[METHOD]    org.freesmartphone.GSM.Call.Activate( i:id )
+[METHOD]    org.freesmartphone.GSM.Call.ActivateConference( i:id )
+[METHOD]    org.freesmartphone.GSM.Call.Emergency( s:number )
+[METHOD]    org.freesmartphone.GSM.Call.HoldActive()
+[METHOD]    org.freesmartphone.GSM.Call.Initiate( s:number, s:type )
+[METHOD]    org.freesmartphone.GSM.Call.Join()
+[METHOD]    org.freesmartphone.GSM.Call.ListCalls()
+[METHOD]    org.freesmartphone.GSM.Call.Release( i:id )
+[METHOD]    org.freesmartphone.GSM.Call.ReleaseAll()
+[METHOD]    org.freesmartphone.GSM.Call.ReleaseHeld()
+[METHOD]    org.freesmartphone.GSM.Call.SendDtmf( s:tones )
+[METHOD]    org.freesmartphone.GSM.Call.Transfer( s:number )
+[SIGNAL]    org.freesmartphone.GSM.Call.CallStatus( i:id, s:status, a{sv}:properties )
+[METHOD]    org.freedesktop.DBus.Properties.Get( s:interface, s:propname )
+[METHOD]    org.freedesktop.DBus.Properties.GetAll( s:interface )
+[METHOD]    org.freedesktop.DBus.Properties.Set( s:interface, s:propname, v:value )
+[METHOD]    org.freedesktop.DBus.Introspectable.Introspect()
+[METHOD]    org.freesmartphone.GSM.Device.GetDeviceStatus()
+[METHOD]    org.freesmartphone.GSM.Device.GetFeatures()
+[METHOD]    org.freesmartphone.GSM.Device.GetFunctionality()
+[METHOD]    org.freesmartphone.GSM.Device.GetMicrophoneMuted()
+[METHOD]    org.freesmartphone.GSM.Device.GetSpeakerVolume()
+[METHOD]    org.freesmartphone.GSM.Device.SetFunctionality( s:level, b:autoregister, s:pin )
+[METHOD]    org.freesmartphone.GSM.Device.SetMicrophoneMuted( b:muted )
+[METHOD]    org.freesmartphone.GSM.Device.SetSpeakerVolume( i:volume )
+[SIGNAL]    org.freesmartphone.GSM.Device.DeviceStatus( s:status )
+[SIGNAL]    org.freesmartphone.GSM.Device.KeypadEvent( s:name, b:pressed )
+[METHOD]    org.freesmartphone.GSM.SMS.GetSizeForTextMessage( s:contents )
+[METHOD]    org.freesmartphone.GSM.SMS.RetrieveTextMessages()
+[METHOD]    org.freesmartphone.GSM.SMS.SendTextMessage( s:recipient_number, s:contents, b:report )
+[SIGNAL]    org.freesmartphone.GSM.SMS.IncomingMessageReport( i:reference, s:status, s:sender_number, s:contents )
+[SIGNAL]    org.freesmartphone.GSM.SMS.IncomingTextMessage( s:number, s:timestamp, s:contents )
+[METHOD]    org.freesmartphone.GSM.SIM.ChangeAuthCode( s:old_pin, s:new_pin )
+[METHOD]    org.freesmartphone.GSM.SIM.DeleteEntry( s:category, i:index )
+[METHOD]    org.freesmartphone.GSM.SIM.DeleteMessage( i:index )
+[METHOD]    org.freesmartphone.GSM.SIM.GetAuthCodeRequired()
+[METHOD]    org.freesmartphone.GSM.SIM.GetAuthStatus()
+[METHOD]    org.freesmartphone.GSM.SIM.GetHomeZoneParameters()
+[METHOD]    org.freesmartphone.GSM.SIM.GetPhonebookInfo( s:category )
+[METHOD]    org.freesmartphone.GSM.SIM.GetServiceCenterNumber()
+[METHOD]    org.freesmartphone.GSM.SIM.GetSimInfo()
+[METHOD]    org.freesmartphone.GSM.SIM.RetrieveMessage( i:index )
+[METHOD]    org.freesmartphone.GSM.SIM.RetrievePhonebook( s:category, i:mindex, i:maxdex )
+[METHOD]    org.freesmartphone.GSM.SIM.SendAuthCode( s:pin )
+[METHOD]    org.freesmartphone.GSM.SIM.SendGenericSimCommand( s:command )
+[METHOD]    org.freesmartphone.GSM.SIM.SendRestrictedSimCommand( i:command, i:fileid, i:p1, i:p2, i:p3, s:data )
+[METHOD]    org.freesmartphone.GSM.SIM.SendStoredMessage( i:index )
+[METHOD]    org.freesmartphone.GSM.SIM.SetAuthCodeRequired( b:check, s:pin )
+[METHOD]    org.freesmartphone.GSM.SIM.SetServiceCenterNumber( s:number )
+[METHOD]    org.freesmartphone.GSM.SIM.StoreEntry( s:category, i:index, s:name, s:number )
+[METHOD]    org.freesmartphone.GSM.SIM.StoreMessage( s:recipient_number, s:contents, a{sv}:properties )
+[METHOD]    org.freesmartphone.GSM.SIM.Unlock( s:puk, s:new_pin )
+[SIGNAL]    org.freesmartphone.GSM.SIM.AuthStatus( s:status )
+[SIGNAL]    org.freesmartphone.GSM.SIM.IncomingMessage( i:index )
+[METHOD]    org.freesmartphone.GSM.HZ.GetHomeZoneStatus()
+[METHOD]    org.freesmartphone.GSM.HZ.GetKnownHomeZones()
+[SIGNAL]    org.freesmartphone.GSM.HZ.HomeZoneStatus( s:name )
+[METHOD]    org.freesmartphone.GSM.Network.DisableCallForwarding( s:reason, s:class_ )
+[METHOD]    org.freesmartphone.GSM.Network.EnableCallForwarding( s:reason, s:class_, s:number, i:timeout )
+[METHOD]    org.freesmartphone.GSM.Network.GetCallForwarding( s:reason )
+[METHOD]    org.freesmartphone.GSM.Network.GetCallingIdentification()
+[METHOD]    org.freesmartphone.GSM.Network.GetSignalStrength()
+[METHOD]    org.freesmartphone.GSM.Network.GetStatus()
+[METHOD]    org.freesmartphone.GSM.Network.GetTimeReport()
+[METHOD]    org.freesmartphone.GSM.Network.ListProviders()
+[METHOD]    org.freesmartphone.GSM.Network.Register()
+[METHOD]    org.freesmartphone.GSM.Network.RegisterWithProvider( s:operator_code )
+[METHOD]    org.freesmartphone.GSM.Network.SendUssdRequest( s:request )
+[METHOD]    org.freesmartphone.GSM.Network.SetCallingIdentification( s:status )
+[METHOD]    org.freesmartphone.GSM.Network.Unregister()
+[SIGNAL]    org.freesmartphone.GSM.Network.CipherStatus( s:telephony, s:pdp )
+[SIGNAL]    org.freesmartphone.GSM.Network.IncomingUssd( s:mode, s:message_ )
+[SIGNAL]    org.freesmartphone.GSM.Network.SignalStrength( i:signal_strength )
+[SIGNAL]    org.freesmartphone.GSM.Network.Status( a{sv}:status )
+[SIGNAL]    org.freesmartphone.GSM.Network.TimeReport( i:time, i:zone )
+[METHOD]    org.freesmartphone.GSM.Debug.DebugCommand( s:command, s:channel )
+[METHOD]    org.freesmartphone.GSM.Debug.DebugInjectResponse( s:response, s:channel )
+[METHOD]    org.freesmartphone.GSM.Debug.DebugPing()
+[SIGNAL]    org.freesmartphone.GSM.Debug.DebugStatus( a{ss}:channels )
+[METHOD]    org.freesmartphone.GSM.Monitor.GetNeighbourCellInformation()
+[METHOD]    org.freesmartphone.GSM.Monitor.GetServingCellInformation()
+[METHOD]    org.freesmartphone.Device.RealtimeClock.GetCurrentTime()
+[METHOD]    org.freesmartphone.Device.RealtimeClock.GetWakeupTime()
+[METHOD]    org.freesmartphone.Device.RealtimeClock.SetCurrentTime( i:time )
+[METHOD]    org.freesmartphone.Device.RealtimeClock.SetWakeupTime( i:time )
+[SIGNAL]    org.freesmartphone.Device.RealtimeClock.Alarm( i:time )
+[SIGNAL]    org.freesmartphone.Device.RealtimeClock.WakeupTimeChanged( i:time )
+[METHOD]    org.freesmartphone.Device.PowerSupply.GetCapacity()
+[METHOD]    org.freesmartphone.Device.PowerSupply.GetPowerStatus()
+[SIGNAL]    org.freesmartphone.Device.PowerSupply.Capacity( i:energy )
+[SIGNAL]    org.freesmartphone.Device.PowerSupply.PowerStatus( s:status )
+[METHOD]    org.freesmartphone.GSM.CB.GetCellBroadcastSubscriptions()
+[METHOD]    org.freesmartphone.GSM.CB.SetCellBroadcastSubscriptions( s:channels )
+[SIGNAL]    org.freesmartphone.GSM.CB.IncomingCellBroadcast( s:text, s:language, a{sv}:properties )
+[METHOD]    org.freesmartphone.GSM.PDP.ActivateContext()
+[METHOD]    org.freesmartphone.GSM.PDP.DeactivateContext()
+[METHOD]    org.freesmartphone.GSM.PDP.GetContextStatus()
+[METHOD]    org.freesmartphone.GSM.PDP.GetCredentials()
+[METHOD]    org.freesmartphone.GSM.PDP.InternalStatusUpdate( s:status, a{sv}:properties )
+[METHOD]    org.freesmartphone.GSM.PDP.SetCredentials( s:apn, s:username, s:password )
+[SIGNAL]    org.freesmartphone.GSM.PDP.ContextStatus( s:status, a{sv}:properties )
 
--- /dev/null
+#!/usr/bin/env python
+
+import dbus
+from pprint import pprint
+
+# Taken from telepathy-gabble:
+# http://git.collabora.co.uk/?p=user/wjt/telepathy-gabble-wjt.git;a=blob;f=tests/twisted/servicetest.py;h=476c2e171dc7d535f70fa49827892a4cfb5d8402;hb=HEAD#l265
+def unwrap(x):
+    """Hack to unwrap D-Bus values, so that they're easier to read when
+    printed."""
+
+    if isinstance(x, list):
+        return map(unwrap, x)
+
+    if isinstance(x, tuple):
+        return tuple(map(unwrap, x))
+
+    if isinstance(x, dict):
+        return dict([(unwrap(k), unwrap(v)) for k, v in x.iteritems()])
+
+    if isinstance(x, dbus.Boolean):
+        return bool(x)
+
+    for t in [unicode, str, long, int, float]:
+        if isinstance(x, t):
+            return t(x)
+
+    return x
+
+def fso_print_info():
+    # Get proxies and add signal handlers
+    bus = dbus.SystemBus()
+    usage_obj = bus.get_object("org.freesmartphone.ousaged", "/org/freesmartphone/Usage")
+    usage_iface = dbus.Interface(usage_obj, "org.freesmartphone.Usage")
+    usage_iface.RequestResource("GSM")
+
+    gsm_device_obj = bus.get_object("org.freesmartphone.ogsmd", "/org/freesmartphone/GSM/Device")
+
+    gsm_info_iface = dbus.Interface(gsm_device_obj, "org.freesmartphone.Info")
+    gsm_device_iface = dbus.Interface(gsm_device_obj, "org.freesmartphone.GSM.Device")
+    gsm_sim_iface = dbus.Interface(gsm_device_obj, "org.freesmartphone.GSM.SIM")
+    gsm_network_iface = dbus.Interface(gsm_device_obj, "org.freesmartphone.GSM.Network")
+
+    info = gsm_info_iface.GetInfo()
+    pprint(unwrap(info))
+    print
+
+    device_status = gsm_device_iface.GetDeviceStatus()
+    pprint(unwrap(device_status))
+    print
+
+    features = gsm_device_iface.GetFeatures()
+    pprint(unwrap(features))
+    print
+
+    functionality = gsm_device_iface.GetFunctionality()
+    pprint(unwrap(functionality))
+    print
+
+    auth_code = gsm_sim_iface.GetAuthCodeRequired()
+    pprint(unwrap(auth_code))
+    print
+
+    auth_status = gsm_sim_iface.GetAuthStatus()
+    pprint(unwrap(auth_status))
+    print
+
+    service_center = gsm_sim_iface.GetServiceCenterNumber()
+    pprint(unwrap(service_center))
+    print
+
+    sim_info = gsm_sim_iface.GetSimInfo()
+    pprint(unwrap(sim_info))
+    print
+
+    net_status = gsm_network_iface.GetStatus()
+    pprint(unwrap(net_status))
+    print
+
+    usage_iface.ReleaseResource("GSM")
+
+if __name__ == "__main__":
+    fso_print_info()