diff --git a/src/sabp/SABP_Load-Query-Complete.c b/src/sabp/SABP_Load-Query-Complete.c
new file mode 100644
index 0000000..d633890
--- /dev/null
+++ b/src/sabp/SABP_Load-Query-Complete.c
@@ -0,0 +1,145 @@
+/*
+ * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
+ * From ASN.1 module "SABP-PDU"
+ * 	found in "../../asn1/sabp/SABP-PDU.asn"
+ */
+
+#include <osmocom/sabp/SABP_Load-Query-Complete.h>
+
+static int
+memb_load_Query_Complete_ies_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr,
+			asn_app_constraint_failed_f *ctfailcb, void *app_key) {
+	size_t size;
+	
+	if(!sptr) {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: value not given (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+	
+	/* Determine the number of elements */
+	size = _A_CSEQUENCE_FROM_VOID(sptr)->count;
+	
+	if((size <= 65535l)) {
+		/* Perform validation of the inner elements */
+		return td->check_constraints(td, sptr, ctfailcb, app_key);
+	} else {
+		_ASN_CTFAIL(app_key, td, sptr,
+			"%s: constraint failed (%s:%d)",
+			td->name, __FILE__, __LINE__);
+		return -1;
+	}
+}
+
+static asn_per_constraints_t asn_PER_type_load_Query_Complete_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_per_constraints_t asn_PER_memb_load_Query_Complete_ies_constr_2 GCC_NOTUSED = {
+	{ APC_UNCONSTRAINED,	-1, -1,  0,  0 },
+	{ APC_CONSTRAINED,	 16,  16,  0l,  65535l }	/* (SIZE(0..65535)) */,
+	0, 0	/* No PER value map */
+};
+static asn_TYPE_member_t asn_MBR_load_Query_Complete_ies_2[] = {
+	{ ATF_POINTER, 0, 0,
+		-1 /* Ambiguous tag (CHOICE?) */,
+		0,
+		&asn_DEF_SABP_IE,
+		0,	/* Defer constraints checking to the member type */
+		0,	/* No PER visible constraints */
+		0,
+		""
+		},
+};
+static const ber_tlv_tag_t asn_DEF_load_Query_Complete_ies_tags_2[] = {
+	(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static asn_SET_OF_specifics_t asn_SPC_load_Query_Complete_ies_specs_2 = {
+	sizeof(struct load_Query_Complete_ies),
+	offsetof(struct load_Query_Complete_ies, _asn_ctx),
+	0,	/* XER encoding is XMLDelimitedItemList */
+};
+static /* Use -fall-defs-global to expose */
+asn_TYPE_descriptor_t asn_DEF_load_Query_Complete_ies_2 = {
+	"load-Query-Complete-ies",
+	"load-Query-Complete-ies",
+	SEQUENCE_OF_free,
+	SEQUENCE_OF_print,
+	SEQUENCE_OF_constraint,
+	SEQUENCE_OF_decode_ber,
+	SEQUENCE_OF_encode_der,
+	SEQUENCE_OF_decode_xer,
+	SEQUENCE_OF_encode_xer,
+	SEQUENCE_OF_decode_uper,
+	SEQUENCE_OF_encode_uper,
+	SEQUENCE_OF_decode_aper,
+	SEQUENCE_OF_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_load_Query_Complete_ies_tags_2,
+	sizeof(asn_DEF_load_Query_Complete_ies_tags_2)
+		/sizeof(asn_DEF_load_Query_Complete_ies_tags_2[0]) - 1, /* 1 */
+	asn_DEF_load_Query_Complete_ies_tags_2,	/* Same as above */
+	sizeof(asn_DEF_load_Query_Complete_ies_tags_2)
+		/sizeof(asn_DEF_load_Query_Complete_ies_tags_2[0]), /* 2 */
+	&asn_PER_type_load_Query_Complete_ies_constr_2,
+	asn_MBR_load_Query_Complete_ies_2,
+	1,	/* Single element */
+	&asn_SPC_load_Query_Complete_ies_specs_2	/* Additional specs */
+};
+
+static asn_TYPE_member_t asn_MBR_SABP_Load_Query_Complete_1[] = {
+	{ ATF_NOFLAGS, 0, offsetof(struct SABP_Load_Query_Complete, load_Query_Complete_ies),
+		(ASN_TAG_CLASS_CONTEXT | (0 << 2)),
+		0,
+		&asn_DEF_load_Query_Complete_ies_2,
+		memb_load_Query_Complete_ies_constraint_1,
+		&asn_PER_memb_load_Query_Complete_ies_constr_2,
+		0,
+		"load-Query-Complete-ies"
+		},
+};
+static const ber_tlv_tag_t asn_DEF_SABP_Load_Query_Complete_tags_1[] = {
+	(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
+};
+static const asn_TYPE_tag2member_t asn_MAP_SABP_Load_Query_Complete_tag2el_1[] = {
+    { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* load-Query-Complete-ies */
+};
+static asn_SEQUENCE_specifics_t asn_SPC_SABP_Load_Query_Complete_specs_1 = {
+	sizeof(struct SABP_Load_Query_Complete),
+	offsetof(struct SABP_Load_Query_Complete, _asn_ctx),
+	asn_MAP_SABP_Load_Query_Complete_tag2el_1,
+	1,	/* Count of tags in the map */
+	0, 0, 0,	/* Optional elements (not needed) */
+	0,	/* Start extensions */
+	2	/* Stop extensions */
+};
+asn_TYPE_descriptor_t asn_DEF_SABP_Load_Query_Complete = {
+	"SABP_Load-Query-Complete",
+	"SABP_Load-Query-Complete",
+	SEQUENCE_free,
+	SEQUENCE_print,
+	SEQUENCE_constraint,
+	SEQUENCE_decode_ber,
+	SEQUENCE_encode_der,
+	SEQUENCE_decode_xer,
+	SEQUENCE_encode_xer,
+	SEQUENCE_decode_uper,
+	SEQUENCE_encode_uper,
+	SEQUENCE_decode_aper,
+	SEQUENCE_encode_aper,
+	0,	/* Use generic outmost tag fetcher */
+	asn_DEF_SABP_Load_Query_Complete_tags_1,
+	sizeof(asn_DEF_SABP_Load_Query_Complete_tags_1)
+		/sizeof(asn_DEF_SABP_Load_Query_Complete_tags_1[0]), /* 1 */
+	asn_DEF_SABP_Load_Query_Complete_tags_1,	/* Same as above */
+	sizeof(asn_DEF_SABP_Load_Query_Complete_tags_1)
+		/sizeof(asn_DEF_SABP_Load_Query_Complete_tags_1[0]), /* 1 */
+	0,	/* No PER visible constraints */
+	asn_MBR_SABP_Load_Query_Complete_1,
+	1,	/* Elements count */
+	&asn_SPC_SABP_Load_Query_Complete_specs_1	/* Additional specs */
+};
+
