diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 2f270ca..873ec5b 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -611,68 +611,80 @@
 }
 
 
+private function f_mm_ciph_geran() runs on BSC_ConnHdlr
+{
+	var template BSSMAP_IE_EncryptionInformation encryptionInformation;
+	var template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm;
+	var template BSSMAP_IE_KC128 kC128;
+	var OCT1 a5_perm_alg;
+	var PDU_BSSAP pdu;
+
+	if (g_pars.net.expect_ciph) {
+		/* There is nothing to do */
+		return;
+	}
+
+	f_get_expected_encryption(encryptionInformation, chosenEncryptionAlgorithm, kC128, a5_perm_alg);
+	alt {
+	[] BSSAP.receive(tr_BSSMAP_CipherModeCmd2(encryptionInformation, kC128)) -> value pdu {
+		var OCT1 a5_chosen := f_best_alg_from_mask(a5_perm_alg);
+		var integer a5_nr := f_alg_from_mask(a5_chosen);
+		BSSAP.send(ts_BSSMAP_CipherModeCompl(int2oct(a5_nr+1, 1)));
+		}
+	[] BSSAP.receive(tr_BSSMAP_CipherModeCmd2) -> value pdu {
+		log("Error: Ciphering Mode Command with unexpected content. Expected: ",
+		    tr_BSSMAP_CipherModeCmd2(encryptionInformation, kC128), "  got: ", pdu);
+		setverdict(fail, "Ciphering Mode Command with unexpected content.");
+		mtc.stop;
+		}
+	[] BSSAP.receive(tr_BSSMAP_ClassmarkRequest) {
+		BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3))
+		repeat;
+		}
+	}
+	/* FIXME: Send the best available algorithm */
+}
+
+private function f_mm_ciph_utran() runs on BSC_ConnHdlr
+{
+	alt {
+	[g_pars.net.expect_ciph] BSSAP.receive(tr_RANAP_SecurityModeCmdEnc(uia_algs := ?,
+									   uia_key := oct2bit(g_pars.vec.ik),
+									   key_sts := ?,
+									   uea_algs := ?,
+									   uea_key := oct2bit(g_pars.vec.ck))) {
+		var IntegrityProtectionAlgorithm uia_chosen := 0; /*standard_UMTS_integrity_algorithm_UIA1*/
+		var EncryptionAlgorithm uea_chosen := 1; /*standard_UMTS_encryption_algorith_UEA1*/
+		BSSAP.send(ts_RANAP_SecurityModeCompleteEnc(uia_chosen, uea_chosen));
+		}
+	[g_pars.net.expect_ciph] BSSAP.receive(tr_RANAP_SecurityModeCmdEnc(?,?,?,?,?)) {
+		setverdict(fail, "Invalid SecurityModeCommand (ciphering case)");
+		mtc.stop;
+		}
+	[not g_pars.net.expect_ciph] BSSAP.receive(tr_RANAP_SecurityModeCmd(uia_algs := ?,
+									    uia_key := oct2bit(g_pars.vec.ik),
+									    key_sts := ?)) {
+		var IntegrityProtectionAlgorithm uia_chosen := 0; /*standard_UMTS_integrity_algorithm_UIA1;*/
+		BSSAP.send(ts_RANAP_SecurityModeComplete(uia_chosen));
+		}
+	[not g_pars.net.expect_ciph] BSSAP.receive(tr_RANAP_SecurityModeCmd(?,?,?)) {
+		setverdict(fail, "Invalid SecurityModeCommand (non-ciphering case)");
+		mtc.stop;
+		}
+	}
+}
+
 function f_mm_common() runs on BSC_ConnHdlr
 {
 	f_mm_auth();
-	if (g_pars.ran_is_geran) {
-		if (g_pars.net.expect_ciph) {
-			var template BSSMAP_IE_EncryptionInformation encryptionInformation;
-			var template BSSMAP_IE_ChosenEncryptionAlgorithm chosenEncryptionAlgorithm;
-			var template BSSMAP_IE_KC128 kC128;
-			var OCT1 a5_perm_alg;
-			f_get_expected_encryption(encryptionInformation, chosenEncryptionAlgorithm, kC128, a5_perm_alg);
 
-			var PDU_BSSAP pdu;
-			var template PDU_BSSAP expect_ciph_mode_cmd := tr_BSSMAP_CipherModeCmd2(encryptionInformation, kC128);
-			alt {
-			[] BSSAP.receive(expect_ciph_mode_cmd) -> value pdu {
-				var OCT1 a5_chosen := f_best_alg_from_mask(a5_perm_alg);
-				var integer a5_nr := f_alg_from_mask(a5_chosen);
-				BSSAP.send(ts_BSSMAP_CipherModeCompl(int2oct(a5_nr+1, 1)));
-				}
-			[] BSSAP.receive(tr_BSSMAP_CipherModeCmd2) -> value pdu {
-				log("Error: Ciphering Mode Command with unexpected content. Expected: ",
-				    expect_ciph_mode_cmd, "  got: ", pdu);
-				setverdict(fail, "Ciphering Mode Command with unexpected content.");
-				mtc.stop;
-				}
-			[] BSSAP.receive(tr_BSSMAP_ClassmarkRequest) {
-				BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3))
-				repeat;
-				}
-			}
-			/* FIXME: Send the best available algorithm */
-		}
-		f_expect_common_id();
-	} else { /* UTRAN */
-		alt {
-		[g_pars.net.expect_ciph] BSSAP.receive(tr_RANAP_SecurityModeCmdEnc(uia_algs := ?,
-										   uia_key := oct2bit(g_pars.vec.ik),
-										   key_sts := ?,
-										   uea_algs := ?,
-										   uea_key := oct2bit(g_pars.vec.ck))) {
-			var IntegrityProtectionAlgorithm uia_chosen := 0; /*standard_UMTS_integrity_algorithm_UIA1*/
-			var EncryptionAlgorithm uea_chosen := 1; /*standard_UMTS_encryption_algorith_UEA1*/
-			BSSAP.send(ts_RANAP_SecurityModeCompleteEnc(uia_chosen, uea_chosen));
-			f_expect_common_id();
-			}
-		[g_pars.net.expect_ciph] BSSAP.receive(tr_RANAP_SecurityModeCmdEnc(?,?,?,?,?)) {
-			setverdict(fail, "Invalid SecurityModeCommand (ciphering case)");
-			mtc.stop;
-			}
-		[not g_pars.net.expect_ciph] BSSAP.receive(tr_RANAP_SecurityModeCmd(uia_algs := ?,
-										    uia_key := oct2bit(g_pars.vec.ik),
-										    key_sts := ?)) {
-			var IntegrityProtectionAlgorithm uia_chosen := 0; /*standard_UMTS_integrity_algorithm_UIA1;*/
-			BSSAP.send(ts_RANAP_SecurityModeComplete(uia_chosen));
-			f_expect_common_id();
-			}
-		[not g_pars.net.expect_ciph] BSSAP.receive(tr_RANAP_SecurityModeCmd(?,?,?)) {
-			setverdict(fail, "Invalid SecurityModeCommand (non-ciphering case)");
-			mtc.stop;
-			}
-		}
+	if (g_pars.ran_is_geran) {
+		f_mm_ciph_geran();
+	} else {
+		f_mm_ciph_utran();
 	}
+
+	f_expect_common_id();
 }
 
 function f_expect_mm_info() runs on BSC_ConnHdlr {
