diff --git a/src/gprs_rlcmac.c b/src/gprs_rlcmac.c
new file mode 100644
index 0000000..3163c32
--- /dev/null
+++ b/src/gprs_rlcmac.c
@@ -0,0 +1,73 @@
+/* gprs_rlcmac.c
+ *
+ * Copyright (C) 2012 Ivan Klyuchnikov
+ * Copyright (C) 2012 Andreas Eversberg <jolly@eversberg.eu>
+ * Copyright (C) 2013 by Holger Hans Peter Freyther
+ * Copyright (C) 2023 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <osmocom/gsm/gsm48.h>
+
+#include <pcu_l1_if.h>
+#include <gprs_rlcmac.h>
+#include <bts.h>
+#include <encoding.h>
+#include <tbf.h>
+#include <gprs_debug.h>
+
+extern void *tall_pcu_ctx;
+
+int gprs_rlcmac_paging_request(struct gprs_rlcmac_bts *bts, const struct osmo_mobile_identity *mi,
+			       const char *imsi)
+{
+	if (log_check_level(DRLCMAC, LOGL_NOTICE)) {
+		char str[64];
+		osmo_mobile_identity_to_str_buf(str, sizeof(str), mi);
+		LOGP(DRLCMAC, LOGL_NOTICE, "TX: [PCU -> BTS] Paging Request (CCCH) MI=%s\n", str);
+	}
+	struct bitvec *paging_request = bitvec_alloc(22, tall_pcu_ctx);
+	bitvec_unhex(paging_request, DUMMY_VEC);
+	int plen = write_paging_request(paging_request, mi);
+	if (plen <= 0) {
+		LOGP(DRLCMAC, LOGL_ERROR, "TX: [PCU -> BTS] Failed to encode Paging Request\n");
+		return -1;
+	}
+	bts_do_rate_ctr_inc(bts, CTR_PCH_REQUESTS);
+	pcu_l1if_tx_pch(bts, paging_request, plen, imsi);
+	bitvec_free(paging_request);
+
+	return 0;
+}
+
+/* Encode Application Information Request to Packet Application Information (3GPP TS 44.060 11.2.47) */
+struct msgb *gprs_rlcmac_app_info_msg(const struct gsm_pcu_if_app_info_req *req) {
+	struct msgb *msg;
+	uint16_t msgb_len = req->len + 1;
+	struct bitvec bv = {0, msgb_len, NULL};
+	const enum bit_value page_mode[] = {ZERO, ZERO}; /* Normal Paging (3GPP TS 44.060 12.20) */
+
+	if (!req->len) {
+		LOGP(DRLCMAC, LOGL_ERROR, "Application Information Request with zero length received!\n");
+		return NULL;
+	}
+
+	msg = msgb_alloc(msgb_len, "app_info_msg");
+	if (!msg)
+		return NULL;
+
+	bv.data = msgb_put(msg, msgb_len);
+	bitvec_set_bits(&bv, page_mode, 2);
+	bitvec_set_uint(&bv, req->application_type, 4);
+	bitvec_set_bytes(&bv, req->data, req->len);
+	return msg;
+}
