diff --git a/src/cmdu.c b/src/cmdu.c
index 01f6eb4b96df1fbd3b23dc22dced1f378e9218f8..c3241cf7b55a0cae0c71074ec8da79e20df6758e 100644
--- a/src/cmdu.c
+++ b/src/cmdu.c
@@ -24,6 +24,64 @@
 #include "cmdu.h"
 
 
+const char *cmdu_type2str(uint16_t type)
+{
+
+#define T2STR(t)	case CMDU_TYPE_ ## t: return #t;
+
+	switch (type) {
+	T2STR(TOPOLOGY_DISCOVERY)
+	T2STR(TOPOLOGY_NOTIFICATION)
+	T2STR(TOPOLOGY_QUERY)
+	T2STR(TOPOLOGY_RESPONSE)
+	T2STR(VENDOR_SPECIFIC)
+	T2STR(LINK_METRIC_QUERY)
+	T2STR(LINK_METRIC_RESPONSE)
+	T2STR(AP_AUTOCONFIGURATION_SEARCH)
+	T2STR(AP_AUTOCONFIGURATION_RESPONSE)
+	T2STR(AP_AUTOCONFIGURATION_WSC)
+	T2STR(AP_AUTOCONFIGURATION_RENEW)
+	T2STR(PUSH_BUTTON_EVENT_NOTIFICATION)
+	T2STR(PUSH_BUTTON_JOIN_NOTIFICATION)
+	T2STR(HIGHER_LAYER_QUERY)
+	T2STR(HIGHER_LAYER_RESPONSE)
+	T2STR(INTERFACE_POWER_CHANGE_REQUEST)
+	T2STR(INTERFACE_POWER_CHANGE_RESPONSE)
+	T2STR(GENERIC_PHY_QUERY)
+	T2STR(GENERIC_PHY_RESPONSE)
+	}
+
+	return "UNKNOWN";
+
+#undef T2STR
+}
+
+const char *tlv_type2str(uint8_t type)
+{
+
+#define T2STR(t)	case TLV_TYPE_ ## t: return #t;
+
+	switch (type) {
+	T2STR(END_OF_MESSAGE)
+	T2STR(AL_MAC_ADDRESS_TYPE)
+	T2STR(DEVICE_INFORMATION_TYPE)
+	T2STR(DEVICE_BRIDGING_CAPABILITIES)
+	T2STR(NON_1905_NEIGHBOR_DEVICE_LIST)
+	T2STR(NEIGHBOR_DEVICE_LIST)
+	T2STR(TRANSMITTER_LINK_METRIC)
+	T2STR(RECEIVER_LINK_METRIC)
+	T2STR(SEARCHED_ROLE)
+	T2STR(AUTOCONFIG_FREQ_BAND)
+	T2STR(SUPPORTED_ROLE)
+	T2STR(SUPPORTED_FREQ_BAND)
+	T2STR(WSC)
+	}
+
+	return "UNKNOWN";
+
+#undef T2STR
+}
+
 struct tlv *tlv_alloc(uint16_t datalen)
 {
 	struct tlv *n = calloc(1, sizeof(*n) + datalen);
diff --git a/src/cmdu.h b/src/cmdu.h
index 00bb6347545f8bf5d27b9b85cc8d282f034381ec..450d01f58742330f431120425a9d614e02f7e7f6 100644
--- a/src/cmdu.h
+++ b/src/cmdu.h
@@ -144,6 +144,8 @@ uint16_t tlv_length(struct tlv *t);
 /** Get total length of a TLV including the header */
 uint16_t tlv_total_length(struct tlv *t);
 
+/** Helper function to stringify TLV type */
+const char *tlv_type2str(uint8_t type);
 
 /* Allocates cmdu_buff to hold 'size' length cmdu payload */
 struct cmdu_buff *cmdu_alloc(int size);		// XXX: internal use
diff --git a/src/extensions/map/map_module.h b/src/extensions/map/map_module.h
index cebc63b23f1d404c3c740d99c905d936a07cda10..dae09d2ea6e782715f8ef1befc22f11baf041324 100644
--- a/src/extensions/map/map_module.h
+++ b/src/extensions/map/map_module.h
@@ -13,5 +13,7 @@ struct map_module {
 
 
 int map_prepare_cmdu_mask(uint8_t mask[], ...);
+const char *map_cmdu_type2str(uint16_t type);
+const char *map_tlv_type2str(uint8_t type);
 
 #endif /* MAP_MODULE_H */
diff --git a/src/extensions/map/maputil.c b/src/extensions/map/maputil.c
index b9dc47c527898e39d6d96e71b75a30ac2fd64eb8..a85e750148b54f5ede4056560c928719e6d9e22a 100644
--- a/src/extensions/map/maputil.c
+++ b/src/extensions/map/maputil.c
@@ -3,10 +3,10 @@
 #include <stdint.h>
 #include <stdarg.h>
 
+#include "1905_tlvs.h"
 #include "map2.h"
 #include "map_module.h"
 
-
 #define cmdu_mask_setbit(m, f)						\
 do {									\
 	if (f >= 0x8000)						\
@@ -15,6 +15,11 @@ do {									\
 		(m[(f) / 8] |= (1 << ((f) % 8)));			\
 } while(0)
 
+
+extern const char *tlv_type2str(uint8_t type);	//FIXME
+extern const char *cmdu_type2str(uint16_t type);
+
+
 int map_prepare_cmdu_mask(uint8_t mask[], ...)
 {
 	va_list args;
@@ -32,3 +37,137 @@ int map_prepare_cmdu_mask(uint8_t mask[], ...)
 	va_end(args);
 	return 0;
 }
+
+const char *map_cmdu_type2str(uint16_t type)
+{
+	if (type >= CMDU_TYPE_1905_START && type <= CMDU_TYPE_1905_END)
+		return cmdu_type2str(type);
+
+#define T2STR(t)	case CMDU_ ## t: return #t;
+
+	switch (type) {
+	T2STR(1905_ACK)
+	T2STR(AP_CAPABILITY_QUERY)
+	T2STR(AP_CAPABILITY_REPORT)
+	T2STR(POLICY_CONFIG_REQ)
+	T2STR(CHANNEL_PREFERENCE_QUERY)
+	T2STR(CHANNEL_PREFERENCE_REPORT)
+	T2STR(CHANNEL_SELECTION_REQ)
+	T2STR(CHANNEL_SELECTION_RESPONSE)
+	T2STR(OPERATING_CHANNEL_REPORT)
+	T2STR(CLIENT_CAPABILITY_QUERY)
+	T2STR(CLIENT_CAPABILITY_REPORT)
+	T2STR(AP_METRICS_QUERY)
+	T2STR(AP_METRICS_RESPONSE)
+	T2STR(ASSOC_STA_LINK_METRICS_QUERY)
+	T2STR(ASSOC_STA_LINK_METRICS_RESPONSE)
+	T2STR(UNASSOC_STA_LINK_METRIC_QUERY)
+	T2STR(UNASSOC_STA_LINK_METRIC_RESPONSE)
+	T2STR(BEACON_METRICS_QUERY)
+	T2STR(BEACON_METRICS_RESPONSE)
+	T2STR(COMBINED_INFRA_METRICS)
+	T2STR(CLIENT_STEERING_REQUEST)
+	T2STR(CLIENT_STEERING_BTM_REPORT)
+	T2STR(CLIENT_ASSOC_CONTROL_REQUEST)
+	T2STR(STEERING_COMPLETED)
+	T2STR(HIGHER_LAYER_DATA)
+	T2STR(BACKHAUL_STEER_REQUEST)
+	T2STR(BACKHAUL_STEER_RESPONSE)
+	T2STR(CHANNEL_SCAN_REQUEST)
+	T2STR(CHANNEL_SCAN_REPORT)
+	T2STR(CAC_REQUEST)
+	T2STR(CAC_TERMINATION)
+	T2STR(CLIENT_DISASSOCIATION_STATS)
+	T2STR(ERROR_RESPONSE)
+	T2STR(ASSOCIATION_STATUS_NOTIFICATION)
+	T2STR(TUNNELED)
+	T2STR(BACKHAUL_STA_CAPABILITY_QUERY)
+	T2STR(BACKHAUL_STA_CAPABILITY_REPORT)
+	T2STR(FAILED_CONNECTION)
+	}
+
+	return "UNKNOWN";
+
+#undef T2STR
+}
+
+const char *map_tlv_type2str(uint8_t type)
+{
+	if (type >= TLV_TYPE_END_OF_MESSAGE && type <= TLV_TYPE_WSC)
+		return tlv_type2str(type);
+
+#define T2STR(t)	case MAP_TLV_ ## t: return #t;
+
+	switch (type) {
+	T2STR(SUPPORTED_SERVICE)
+	T2STR(SEARCHED_SERVICE)
+	T2STR(AP_RADIO_IDENTIFIER)
+	T2STR(AP_OPERATIONAL_BSS)
+	T2STR(ASSOCIATED_CLIENTS)
+	T2STR(AP_CAPABILITY)
+	T2STR(AP_RADIO_BASIC_CAPABILITIES)
+	T2STR(AP_HT_CAPABILITIES)
+	T2STR(AP_VHT_CAPABILITIES)
+	T2STR(AP_HE_CAPABILITIES)
+	T2STR(STEERING_POLICY)
+	T2STR(METRIC_REPORTING_POLICY)
+	T2STR(CHANNEL_PREFERENCE)
+	T2STR(RADIO_OPERATION_RESTRICTION)
+	T2STR(TRANSMIT_POWER_LIMIT)
+	T2STR(CHANNEL_SELECTION_RESPONSE)
+	T2STR(OPERATING_CHANNEL_REPORT)
+	T2STR(CLIENT_INFO)
+	T2STR(CLIENT_CAPABILITY_REPORT)
+	T2STR(CLIENT_ASSOCIATION_EVENT)
+	T2STR(AP_METRIC_QUERY)
+	T2STR(AP_METRICS)
+	T2STR(STA_MAC_ADDRESS)
+	T2STR(ASSOCIATED_STA_LINK_METRICS)
+	T2STR(UNASSOCIATED_STA_LINK_METRICS_QUERY)
+	T2STR(UNASSOCIATED_STA_LINK_METRICS_RESPONSE)
+	T2STR(BEACON_METRICS_QUERY)
+	T2STR(BEACON_METRICS_RESPONSE)
+	T2STR(STEERING_REQUEST)
+	T2STR(STEERING_BTM_REPORT)
+	T2STR(CLIENT_ASSOCIATION_CONTROL_REQUEST)
+	T2STR(BACKHAUL_STEERING_REQUEST)
+	T2STR(BACKHAUL_STEERING_RESPONSE)
+	T2STR(HIGHER_LAYER_DATA)
+	T2STR(ASSOCIATED_STA_TRAFFIC_STATS)
+	T2STR(ERROR_CODE)
+	T2STR(CHANNEL_SCAN_REPORTING_POLICY)
+	T2STR(CHANNEL_SCAN_CAPABILITY)
+	T2STR(CHANNEL_SCAN_REQ)
+	T2STR(CHANNEL_SCAN_RES)
+	T2STR(TIMESTAMP)
+	T2STR(CAC_REQ)
+	T2STR(CAC_TERMINATION)
+	T2STR(CAC_COMPLETION_REPORT)
+	T2STR(CAC_STATUS_REPORT)
+	T2STR(CAC_CAPABILITY)
+	T2STR(MULTIAP_PROFILE)
+	T2STR(PROFILE2_AP_CAPABILITY)
+	T2STR(DEFAULT_8021Q_SETTINGS)
+	T2STR(TRAFFIC_SEPARATION_POLICY)
+	T2STR(PROFILE2_ERR_CODE)
+	T2STR(AP_RADIO_ADV_CAPABILITY)
+	T2STR(ASSOCIATION_STATUS_NOTIF)
+	T2STR(SOURCE_INFO)
+	T2STR(TUNNELED_MSG_TYPE)
+	T2STR(TUNNELED)
+	T2STR(PROFILE2_STEERING_REQ)
+	T2STR(UNSUCCESS_ASSOCIATION_POLICY)
+	T2STR(METRIC_COLLECTION_INTERVAL)
+	T2STR(RADIO_METRICS)
+	T2STR(AP_EXTENDED_METRICS)
+	T2STR(ASSOCIATED_STA_EXT_LINK_METRICS)
+	T2STR(STATUS_CODE)
+	T2STR(REASON_CODE)
+	T2STR(BACKHAUL_STA_RADIO_CAPABILITY)
+	T2STR(BACKHAUL_BSS_CONFIG)
+	}
+
+	return "UNKNOWN";
+
+#undef T2STR
+}
\ No newline at end of file
diff --git a/src/i1905.c b/src/i1905.c
index 65dd643c7c5ab357dd0808e6e83ac56726323676..d970657796dabdfe7c227ce7eff519ac82f6c521 100644
--- a/src/i1905.c
+++ b/src/i1905.c
@@ -58,37 +58,6 @@ uint8_t MCAST_1905[] = "\x01\x80\xC2\x00\x00\x13";
 uint8_t MCAST_LLDP[] = "\x01\x80\xC2\x00\x00\x0E";
 
 
-const char *cmdu_type2str(uint16_t type)
-{
-
-#define T2STR(t)	case CMDU_TYPE_ ## t: return #t;
-
-	switch (type) {
-	T2STR(TOPOLOGY_DISCOVERY)
-	T2STR(TOPOLOGY_NOTIFICATION)
-	T2STR(TOPOLOGY_QUERY)
-	T2STR(TOPOLOGY_RESPONSE)
-	T2STR(VENDOR_SPECIFIC)
-	T2STR(LINK_METRIC_QUERY)
-	T2STR(LINK_METRIC_RESPONSE)
-	T2STR(AP_AUTOCONFIGURATION_SEARCH)
-	T2STR(AP_AUTOCONFIGURATION_RESPONSE)
-	T2STR(AP_AUTOCONFIGURATION_WSC)
-	T2STR(AP_AUTOCONFIGURATION_RENEW)
-	T2STR(PUSH_BUTTON_EVENT_NOTIFICATION)
-	T2STR(PUSH_BUTTON_JOIN_NOTIFICATION)
-	T2STR(HIGHER_LAYER_QUERY)
-	T2STR(HIGHER_LAYER_RESPONSE)
-	T2STR(INTERFACE_POWER_CHANGE_REQUEST)
-	T2STR(INTERFACE_POWER_CHANGE_RESPONSE)
-	T2STR(GENERIC_PHY_QUERY)
-	T2STR(GENERIC_PHY_RESPONSE)
-	}
-
-	return "UNKNOWN";
-
-#undef T2STR
-}
 
 static int signal_pending;