diff --git a/sflphone-gtk/src/actions.c b/sflphone-gtk/src/actions.c
index 4f5e911a52a0d6e32584a4d8c7dbf6744d265a06..893613950079ea1c68e895fecf57e4a4986eb900 100644
--- a/sflphone-gtk/src/actions.c
+++ b/sflphone-gtk/src/actions.c
@@ -258,12 +258,16 @@ sflphone_hang_up()
 			case CALL_STATE_CURRENT:
 			case CALL_STATE_HOLD:
 			case CALL_STATE_BUSY:
-			case CALL_STATE_FAILURE:
-                        case CALL_STATE_RECORD:
+            case CALL_STATE_RECORD:
 				dbus_hang_up (selectedCall);
 				selectedCall->state = CALL_STATE_DIALING;
 				(void) time(&selectedCall->_stop);
 				break;
+			case CALL_STATE_FAILURE:
+				dbus_hang_up (selectedCall);
+				selectedCall->state = CALL_STATE_DIALING;
+				selectedCall->_stop = 0;
+				break;
 			case CALL_STATE_INCOMING:  
 				dbus_refuse (selectedCall);
 				selectedCall->state = CALL_STATE_DIALING;
@@ -616,6 +620,7 @@ sflphone_keypad( guint keyval, gchar * key)
 			case CALL_STATE_RINGING:
 			case CALL_STATE_BUSY:
 			case CALL_STATE_FAILURE:
+				c->_stop = 0;
 				switch (keyval)
 				{
 					case 65307: /* ESCAPE */