diff --git a/sflphone-gtk/src/actions.c b/sflphone-gtk/src/actions.c
index dcd715f04db99591cde359f236ee8b9fc1e90c76..4f5e911a52a0d6e32584a4d8c7dbf6744d265a06 100644
--- a/sflphone-gtk/src/actions.c
+++ b/sflphone-gtk/src/actions.c
@@ -387,6 +387,16 @@ sflphone_current( call_t * c )
   update_menus();
 }
 
+void
+sflphone_record( call_t * c )
+{
+  if( c->state != CALL_STATE_HOLD )
+	(void) time(&c->_start);
+  c->state = CALL_STATE_RECORD;
+  update_call_tree(current_calls,c);
+  update_menus();
+}
+
 void 
 sflphone_set_transfert()
 {
diff --git a/sflphone-gtk/src/dbus.c b/sflphone-gtk/src/dbus.c
index c1227aadb29f7e5f3c40086040a6425789d089ec..c1d5d616a27547e5f8185a6b534fa9dbd7039d7f 100644
--- a/sflphone-gtk/src/dbus.c
+++ b/sflphone-gtk/src/dbus.c
@@ -115,10 +115,14 @@ call_state_cb (DBusGProxy *proxy UNUSED,
       sflphone_hung_up (c);
       update_call_tree( history, c );
     }
-    else if ( strcmp(state, "UNHOLD") == 0 )
+    else if ( strcmp(state, "UNHOLD_CURRENT") == 0 )
     {
       sflphone_current (c);
     }
+    else if ( strcmp(state, "UNHOLD_RECORD") == 0 )
+    {
+      sflphone_record (c);
+    }
     else if ( strcmp(state, "HOLD") == 0 )
     {
       sflphone_hold (c);