diff --git a/src/bsc_hack.c b/src/bsc_hack.c
index aab4d0f..be18719 100644
--- a/src/bsc_hack.c
+++ b/src/bsc_hack.c
@@ -767,10 +767,12 @@
 	num_imsi = strtoull(imsi, NULL, 10);
 	paging_group = get_paging_group(num_imsi, 1, 3);
 
+#if 0
 	for (paging_group = 0; paging_group < 3; paging_group++)
 		rsl_paging_cmd(bts, paging_group, mi_len, mi, RSL_CHANNEED_TCH_F);
 
 	schedule_timer(&pag_timer, 10, 0);
+#endif
 }
 
 int main(int argc, char **argv)
diff --git a/src/gsm_04_08.c b/src/gsm_04_08.c
index 0bbde18..a37d583 100644
--- a/src/gsm_04_08.c
+++ b/src/gsm_04_08.c
@@ -40,6 +40,9 @@
 #define GSM48_ALLOC_SIZE	1024
 #define GSM48_ALLOC_HEADROOM	128
 
+static int gsm48_tx_simple(struct gsm_lchan *lchan,
+			   u_int8_t pdisc, u_int8_t msg_type);
+
 struct gsm_lai {
 	u_int16_t mcc;
 	u_int16_t mnc;
@@ -102,7 +105,7 @@
 
 int generate_mid_from_tmsi(u_int8_t *buf, u_int32_t tmsi)
 {
-	u_int32_t *tptr = &buf[3];
+	u_int32_t *tptr = (u_int32_t *) &buf[3];
 
 	buf[0] = GSM48_IE_MOBILE_ID;
 	buf[1] = TMSI_LEN;
@@ -117,11 +120,29 @@
 	return msgb_alloc_headroom(GSM48_ALLOC_SIZE, GSM48_ALLOC_HEADROOM);
 }
 
-static int gsm0408_sendmsg(struct msgb *msg)
+static int gsm48_sendmsg(struct msgb *msg)
 {
-	if (msg->lchan)
+	struct gsm48_hdr *gh = (struct gsm48_hdr *) msg->data;
+
+	if (msg->lchan) {
 		msg->trx = msg->lchan->ts->trx;
 
+		if ((gh->proto_discr & GSM48_PDISC_MASK) == GSM48_PDISC_CC) {
+			/* Send a 04.08 call control message, add transaction
+			 * ID and TI flag */
+			gh->proto_discr |= msg->lchan->call.transaction_id;
+
+			/* GSM 04.07 Section 11.2.3.1.3 */
+			switch (msg->lchan->call.type) {
+			case GSM_CT_MO:
+				gh->proto_discr |= 0x80;
+				break;
+			case GSM_CT_MT:
+				break;
+			}
+		}
+	}
+
 	msg->l3h = msg->data;
 
 	return rsl_data_request(msg, 0);
@@ -143,7 +164,7 @@
 
 	DEBUGP(DMM, "-> LOCATION UPDATE REJECT\n");
 
-	return gsm0408_sendmsg(msg);
+	return gsm48_sendmsg(msg);
 }
 
 /* Chapter 9.2.13 : Send LOCATION UPDATE ACCEPT */
@@ -170,7 +191,9 @@
 
 	DEBUGP(DMM, "-> LOCATION UPDATE ACCEPT\n");
 
-	return gsm0408_sendmsg(msg);
+	gsm48_sendmsg(msg);
+
+	return gsm48_cc_tx_setup(lchan);
 }
 
 static char bcd2char(u_int8_t bcd)
@@ -235,7 +258,7 @@
 	gh->msg_type = GSM48_MT_MM_ID_REQ;
 	gh->data[0] = id_type;
 
-	return gsm0408_sendmsg(msg);
+	return gsm48_sendmsg(msg);
 }
 
 #define MI_SIZE 32
@@ -351,17 +374,8 @@
 
 static int gsm48_tx_mm_serv_ack(struct gsm_lchan *lchan)
 {
-	struct msgb *msg = gsm48_msgb_alloc();
-	struct gsm48_hdr *gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh));
-
-	msg->lchan = lchan;
-
-	gh->proto_discr = GSM48_PDISC_MM;
-	gh->msg_type = GSM48_MT_MM_CM_SERV_ACC;
-
 	DEBUGP(DMM, "-> CM SERVICE ACK\n");
-
-	return gsm0408_sendmsg(msg);
+	return gsm48_tx_simple(lchan, GSM48_PDISC_MM, GSM48_MT_MM_CM_SERV_ACC);
 }
 		
 static int gsm48_rx_mm_serv_req(struct msgb *msg)
@@ -369,7 +383,7 @@
 	struct gsm48_hdr *gh = msgb_l3(msg);
 	u_int8_t serv_type = gh->data[0] & 0x0f;
 
-	DEBUGP(DMM, "CM SERVICE REQUEST serv_type=0x%02x\n", serv_type);
+	DEBUGP(DMM, "<- CM SERVICE REQUEST serv_type=0x%02x\n", serv_type);
 
 	return gsm48_tx_mm_serv_ack(msg->lchan);
 }
@@ -432,36 +446,16 @@
 
 /* Call Control */
 
-/* Send a 04.08 call control message, add transaction ID and TI flag */
-static int gsm48_cc_sendmsg(struct msgb *msg)
-{
-	struct gsm48_hdr *gh = msg->data;
-	struct gsm_call *call = &msg->lchan->call;
-
-	gh->proto_discr |= msg->lchan->call.transaction_id;
-
-	/* GSM 04.07 Section 11.2.3.1.3 */
-	switch (call->type) {
-	case GSM_CT_MO:
-		gh->proto_discr |= 0x80;
-		break;
-	case GSM_CT_MT:
-		break;
-	}
-
-	return gsm0408_sendmsg(msg);
-}
-
-
 static int gsm48_cc_tx_status(struct gsm_lchan *lchan)
 {
 	struct msgb *msg = gsm48_msgb_alloc();
 	struct gsm48_hdr *gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh));
 	u_int8_t *cause, *call_state;
 
+	gh->proto_discr = GSM48_PDISC_CC;
+
 	msg->lchan = lchan;
 
-	gh->proto_discr = GSM48_PDISC_CC;
 	gh->msg_type = GSM48_MT_CC_STATUS;
 
 	cause = msgb_put(msg, 3);
@@ -472,7 +466,7 @@
 	call_state = msgb_put(msg, 1);
 	call_state[0] = 0xc0 | 0x00;
 
-	return gsm48_cc_sendmsg(msg);
+	return gsm48_sendmsg(msg);
 }
 
 static int gsm48_tx_simple(struct gsm_lchan *lchan,
@@ -486,7 +480,7 @@
 	gh->proto_discr = pdisc;
 	gh->msg_type = msg_type;
 
-	return gsm48_cc_sendmsg(msg);
+	return gsm48_sendmsg(msg);
 }
 
 static int gsm48_cc_rx_status_enq(struct msgb *msg)
@@ -500,6 +494,33 @@
 			       GSM48_MT_CC_CALL_CONF);
 }
 
+int gsm48_cc_tx_setup(struct gsm_lchan *lchan)
+{
+	struct msgb *msg = gsm48_msgb_alloc();
+	struct gsm48_hdr *gh;
+	struct gsm_call *call = &lchan->call;
+
+	gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh) + 8);
+
+	call->type = GSM_CT_MT;
+	msg->lchan = lchan;
+
+	gh->proto_discr = GSM48_PDISC_CC;
+	gh->msg_type = GSM48_MT_CC_SETUP;
+	gh->data[0] = 0x34;
+	gh->data[1] = 0x00;
+	gh->data[2] = 0x5c;
+	gh->data[3] = 0x04;
+	gh->data[4] = 0xb9;
+	gh->data[5] = 0x83;
+	gh->data[6] = 0x32;
+	gh->data[7] = 0x24;
+
+	DEBUGP(DCC, "Sending SETUP\n");
+
+	return gsm48_sendmsg(msg);
+}
+
 static int gsm0408_rcv_cc(struct msgb *msg)
 {
 	struct gsm48_hdr *gh = msgb_l3(msg);
