diff --git a/src/modem-manager/nm-modem-gsm.c b/src/modem-manager/nm-modem-gsm.c
index 2bd8b23..ac43267 100644
--- a/src/modem-manager/nm-modem-gsm.c
+++ b/src/modem-manager/nm-modem-gsm.c
@@ -168,7 +168,15 @@ stage1_prepare_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_d
 		gboolean retry_secret = FALSE;
 
 		if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_PIN))
+		{
 			required_secret = NM_SETTING_GSM_PIN;
+			retry_secret = FALSE;
+		}
+		else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_PIN_REJECTED))
+		{
+		    required_secret = NM_SETTING_GSM_PIN;
+		    retry_secret = TRUE;
+		}
 		else if (dbus_g_error_has_name (error, MM_MODEM_ERROR_SIM_WRONG)) {
 			clear_pin (device);
 			required_secret = NM_SETTING_GSM_PIN;
diff --git a/src/modem-manager/nm-modem-types.h b/src/modem-manager/nm-modem-types.h
index a251d2a..7880d4b 100644
--- a/src/modem-manager/nm-modem-types.h
+++ b/src/modem-manager/nm-modem-types.h
@@ -51,6 +51,8 @@
 #define MM_MODEM_ERROR_SIM_FAILURE MM_MODEM_ERROR ".SimFailure"
 #define MM_MODEM_ERROR_SIM_BUSY MM_MODEM_ERROR ".SimBusy"
 #define MM_MODEM_ERROR_SIM_WRONG MM_MODEM_ERROR ".SimWrong"
+#define MM_MODEM_ERROR_PIN_ACCEPTED MM_MODEM_ERROR ".PinAccepted"
+#define MM_MODEM_ERROR_PIN_REJECTED MM_MODEM_ERROR ".PinRejected"
 #define MM_MODEM_ERROR_WRONG_PASSWORD MM_MODEM_ERROR ".IncorrectPassword"
 #define MM_MODEM_ERROR_SIM_PIN2 MM_MODEM_ERROR ".SimPin2Required"
 #define MM_MODEM_ERROR_SIM_PUK2 MM_MODEM_ERROR ".SimPuk2Required"
