diff --git a/src/hnbgw_rua.c b/src/hnbgw_rua.c
new file mode 100644
index 0000000..0c1f0af
--- /dev/null
+++ b/src/hnbgw_rua.c
@@ -0,0 +1,102 @@
+#include <osmocom/core/msgb.h>
+#include <osmocom/core/utils.h>
+
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+
+#include "asn1helpers.h"
+
+#include "hnbgw.h"
+#include "rua_common.h"
+#include "rua_ies_defs.h"
+
+static int hnbgw_rua_tx(struct hnb_context *ctx, struct msgb *msg)
+{
+	if (!msg)
+		return -EINVAL;
+
+	msgb_ppid(msg) = IUH_PPI_RUA;
+	return osmo_wqueue_enqueue(&ctx->wqueue, msg);
+}
+
+
+static int rua_rx_initiating_msg(struct hnb_context *hnb, RUA_InitiatingMessage_t *imsg)
+{
+	int rc;
+
+	switch (imsg->procedureCode) {
+	case RUA_ProcedureCode_id_Connect:
+		break;
+	case RUA_ProcedureCode_id_DirectTransfer:
+		break;
+	case RUA_ProcedureCode_id_Disconnect:
+		break;
+	case RUA_ProcedureCode_id_ConnectionlessTransfer:
+		break;
+	case RUA_ProcedureCode_id_ErrorIndication:
+	case RUA_ProcedureCode_id_privateMessage:
+		break;
+	default:
+		break;
+	}
+}
+
+static int rua_rx_successful_outcome_msg(struct hnb_context *hnb, RUA_SuccessfulOutcome_t *msg)
+{
+
+}
+
+static int rua_rx_unsuccessful_outcome_msg(struct hnb_context *hnb, RUA_UnsuccessfulOutcome_t *msg)
+{
+
+}
+
+
+static int _hnbgw_rua_rx(struct hnb_context *hnb, RUA_RUA_PDU_t *pdu)
+{
+	int rc;
+
+	/* it's a bit odd that we can't dispatch on procedure code, but
+	 * that's not possible */
+	switch (pdu->present) {
+	case RUA_RUA_PDU_PR_initiatingMessage:
+		rc = rua_rx_initiating_msg(hnb, &pdu->choice.initiatingMessage);
+		break;
+	case RUA_RUA_PDU_PR_successfulOutcome:
+		rc = rua_rx_successful_outcome_msg(hnb, &pdu->choice.successfulOutcome);
+		break;
+	case RUA_RUA_PDU_PR_unsuccessfulOutcome:
+		rc = rua_rx_unsuccessful_outcome_msg(hnb, &pdu->choice.unsuccessfulOutcome);
+		break;
+	default:
+		return -1;
+	}
+}
+
+int hnbgw_rua_rx(struct hnb_context *hnb, struct msgb *msg)
+{
+	RUA_RUA_PDU_t _pdu, *pdu = &_pdu;
+	asn_dec_rval_t dec_ret;
+	int rc;
+
+	/* decode and handle to _hnbgw_hnbap_rx() */
+
+	memset(pdu, 0, sizeof(*pdu));
+	dec_ret = aper_decode(NULL, &asn_DEF_RUA_RUA_PDU, (void **) &pdu,
+			      msg->data, msgb_length(msg), 0, 0);
+	if (dec_ret.code != RC_OK) {
+		LOGP(DMAIN, LOGL_ERROR, "Error in ASN.1 decode\n");
+		return rc;
+	}
+
+	rc = _hnbgw_rua_rx(hnb, pdu);
+
+	return rc;
+}
+
+
+int hnbgw_rua_init(void)
+{
+
+}
