diff --git a/plugins/mm-plugin-generic.c b/plugins/mm-plugin-generic.c
index e5e2ade..028bb83 100644
--- a/plugins/mm-plugin-generic.c
+++ b/plugins/mm-plugin-generic.c
@@ -45,6 +45,9 @@ mm_plugin_create (void)
                                     NULL));
 }
 
+gchar **blacklist;
+gchar *contents; 
+
 /*****************************************************************************/
 
 #define CAP_CDMA (MM_PLUGIN_BASE_PORT_CAP_IS707_A | \
@@ -71,6 +74,30 @@ probe_result (MMPluginBase *base,
     mm_plugin_base_supports_task_complete (task, get_level_for_capabilities (capabilities));
 }
 
+
+static void read_blacklist(const gchar *filename) {
+
+	if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR))
+		return;
+	if (g_file_get_contents( filename, &contents, NULL, NULL) == TRUE) {
+		blacklist = g_strsplit(contents, "\n", 0);
+	} else { 
+		fprintf(stderr, "Cannot read blacklist file");
+	}
+}
+
+static int blacklisted(const char *name) {
+	gchar **this_line;
+
+	for (this_line = blacklist; this_line != NULL && *this_line != NULL;
+		this_line++) {
+		if (strcmp(*this_line, name) == 0) 
+			return TRUE;
+	}
+	return FALSE;
+}
+
+
 static MMPluginSupportsResult
 supports_port (MMPluginBase *base,
                MMModem *existing,
@@ -84,6 +111,16 @@ supports_port (MMPluginBase *base,
     if (strcmp (g_udev_device_get_subsystem (port), "tty"))
         return MM_PLUGIN_SUPPORTS_PORT_UNSUPPORTED;
 
+    /* Blacklisting */
+    read_blacklist ("/etc/modemmanager/blacklist");
+    if (blacklisted (g_udev_device_get_name (port))) {
+        g_message ("%s: %s is blacklisted in /etc/modemmanager/blacklist\n",
+                   mm_plugin_get_name (MM_PLUGIN (base)),
+		   g_udev_device_get_name (port));
+        return MM_PLUGIN_SUPPORTS_PORT_UNSUPPORTED;
+    }
+    g_free(contents);
+
     if (mm_plugin_base_get_cached_port_capabilities (base, port, &cached)) {
         level = get_level_for_capabilities (cached);
         if (level) {
