diff --git a/src/mm-errors.c b/src/mm-errors.c
index 6448b80..ee2c1e3 100644
--- a/src/mm-errors.c
+++ b/src/mm-errors.c
@@ -174,6 +174,7 @@ mm_mobile_error_get_type (void)
             ENUM_ENTRY (MM_MOBILE_ERROR_SIM_FAILURE,               "SimFailure"),
             ENUM_ENTRY (MM_MOBILE_ERROR_SIM_BUSY,                  "SimBusy"),
             ENUM_ENTRY (MM_MOBILE_ERROR_SIM_WRONG,                 "SimWrong"),
+            ENUM_ENTRY (MM_MOBILE_ERROR_PIN_REJECTED,              "PinRejected"),
             ENUM_ENTRY (MM_MOBILE_ERROR_WRONG_PASSWORD,            "IncorrectPassword"),
             ENUM_ENTRY (MM_MOBILE_ERROR_SIM_PIN2,                  "SimPin2Required"),
             ENUM_ENTRY (MM_MOBILE_ERROR_SIM_PUK2,                  "SimPuk2Required"),
diff --git a/src/mm-errors.h b/src/mm-errors.h
index 4bf8eca..5eaac2b 100644
--- a/src/mm-errors.h
+++ b/src/mm-errors.h
@@ -103,6 +103,7 @@ enum {
     MM_MOBILE_ERROR_HIDDEN_KEY = 48,
     MM_MOBILE_ERROR_EAP_NOT_SUPPORTED = 49,
     MM_MOBILE_ERROR_INCORRECT_PARAMS = 50,
+    MM_MOBILE_ERROR_PIN_REJECTED = 51,
     MM_MOBILE_ERROR_UNKNOWN = 100,
 
     MM_MOBILE_ERROR_GPRS_ILLEGAL_MS = 103,
diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c
index 55d75f6..5c3245f 100644
--- a/src/mm-generic-gsm.c
+++ b/src/mm-generic-gsm.c
@@ -777,8 +782,37 @@ send_pin_done (MMSerialPort *port,
 {
     MMCallbackInfo *info = (MMCallbackInfo *) user_data;
 
-    if (error)
+    printf("send_pin_done: response: %s\n", response ? response->str : "?");
+
+    if (response)
+    {
+        if (strcmp(response->str, "OK")==0)
+        {
+            // OK
+        }
+        else
+        {
+            if (g_str_has_prefix(response->str, "+CME ERROR")==0)
+            {
+                info->error = g_error_new (MM_MOBILE_ERROR,
+                    MM_MOBILE_ERROR_PIN_REJECTED,
+                    "PIN rejected");
+            }
+            else
+            {
+                info->error = g_error_new (MM_MODEM_ERROR,
+                    MM_MODEM_ERROR_GENERAL,
+                    "Send PIN response '%s'",
+                    response->str);
+            }
+        }
+    }
+    else if (error)
+    {
         info->error = g_error_copy (error);
+        printf("send_pin_done: %s\n", error->message);
+    }
+
     mm_callback_info_schedule (info);
 }
 
@@ -794,7 +828,7 @@ send_pin (MMModemGsmCard *modem,
 
     info = mm_callback_info_new (MM_MODEM (modem), callback, user_data);
     command = g_strdup_printf ("+CPIN=\"%s\"", pin);
-    mm_serial_port_queue_command (priv->primary, command, 3, send_pin_done, info);
+    mm_serial_port_queue_command (priv->primary, command, 10, send_pin_done, info);
     g_free (command);
 }
 

