diff --git a/src/applet-device-gsm.c b/src/applet-device-gsm.c
index c08d02e..a72f238 100644
--- a/src/applet-device-gsm.c
+++ b/src/applet-device-gsm.c
@@ -47,6 +47,8 @@
 #include "nma-marshal.h"
 #include "nmn-mobile-providers.h"
 
+extern gboolean no_gsm_unlock ;
+
 typedef enum {
     MM_MODEM_GSM_ACCESS_TECH_UNKNOWN     = 0,
     MM_MODEM_GSM_ACCESS_TECH_GSM         = 1,
@@ -1208,7 +1210,8 @@ unlock_reply (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
 
 			/* Show the unlock dialog if an unlock is now required */
 			if (info->unlock_required)
-				unlock_dialog_new (info->device, info);
+                if (!no_gsm_unlock || strcmp (info->unlock_required, "sim-pin") != 0)
+                    unlock_dialog_new (info->device, info);
 		}
 		g_value_unset (&value);
 	}
diff --git a/src/main.c b/src/main.c
index 5756a4c..63b0ebf 100644
--- a/src/main.c
+++ b/src/main.c
@@ -38,6 +38,7 @@
 
 static GMainLoop *loop = NULL;
 gboolean shell_debug = FALSE;
+gboolean no_gsm_unlock = FALSE ;
 
 static void
 signal_handler (int signo, siginfo_t *info, void *data)
@@ -89,6 +90,8 @@ int main (int argc, char *argv[])
 		}
 		if (!strcmp (argv[i], "--shell-debug"))
 			shell_debug = TRUE;
+		if (!strcmp (argv[i], "--no-gsm-unlock"))
+			no_gsm_unlock = TRUE;
 	}
 
 	bindtextdomain (GETTEXT_PACKAGE, NMALOCALEDIR);
