diff --git a/openbsc/src/libbsc/abis_nm.c b/openbsc/src/libbsc/abis_nm.c
index 5212f6a..ec1e478 100644
--- a/openbsc/src/libbsc/abis_nm.c
+++ b/openbsc/src/libbsc/abis_nm.c
@@ -439,6 +439,74 @@
 	return res;
 }
 
+static inline bool handle_attr(struct gsm_bts *bts, enum bts_attribute id, uint8_t *val, uint8_t len)
+{
+	switch (id) {
+	case BTS_TYPE_VARIANT:
+		LOGP(DNM, LOGL_ERROR, "BTS reported variant: %s\n",  val);
+		break;
+	case BTS_SUB_MODEL:
+		LOGP(DNM, LOGL_ERROR, "BTS reported submodel: %s\n",  val);
+		break;
+	default:
+		return false;
+	}
+	return true;
+}
+
+/* Handle 3GPP TS 52.021 §9.4.64 Get Attribute Response Info */
+static int abis_nm_rx_get_attr_resp(struct msgb *mb, struct gsm_bts *bts)
+{
+	struct abis_om_hdr *oh = msgb_l2(mb);
+	struct abis_om_fom_hdr *foh = msgb_l3(mb);
+	struct e1inp_sign_link *sign_link = mb->dst;
+	struct tlv_parsed tp;
+	const uint8_t *ari;
+	uint8_t unreported, i;
+	uint16_t ari_len;
+	int rc;
+	struct abis_nm_sw_desc sw_descr[MAX_BTS_ATTR];
+
+	abis_nm_debugp_foh(DNM, foh);
+
+	DEBUGPC(DNM, "Get Attributes Response\n");
+
+	abis_nm_tlv_parse(&tp, sign_link->trx->bts, foh->data, oh->length-sizeof(*foh));
+
+	if (!TLVP_PRESENT(&tp, NM_ATT_GET_ARI)) {
+		LOGP(DNM, LOGL_ERROR, "Get Attributes Response without Response Info?!\n");
+		return -EINVAL;
+	}
+
+	ari = TLVP_VAL(&tp, NM_ATT_GET_ARI);
+	ari_len = TLVP_LEN(&tp, NM_ATT_GET_ARI);
+	/* Attributes Response Info has peculiar structure - first the number of unreported attributes */
+	unreported = ari[0];
+	DEBUGP(DNM, "Found Get Attributes Response Info: %u bytes total with %u unreported attributes\n",
+	       ari_len, unreported);
+
+	/* than the list of unreported attributes */
+	for (i = 0; i < unreported; i++)
+		LOGP(DNM, LOGL_ERROR, "Attribute %s is unreported\n",   /* +1 because we have to account for number of */
+		     get_value_string(abis_nm_att_names, ari[i + 1])); /*  unreported attributes, prefixing the list. */
+
+	/* after that there's finally list of replies in form of sw-conf structure:
+	   it starts right after the list of unreported attributes + space for length of that list */
+	rc = abis_nm_get_sw_conf(ari + unreported + 1, ari_len - (unreported + 2), &sw_descr[0], ARRAY_SIZE(sw_descr));
+	if (rc > 0) {
+		for (i = 0; i < rc; i++) {
+			if (!handle_attr(bts, str2btsattr((const char *)sw_descr[i].file_id), sw_descr[i].file_version,
+					 sw_descr[i].file_version_len))
+				LOGP(DNM, LOGL_NOTICE, "ARI reported sw[%d/%d]: %s is %s\n",
+				     i, rc, sw_descr[i].file_id, sw_descr[i].file_version);
+		}
+	} else
+		LOGP(DNM, LOGL_ERROR, "Failed to parse SW-Config part of Get Attribute Response Info: %s\n",
+		     strerror(-rc));
+
+	return 0;
+}
+
 /* 3GPP TS 52.021 §6.2.5 */
 static int abis_nm_rx_sw_act_req(struct msgb *mb)
 {
@@ -651,6 +719,9 @@
 		break;
 	case NM_MT_SET_BTS_ATTR_ACK:
 		break;
+	case NM_MT_GET_ATTR_RESP:
+		ret = abis_nm_rx_get_attr_resp(mb, bts);
+		break;
 	default:
 		abis_nm_debugp_foh(DNM, foh);
 		LOGPC(DNM, LOGL_ERROR, "Unhandled message %s\n",
