diff --git a/src/hnbap_common.c b/src/hnbap_common.c
index d13cb50..f3aa1a3 100644
--- a/src/hnbap_common.c
+++ b/src/hnbap_common.c
@@ -77,7 +77,7 @@
 		return NULL;
 	}
 
-	msgb_put(msg, rval.encoded);
+	msgb_put(msg, rval.encoded/8);
 
 	return msg;
 }
diff --git a/src/hnbgw_ranap.c b/src/hnbgw_ranap.c
index 44a920b..bad99c8 100644
--- a/src/hnbgw_ranap.c
+++ b/src/hnbgw_ranap.c
@@ -8,6 +8,7 @@
 #include "asn1helpers.h"
 
 #include "hnbgw.h"
+#include "hnbgw_rua.h"
 //#include "ranap_common.h"
 
 #include "ranap/RANAP_RANAP-PDU.h"
@@ -177,16 +178,37 @@
  * END auto-generated copy+pasted
  ***********************************************************************/
 
-#if 0
+static int ranap_tx_reset_ack(struct hnb_context *hnb,
+				RANAP_CN_DomainIndicator_t domain)
 {
-	RANAP_ResetAcknowledgeIEs_s ies;
+	RANAP_ResetAcknowledge_t out;
+	RANAP_ResetAcknowledgeIEs_t ies;
+	struct msgb *msg;
+	int rc;
 
 	memset(&ies, 0, sizeof(ies));
-	ies.cN_DomainIndicator = RANAP_CN_DomainIndicator_cs_domain;
+	ies.cN_DomainIndicator = domain;
 
-	rc = ranap_encoderesetacknowledgeise(&ies, FIXME);
+	memset(&out, 0, sizeof(out));
+	rc = ranap_encode_resetacknowledgeies(&out, &ies);
+	if (rc < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "error encoding reset ack IEs: %d\n", rc);
+		return rc;
+	}
+
+	msg = ranap_generate_successful_outcome(RANAP_ProcedureCode_id_Reset,
+						RANAP_Criticality_reject,
+						&asn_DEF_RANAP_ResetAcknowledge,
+						&out);
+	if (!msg)
+		return -1;
+
+	msg->dst = hnb;
+
+	rc = rua_tx_udt(msg);
+
+	return rc;
 }
-#endif
 
 static int ranap_rx_init_reset(struct hnb_context *hnb, ANY_t *in)
 {
@@ -199,6 +221,8 @@
 
 	DEBUGP(DMAIN, "RESET.req\n");
 
+	ranap_tx_reset_ack(hnb, ies.cN_DomainIndicator);
+
 	return 0;
 }
 
diff --git a/src/hnbgw_rua.c b/src/hnbgw_rua.c
index 3af564b..69d5e69 100644
--- a/src/hnbgw_rua.c
+++ b/src/hnbgw_rua.c
@@ -21,73 +21,35 @@
 	return osmo_wqueue_enqueue(&ctx->wqueue, msg);
 }
 
-static const struct value_string rua_cause_radio_vals[] = {
-	{ RUA_CauseRadioNetwork_normal,		 "normal" },
-	{ RUA_CauseRadioNetwork_connect_failed,	 "connect failed" },
-	{ RUA_CauseRadioNetwork_network_release, "network release" },
-	{ RUA_CauseRadioNetwork_unspecified,	 "unspecified" },
-	{ 0, NULL }
-};
-
-static const struct value_string rua_cause_transp_vals[] = {
-	{ RUA_CauseTransport_transport_resource_unavailable, "resource unavailable" },
-	{ RUA_CauseTransport_unspecified, "unspecified" },
-	{ 0, NULL }
-};
-
-static const struct value_string rua_cause_prot_vals[] = {
-	{ RUA_CauseProtocol_transfer_syntax_error, "syntax error" },
-	{ RUA_CauseProtocol_abstract_syntax_error_reject,
-		"abstract syntax error; reject" },
-	{ RUA_CauseProtocol_abstract_syntax_error_ignore_and_notify,
-		"abstract syntax error; ignore and notify" },
-	{ RUA_CauseProtocol_message_not_compatible_with_receiver_state,
-		"message not compatible with receiver state" },
-	{ RUA_CauseProtocol_semantic_error, "semantic error" },
-	{ RUA_CauseProtocol_unspecified, "unspecified" },
-	{ RUA_CauseProtocol_abstract_syntax_error_falsely_constructed_message,
-		"falsely constructed message" },
-	{ 0, NULL }
-};
-
-static const struct value_string rua_cause_misc_vals[] = {
-	{ RUA_CauseMisc_processing_overload,	"processing overload" },
-	{ RUA_CauseMisc_hardware_failure,	"hardware failure" },
-	{ RUA_CauseMisc_o_and_m_intervention,	"OAM intervention" },
-	{ RUA_CauseMisc_unspecified, 		"unspecified" },
-	{ 0, NULL }
-};
-
-static char *rua_cause_str(RUA_Cause_t *cause)
+int rua_tx_udt(struct msgb *inmsg)
 {
-	static char buf[32];
+	RUA_ConnectionlessTransfer_t out;
+	RUA_ConnectionlessTransferIEs_t ies;
+	struct msgb *msg;
+	int rc;
 
-	switch (cause->present) {
-	case RUA_Cause_PR_radioNetwork:
-		snprintf(buf, sizeof(buf), "radio(%s)",
-			 get_value_string(rua_cause_radio_vals,
-					 cause->choice.radioNetwork));
-		break;
-	case RUA_Cause_PR_transport:
-		snprintf(buf, sizeof(buf), "transport(%s)",
-			get_value_string(rua_cause_transp_vals,
-					cause->choice.transport));
-		break;
-	case RUA_Cause_PR_protocol:
-		snprintf(buf, sizeof(buf), "protocol(%s)",
-			get_value_string(rua_cause_prot_vals,
-					cause->choice.protocol));
-		break;
-	case RUA_Cause_PR_misc:
-		snprintf(buf, sizeof(buf), "misc(%s)",
-			get_value_string(rua_cause_misc_vals,
-					cause->choice.misc));
-		break;
-	}
-	return buf;
+	memset(&ies, 0, sizeof(ies));
+	ies.ranaP_Message.buf = inmsg->data;
+	ies.ranaP_Message.size = msgb_length(inmsg);
+
+	/* FIXME: msgb_free(msg)? ownership not yet clear */
+
+	memset(&out, 0, sizeof(out));
+	rc = rua_encode_connectionlesstransferies(&out, &ies);
+	if (rc < 0)
+		return rc;
+
+	msg = rua_generate_initiating_message(RUA_ProcedureCode_id_ConnectionlessTransfer,
+					      RUA_Criticality_reject,
+					      &asn_DEF_RUA_ConnectionlessTransfer,
+					      &out);
+	msg->dst = inmsg->dst;
+
+	DEBUGP(DMAIN, "transmitting RUA payload of %u bytes\n", msgb_length(msg));
+
+	return hnbgw_rua_tx(msg->dst, msg);
 }
 
-
 static int rua_rx_init_connect(struct msgb *msg, ANY_t *in)
 {
 	RUA_ConnectIEs_t ies;
diff --git a/src/hnbgw_rua.h b/src/hnbgw_rua.h
index 97c35f0..69b2382 100644
--- a/src/hnbgw_rua.h
+++ b/src/hnbgw_rua.h
@@ -4,3 +4,5 @@
 
 int hnbgw_rua_rx(struct hnb_context *hnb, struct msgb *msg);
 int hnbgw_rua_init(void);
+
+int rua_tx_udt(struct msgb *inmsg);
diff --git a/src/ranap_common.c b/src/ranap_common.c
index 7be7c95..dc86a7a 100644
--- a/src/ranap_common.c
+++ b/src/ranap_common.c
@@ -77,7 +77,7 @@
 		return NULL;
 	}
 
-	msgb_put(msg, rval.encoded);
+	msgb_put(msg, rval.encoded/8);
 
 	return msg;
 }
diff --git a/src/rua_common.c b/src/rua_common.c
index 637cd72..8f4da12 100644
--- a/src/rua_common.c
+++ b/src/rua_common.c
@@ -7,41 +7,106 @@
 
 extern int asn1_xer_print;
 
+static const struct value_string rua_cause_radio_vals[] = {
+	{ RUA_CauseRadioNetwork_normal,		 "normal" },
+	{ RUA_CauseRadioNetwork_connect_failed,	 "connect failed" },
+	{ RUA_CauseRadioNetwork_network_release, "network release" },
+	{ RUA_CauseRadioNetwork_unspecified,	 "unspecified" },
+	{ 0, NULL }
+};
+
+static const struct value_string rua_cause_transp_vals[] = {
+	{ RUA_CauseTransport_transport_resource_unavailable, "resource unavailable" },
+	{ RUA_CauseTransport_unspecified, "unspecified" },
+	{ 0, NULL }
+};
+
+static const struct value_string rua_cause_prot_vals[] = {
+	{ RUA_CauseProtocol_transfer_syntax_error, "syntax error" },
+	{ RUA_CauseProtocol_abstract_syntax_error_reject,
+		"abstract syntax error; reject" },
+	{ RUA_CauseProtocol_abstract_syntax_error_ignore_and_notify,
+		"abstract syntax error; ignore and notify" },
+	{ RUA_CauseProtocol_message_not_compatible_with_receiver_state,
+		"message not compatible with receiver state" },
+	{ RUA_CauseProtocol_semantic_error, "semantic error" },
+	{ RUA_CauseProtocol_unspecified, "unspecified" },
+	{ RUA_CauseProtocol_abstract_syntax_error_falsely_constructed_message,
+		"falsely constructed message" },
+	{ 0, NULL }
+};
+
+static const struct value_string rua_cause_misc_vals[] = {
+	{ RUA_CauseMisc_processing_overload,	"processing overload" },
+	{ RUA_CauseMisc_hardware_failure,	"hardware failure" },
+	{ RUA_CauseMisc_o_and_m_intervention,	"OAM intervention" },
+	{ RUA_CauseMisc_unspecified, 		"unspecified" },
+	{ 0, NULL }
+};
+
+char *rua_cause_str(RUA_Cause_t *cause)
+{
+	static char buf[32];
+
+	switch (cause->present) {
+	case RUA_Cause_PR_radioNetwork:
+		snprintf(buf, sizeof(buf), "radio(%s)",
+			 get_value_string(rua_cause_radio_vals,
+					 cause->choice.radioNetwork));
+		break;
+	case RUA_Cause_PR_transport:
+		snprintf(buf, sizeof(buf), "transport(%s)",
+			get_value_string(rua_cause_transp_vals,
+					cause->choice.transport));
+		break;
+	case RUA_Cause_PR_protocol:
+		snprintf(buf, sizeof(buf), "protocol(%s)",
+			get_value_string(rua_cause_prot_vals,
+					cause->choice.protocol));
+		break;
+	case RUA_Cause_PR_misc:
+		snprintf(buf, sizeof(buf), "misc(%s)",
+			get_value_string(rua_cause_misc_vals,
+					cause->choice.misc));
+		break;
+	}
+	return buf;
+}
+
+
 static struct msgb *rua_msgb_alloc(void)
 {
 	return msgb_alloc(1024, "RUA Tx");
 }
 
-#if 0
-ssize_t rua_generate_initiating_message(uint8_t ** buffer,
-					uint32_t * length,
+struct msgb *rua_generate_initiating_message(
 					e_RUA_ProcedureCode procedureCode,
 					RUA_Criticality_t criticality,
 					asn_TYPE_descriptor_t * td, void *sptr)
 {
 	RUA_RUA_PDU_t pdu;
+	struct msgb *msg = rua_msgb_alloc();
+	asn_enc_rval_t rval;
 	ssize_t encoded;
 
 	memset(&pdu, 0, sizeof(pdu));
-
 	pdu.present = RUA_RUA_PDU_PR_initiatingMessage;
 	pdu.choice.initiatingMessage.procedureCode = procedureCode;
 	pdu.choice.initiatingMessage.criticality = criticality;
 	ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr);
 
-	if (asn1_xer_print)
-		xer_fprint(stdout, &asn_DEF_RUA_RUA_PDU, (void *)&pdu);
-
-	if ((encoded =
-	     aper_encode_to_new_buffer(&asn_DEF_RUA_RUA_PDU, 0, &pdu,
-				       (void **)buffer)) < 0) {
-		return -1;
+	rval = aper_encode_to_buffer(&asn_DEF_RUA_RUA_PDU, &pdu,
+				     msg->data, msgb_tailroom(msg));
+	if (rval.encoded < 0) {
+		LOGP(DMAIN, LOGL_ERROR, "Error encoding type %s\n", rval.failed_type->name);
+		msgb_free(msg);
+		return NULL;
 	}
 
-	*length = encoded;
-	return encoded;
+	msgb_put(msg, rval.encoded/8);
+
+	return msg;
 }
-#endif
 
 struct msgb *rua_generate_successful_outcome(
 					   e_RUA_ProcedureCode procedureCode,
@@ -74,7 +139,7 @@
 		return NULL;
 	}
 
-	msgb_put(msg, rval.encoded);
+	msgb_put(msg, rval.encoded/8);
 
 	return msg;
 }
diff --git a/src/rua_common.h b/src/rua_common.h
index cb5b2f4..0c9e786 100644
--- a/src/rua_common.h
+++ b/src/rua_common.h
@@ -48,6 +48,11 @@
 
 extern int asn1_xer_print;
 
+struct msgb *rua_generate_initiating_message(
+					e_RUA_ProcedureCode procedureCode,
+					RUA_Criticality_t criticality,
+					asn_TYPE_descriptor_t * td, void *sptr);
+
 struct msgb *rua_generate_successful_outcome(
 					   e_RUA_ProcedureCode procedureCode,
 					   RUA_Criticality_t criticality,
@@ -57,3 +62,4 @@
 RUA_IE_t *rua_new_ie(RUA_ProtocolIE_ID_t id, RUA_Criticality_t criticality,
 		     asn_TYPE_descriptor_t *type, void *sptr);
 
+char *rua_cause_str(RUA_Cause_t *cause);
