diff -up NetworkManager-0.7.0/configure.in.cid-fix NetworkManager-0.7.0/configure.in
diff -up NetworkManager-0.7.0/libnm-util/nm-setting-gsm.c.cid-fix NetworkManager-0.7.0/libnm-util/nm-setting-gsm.c
--- NetworkManager-0.7.0/libnm-util/nm-setting-gsm.c.cid-fix	2008-06-12 19:29:49.000000000 +0200
+++ NetworkManager-0.7.0/libnm-util/nm-setting-gsm.c	2008-07-28 16:38:09.000000000 +0200
@@ -48,6 +48,7 @@ enum {
 	PROP_NUMBER,
 	PROP_USERNAME,
 	PROP_PASSWORD,
+	PROP_CID,
 	PROP_APN,
 	PROP_NETWORK_ID,
 	PROP_NETWORK_TYPE,
@@ -154,6 +157,9 @@ set_property (GObject *object, guint pro
 		g_free (setting->password);
 		setting->password = g_value_dup_string (value);
 		break;
+	case PROP_CID:
+		setting->cid = g_value_get_int (value);
+		break;
 	case PROP_APN:
 		g_free (setting->apn);
 		setting->apn = g_value_dup_string (value);
@@ -198,6 +208,9 @@ get_property (GObject *object, guint pro
 	case PROP_PASSWORD:
 		g_value_set_string (value, setting->password);
 		break;
+	case PROP_CID:
+		g_value_set_int (value, setting->cid);
+		break;
 	case PROP_APN:
 		g_value_set_string (value, setting->apn);
 		break;
@@ -260,6 +276,14 @@ nm_setting_gsm_class_init (NMSettingGsmC
 						  G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE | NM_SETTING_PARAM_SECRET));
 
 	g_object_class_install_property
+		(object_class, PROP_CID,
+		 g_param_spec_int (NM_SETTING_GSM_CID,
+					    "CID",
+					    "CID",
+					    1, 15, 1, 
+					    G_PARAM_READWRITE | NM_SETTING_PARAM_SERIALIZE));
+
+	g_object_class_install_property
 		(object_class, PROP_APN,
 		 g_param_spec_string (NM_SETTING_GSM_APN,
 						  "APN",
diff -up NetworkManager-0.7.0/libnm-util/nm-setting-gsm.h.cid-fix NetworkManager-0.7.0/libnm-util/nm-setting-gsm.h
--- NetworkManager-0.7.0/libnm-util/nm-setting-gsm.h.cid-fix	2008-06-12 19:27:32.000000000 +0200
+++ NetworkManager-0.7.0/libnm-util/nm-setting-gsm.h	2008-07-28 16:34:03.000000000 +0200
@@ -33,6 +33,7 @@ GQuark nm_setting_gsm_error_quark (void)
 #define NM_SETTING_GSM_NUMBER       "number"
 #define NM_SETTING_GSM_USERNAME     "username"
 #define NM_SETTING_GSM_PASSWORD     "password"
+#define NM_SETTING_GSM_CID          "cid"
 #define NM_SETTING_GSM_APN          "apn"
 #define NM_SETTING_GSM_NETWORK_ID   "network-id"
 #define NM_SETTING_GSM_NETWORK_TYPE "network-type"
@@ -55,6 +57,7 @@ typedef struct {
 	char *username;
 	char *password;
 
+	int cid;
 	char *apn; /* NULL for dynamic */
 	char *network_id; /* for manual registration or NULL for automatic */
 	int network_type; /* One of the NM_GSM_NETWORK_* */
diff -up NetworkManager-0.7.0/src/nm-gsm-device.c.cid-fix NetworkManager-0.7.0/src/nm-gsm-device.c
--- NetworkManager-0.7.0/src/nm-gsm-device.c.cid-fix	2008-07-15 13:59:32.000000000 +0200
+++ NetworkManager-0.7.0/src/nm-gsm-device.c	2008-07-28 16:34:03.000000000 +0200
@@ -194,9 +196,12 @@ set_apn_done (NMSerialDevice *device,
 		    int reply_index,
 		    gpointer user_data)
 {
+	NMSettingGsm *setting;
+
 	switch (reply_index) {
 	case 0:
-		do_dial (NM_GSM_DEVICE (device), 1);
+		setting = NM_SETTING_GSM (gsm_device_get_setting (NM_GSM_DEVICE (device), NM_TYPE_SETTING_GSM));
+		do_dial (NM_GSM_DEVICE (device), setting->cid);
 		break;
 	default:
 		nm_warning ("Setting APN failed");
@@ -213,7 +218,6 @@ set_apn (NMGsmDevice *device)
 	NMSettingGsm *setting;
 	char *command;
 	char *responses[] = { "OK", "ERROR", NULL };
-	guint cid = 1;
 
 	setting = NM_SETTING_GSM (gsm_device_get_setting (NM_GSM_DEVICE (device), NM_TYPE_SETTING_GSM));
 
@@ -223,7 +227,7 @@ set_apn (NMGsmDevice *device)
 		return;
 	}
 
-	command = g_strdup_printf ("AT+CGDCONT=%d, \"IP\", \"%s\"", cid, setting->apn);
+	command = g_strdup_printf ("AT+CGDCONT=%d, \"IP\", \"%s\"", setting->cid, setting->apn);
 	modem_wait_for_reply (device, command, 3, responses, responses, set_apn_done);
 	g_free (command);
 }
