diff --git a/library/RLCMAC_CSN1_Templates.ttcn b/library/RLCMAC_CSN1_Templates.ttcn
index 64c709a..1becddd 100644
--- a/library/RLCMAC_CSN1_Templates.ttcn
+++ b/library/RLCMAC_CSN1_Templates.ttcn
@@ -108,6 +108,77 @@
 		}
 	};
 
+	const CCNMesurementReport ccn_meas_rep_def := {
+		rxlev_servig_cell := 0,
+		zero := '0'B,
+		num_meas := 0,
+		meas := { }
+	}
+
+	/* TS 44.060 sec 11.2.3a */
+	template (value) RlcmacUlCtrlMsg ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(uint5_t tfi,
+						GsmArfcn arfcn,
+						uint6_t bsic,
+						template (value) CCNMesurementReport ccn_meas_rep := ccn_meas_rep_def)
+	:= {
+		msg_type := PACKET_CELL_CHANGE_NOTIFICATION,
+		u := {
+			cell_chg_notif := {
+				gtfi := {
+					is_dl_tfi := false,
+					tfi := tfi
+				},
+				arfcn_bsic_presence := '0'B,
+				arfcn := arfcn,
+				bsic := bsic,
+				ba_psi3_presence := '0'B,
+				ba_used := '0'B,
+				psi3_change_mark := omit,
+				pmo_used := '0'B,
+				pccn_sending := '0'B,
+				ccn_meas_rep := ccn_meas_rep
+			}
+		}
+	};
+
+	/* TS 44.060 sec 11.2.2a */
+	template RlcmacDlCtrlMsg tr_RlcMacDlCtrl_PKT_CELL_CHG_CONTINUE(template GlobalTfi tfi := ?)
+	:= {
+		msg_type := PACKET_CELL_CHANGE_CONTINUE,
+		u := {
+			cell_chg_continue := {
+				page_mode := ?,
+				zero := '0'B,
+				gtfi := tfi,
+				arfcn_bsic_presence := ?,
+				arfcn := *,
+				bsic := *,
+				container_id := *
+			}
+		}
+	};
+
+	/* TS 44.060 sec 11.2.9e */
+	template RlcmacDlCtrlMsg tr_RlcMacDlCtrl_PKT_NEIGH_CELL_DATA(template (present) GlobalTfi tfi := ?,
+								     template (present) uint5_t container_index := ?)
+	:= {
+		msg_type := PACKET_NEIGHBOUR_CELL_DATA,
+		u := {
+			neighbour_cell_data := {
+				page_mode := ?,
+				zero := '0'B,
+				gtfi := tfi,
+				container_id := ?,
+				spare := '0'B,
+				container_index := container_index,
+				arfcn_bsic_presence := ?,
+				arfcn := *,
+				bsic := *,
+				container_list := ?
+			}
+		}
+	};
+
 	private function f_presence_bit_tfi(template uint5_t tfi) return BIT1 {
 		if (istemplatekind(tfi, "omit")) {
 			return '0'B;
diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn
index 14570bf..af8b8d6 100644
--- a/library/RLCMAC_CSN1_Types.ttcn
+++ b/library/RLCMAC_CSN1_Types.ttcn
@@ -32,6 +32,8 @@
 		PACKET_TBF_RELEASE		('001000'B),
 		PACKET_UL_ACK_NACK		('001001'B),
 		PACKET_UL_ASSIGNMENT		('001010'B),
+		PACKET_CELL_CHANGE_CONTINUE	('001011'B),
+		PACKET_NEIGHBOUR_CELL_DATA	('001100'B),
 		PACKET_DL_DUMMY_CTRL		('100101'B)
 	} with { variant "FIELDLENGTH(6)" };
 
@@ -49,7 +51,7 @@
 		PACKET_EGPRS_DL_ACK_NACK	('001000'B),
 		PACKET_PAUSE			('001001'B),
 		ADDITIONAL_MS_RA_CAPABILITIES	('001011'B),
-		PACKET_CELL_CANGE_NOTIFICATION	('001100'B),
+		PACKET_CELL_CHANGE_NOTIFICATION	('001100'B),
 		PACKET_SI_STATUS		('001101'B),
 		PACKET_CS_REQUEST		('001110'B),
 		MBMS_SERVICE_REQUEST		('001111'B),
@@ -586,6 +588,47 @@
 		variant (msg) "PRESENCE(msg_escape = '0'B)"
 	};
 
+	/* 11.2.2a Packet Cell Change Continue */
+	type record PacketCellChangeContinue {
+		PageMode	page_mode,
+		BIT1		zero ('0'B),
+		GlobalTfi	gtfi,
+		BIT1		arfcn_bsic_presence,
+		uint10_t	arfcn optional,
+		uint6_t		bsic optional,
+		uint2_t		container_id optional
+	} with {
+		variant (arfcn) "PRESENCE(arfcn_bsic_presence = '1'B)"
+		variant (bsic) "PRESENCE(arfcn_bsic_presence = '1'B)"
+		variant (container_id) "PRESENCE(arfcn_bsic_presence = '1'B)"
+	};
+
+	/* 11.2.9e Packet Neighbour Cell Data */
+	type record PacketNeighbourCellDataContainer {
+		BIT3	pd,
+		uint5_t	cd_length,
+		octetstring container_data
+	} with {
+		variant (cd_length) "LENGTHTO (container_data)"
+		variant (container_data) "BYTEORDER(first)"
+	};
+	type record of PacketNeighbourCellDataContainer PacketNeighbourCellDataContainerList
+	type record PacketNeighbourCellData {
+		PageMode	page_mode,
+		BIT1		zero ('0'B),
+		GlobalTfi	gtfi,
+		uint2_t		container_id,
+		BIT1		spare ('0'B),
+		uint5_t		container_index,
+		BIT1		arfcn_bsic_presence,
+		uint10_t	arfcn optional,
+		uint6_t		bsic optional,
+		PacketNeighbourCellDataContainerList container_list
+	} with {
+		variant (arfcn) "PRESENCE(arfcn_bsic_presence = '1'B)"
+		variant (bsic) "PRESENCE(arfcn_bsic_presence = '1'B)"
+	};
+
 	/* 11.2.0.1 */
 	type union RlcmacDlCtrlUnion {
 		PacketDlAssignment	dl_assignment,
@@ -594,6 +637,8 @@
 		PacketUlAckNack		ul_ack_nack,
 		PacketDlDummy		dl_dummy,
 		PacketPwrControlTA	pwr_ta,
+		PacketCellChangeContinue cell_chg_continue,
+		PacketNeighbourCellData neighbour_cell_data,
 		octetstring		other
 	} with { variant "" };
 
@@ -607,6 +652,8 @@
 				      ul_ack_nack,	msg_type = PACKET_UL_ACK_NACK;
 				      dl_dummy,		msg_type = PACKET_DL_DUMMY_CTRL;
 				      pwr_ta,		msg_type = PACKET_PWR_CONTROL_TA;
+				      cell_chg_continue,msg_type = PACKET_CELL_CHANGE_CONTINUE;
+				      neighbour_cell_data,msg_type = PACKET_NEIGHBOUR_CELL_DATA;
 				      other,		OTHERWISE
 			)"
 	};
@@ -755,14 +802,51 @@
 		variant (sign_var) "PRESENCE(sign_var_presence = '1'B)"
 	};
 
+	/* 11.2.3a Packet Cell Change Notification */
+	type record NCMeasurementItem {
+		uint6_t freq,
+		BIT1	bsic_presence,
+		uint6_t	bsic optional,
+		uint6_t rxlev
+	} with {
+		variant (bsic) "PRESENCE(bsic_presence = '1'B)"
+	};
+	type record of NCMeasurementItem NCMeasurements;
+	type record CCNMesurementReport {
+		uint6_t 	rxlev_servig_cell,
+		BIT1		zero ('0'B),
+		uint3_t		num_meas,
+		NCMeasurements	meas
+	} with { variant "" };
+	type record PacketCellChangeNotification {
+		GlobalTfi 		gtfi,
+		/* TODO: support 3g/4g in these bits */
+		BIT1			arfcn_bsic_presence,
+		uint10_t		arfcn optional,
+		uint6_t			bsic optional,
+		BIT1			ba_psi3_presence,
+		BIT1			ba_used optional,
+		BIT2			psi3_change_mark optional,
+		BIT1			pmo_used,
+		BIT1			pccn_sending,
+		CCNMesurementReport	ccn_meas_rep
+		/* TODO: Rel6 additions for 3G support */
+	} with {
+		variant (arfcn) "PRESENCE(arfcn_bsic_presence = '0'B)"
+		variant (bsic) "PRESENCE(arfcn_bsic_presence = '0'B)"
+		variant (ba_used) "PRESENCE(ba_psi3_presence = '0'B)"
+		variant (psi3_change_mark) "PRESENCE(ba_psi3_presence = '1'B)"
+	};
+
 	/* 11.2.0.2 */
 	type union RlcmacUlCtrlUnion {
-		PacketCtrlAck		ctrl_ack,
-		PacketDlAckNack		dl_ack_nack,
-		EgprsPacketDlAckNack	dl_ack_nack_egprs,
-		PacketUlDummy		ul_dummy,
-		PacketResourceReq	resource_req,
-		octetstring		other
+		PacketCtrlAck			ctrl_ack,
+		PacketDlAckNack			dl_ack_nack,
+		EgprsPacketDlAckNack		dl_ack_nack_egprs,
+		PacketUlDummy			ul_dummy,
+		PacketResourceReq		resource_req,
+		PacketCellChangeNotification	cell_chg_notif,
+		octetstring			other
 	} with { variant "" };
 
 	type record RlcmacUlCtrlMsg {
@@ -774,6 +858,7 @@
 				      dl_ack_nack_egprs, msg_type = PACKET_EGPRS_DL_ACK_NACK;
 				      ul_dummy,		msg_type = PACKET_UL_DUMMY_CTRL;
 				      resource_req,	msg_type = PACKET_RESOURCE_REQUEST;
+				      cell_chg_notif,	msg_type = PACKET_CELL_CHANGE_NOTIFICATION;
 				      other,		OTHERWISE
 			)"
 	};
