--- src/applet.c.orig	2012-03-23 14:14:18.000000000 +0000
+++ src/applet.c	2012-07-20 06:29:25.000000000 +0000
@@ -378,6 +379,14 @@
 	return NULL;
 }
 
+
+static inline NMADeviceClass *
+get_device_class (NMDevice *device, NMApplet *applet) ;
+
+static inline NMADeviceClass *
+get_device_class_from_connection (NMConnection *connection, NMApplet *applet) ;
+
+
 NMDevice *
 applet_get_device_for_connection (NMApplet *applet, NMConnection *connection)
 {
@@ -395,6 +404,24 @@
 		if (!g_strcmp0 (nm_active_connection_get_connection (active), cpath))
 			return g_ptr_array_index (nm_active_connection_get_devices (active), 0);
 	}
+
+                {
+                NMADeviceClass * conn_class = get_device_class_from_connection (connection, applet) ;
+
+                if (conn_class == applet->gsm_class) {
+                        const GPtrArray *devices;
+                        int i;
+                       
+                        devices = nm_client_get_devices (applet->nm_client);
+                        for (i = 0; devices && (i < devices->len); i++) {
+                                NMDevice *candidate = NM_DEVICE (g_ptr_array_index (devices, i));
+                                NMADeviceClass * class ;
+                                class = get_device_class (candidate, applet);
+                                if (class == conn_class)
+                                        return candidate ;
+                        }
+                }
+        }
 	return NULL;
 }
 
