diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn
index dacb720..1628f3a 100644
--- a/library/Osmocom_Gb_Types.ttcn
+++ b/library/Osmocom_Gb_Types.ttcn
@@ -767,6 +767,44 @@
 		BSSGP_CAUSE_NOT_ALL_REQUESTED_PFC_CREATED	('3c'H)
 	} with { variant "FIELDLENGTH(8)" };
 
+	private function t_FLUSH_ACTION(template OCT1 act)
+	return template Flush_Action {
+		var template Flush_Action r;
+		if (istemplatekind(act, "omit")) {
+			return omit;
+		} else if (istemplatekind(act, "*")) {
+			return *;
+		} else {
+			r := {
+				iEI := '0C'O,
+				ext := '1'B,
+				lengthIndicator := {
+					length1 := 1
+				},
+				actionValue := act
+			}
+			return r;
+		}
+	}
+	private function t_NO_OCT_AFF(template integer oct_aff)
+	return template Number_of_octets_affected {
+		var template Number_of_octets_affected r;
+		if (istemplatekind(oct_aff, "omit")) {
+			return omit;
+		} else if (istemplatekind(oct_aff, "*")) {
+			return *;
+		} else {
+			r := {
+				iEI := '25'O,
+				ext := '1'B,
+				lengthIndicator := {
+					length1 := 3
+				},
+				number_of_octets_transfered_or_deleted := f_oct_or_wc(oct_aff, 3)
+			}
+			return r;
+		}
+	}
 
 	private function t_BSSGP_BVCI(template BssgpBvci bvci)
 	return template BVCI {
@@ -1782,6 +1820,34 @@
 		}
 	}
 
+	/* 10.4.2 */
+	template (value) PDU_BSSGP ts_BSSGP_FLUSH_LL_ACK(GprsTlli tlli, template (value) OCT1 act,
+							 template (value) integer oct_affected,
+							 template (omit) BssgpBvci bvci_new := omit,
+							 template (omit) Nsei nsei := omit) := {
+		pDU_BSSGP_FLUSH_LL_ACK := {
+			bssgpPduType := '2B'O,
+			tLLI := ts_BSSGP_TLLI(tlli),
+			flush_Action := t_FLUSH_ACTION(act),
+			bVCI_new := t_BSSGP_BVCI(bvci_new),
+			number_of_octets_affected := t_NO_OCT_AFF(oct_affected),
+			nSEI := t_BSSGP_NSEI(nsei)
+		}
+	}
+	template PDU_BSSGP tr_BSSGP_FLUSH_LL_ACK(template GprsTlli tlli, template OCT1 act,
+						 template integer oct_affected,
+						 template (omit) BssgpBvci bvci_new := omit,
+						 template (omit) Nsei nsei := omit) := {
+		pDU_BSSGP_FLUSH_LL_ACK := {
+			bssgpPduType := '2B'O,
+			tLLI := ts_BSSGP_TLLI(tlli),
+			flush_Action := t_FLUSH_ACTION(act),
+			bVCI_new := t_BSSGP_BVCI(bvci_new),
+			number_of_octets_affected := t_NO_OCT_AFF(oct_affected),
+			nSEI := t_BSSGP_NSEI(nsei)
+		}
+	}
+
 	/* 10.2.3 */
 	template (value) PDU_BSSGP ts_BSSGP_RA_CAP(GprsTlli tlli,
 						   template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit) := {
