diff --git a/openbsc/src/libbsc/bts_nokia_site.c b/openbsc/src/libbsc/bts_nokia_site.c
index 281e8ce..6d14bdd 100644
--- a/openbsc/src/libbsc/bts_nokia_site.c
+++ b/openbsc/src/libbsc/bts_nokia_site.c
@@ -194,482 +194,253 @@
 
 /* TODO: put in a separate file ? */
 
-static char *get_msg_type_name_string(uint8_t msg_type)
+static const struct value_string nokia_msgt_name[] = {
+	{ 0x80, "NOKIA_BTS_CONF_DATA" },
+	{ 0x81, "NOKIA_BTS_ACK" },
+	{ 0x82, "NOKIA_BTS_OMU_STARTED" },
+	{ 0x83, "NOKIA_BTS_START_DOWNLOAD_REQ" },
+	{ 0x84, "NOKIA_BTS_MF_REQ" },
+	{ 0x85, "NOKIA_BTS_AF_REQ" },
+	{ 0x86, "NOKIA_BTS_RESET_REQ" },
+	{ 0x87, "NOKIA_reserved" },
+	{ 0x88, "NOKIA_BTS_CONF_REQ" },
+	{ 0x89, "NOKIA_BTS_TEST_REQ" },
+	{ 0x8A, "NOKIA_BTS_TEST_REPORT" },
+	{ 0x8B, "NOKIA_reserved" },
+	{ 0x8C, "NOKIA_reserved" },
+	{ 0x8D, "NOKIA_reserved" },
+	{ 0x8E, "NOKIA_BTS_CONF_COMPL" },
+	{ 0x8F, "NOKIA_reserved" },
+	{ 0x90, "NOKIA_BTS_STM_TEST_REQ" },
+	{ 0x91, "NOKIA_BTS_STM_TEST_REPORT" },
+	{ 0x92, "NOKIA_BTS_TRANSMISSION_COMMAND" },
+	{ 0x93, "NOKIA_BTS_TRANSMISSION_ANSWER" },
+	{ 0x94, "NOKIA_BTS_HW_DB_UPLOAD_REQ" },
+	{ 0x95, "NOKIA_BTS_START_HW_DB_DOWNLOAD_REQ" },
+	{ 0x96, "NOKIA_BTS_HW_DB_SAVE_REQ" },
+	{ 0x97, "NOKIA_BTS_FLASH_ERASURE_REQ" },
+	{ 0x98, "NOKIA_BTS_HW_DB_DOWNLOAD_REQ" },
+	{ 0x99, "NOKIA_BTS_PWR_SUPPLY_CONTROL" },
+	{ 0x9A, "NOKIA_BTS_ATTRIBUTE_REQ" },
+	{ 0x9B, "NOKIA_BTS_ATTRIBUTE_REPORT" },
+	{ 0x9C, "NOKIA_BTS_HW_REQ" },
+	{ 0x9D, "NOKIA_BTS_HW_REPORT" },
+	{ 0x9E, "NOKIA_BTS_RTE_TEST_REQ" },
+	{ 0x9F, "NOKIA_BTS_RTE_TEST_REPORT" },
+	{ 0xA0, "NOKIA_BTS_HW_DB_VERIFICATION_REQ" },
+	{ 0xA1, "NOKIA_BTS_CLOCK_REQ" },
+	{ 0xA2, "NOKIA_AC_CIRCUIT_REQ_NACK" },
+	{ 0xA3, "NOKIA_AC_INTERRUPTED" },
+	{ 0xA4, "NOKIA_BTS_NEW_TRE_INFO" },
+	{ 0xA5, "NOKIA_AC_BSC_CIRCUITS_ALLOCATED" },
+	{ 0xA6, "NOKIA_BTS_TRE_POLL_LIST" },
+	{ 0xA7, "NOKIA_AC_CIRCUIT_REQ" },
+	{ 0xA8, "NOKIA_BTS_BLOCK_CTRL_REQ" },
+	{ 0xA9, "NOKIA_BTS_GSM_TIME_REQ" },
+	{ 0xAA, "NOKIA_BTS_GSM_TIME" },
+	{ 0xAB, "NOKIA_BTS_OUTPUT_CONTROL" },
+	{ 0xAC, "NOKIA_BTS_STATE_CHANGED" },
+	{ 0xAD, "NOKIA_BTS_SW_SAVE_REQ" },
+	{ 0xAE, "NOKIA_BTS_ALARM" },
+	{ 0xAF, "NOKIA_BTS_CHA_ADM_STATE" },
+	{ 0xB0, "NOKIA_AC_POOL_SIZE_REPORT" },
+	{ 0xB1, "NOKIA_AC_POOL_SIZE_INQUIRY" },
+	{ 0xB2, "NOKIA_BTS_COMMISS_TEST_COMPLETED" },
+	{ 0xB3, "NOKIA_BTS_COMMISS_TEST_REQ" },
+	{ 0xB4, "NOKIA_BTS_TRANSP_BTS_TO_BSC" },
+	{ 0xB5, "NOKIA_BTS_TRANSP_BSC_TO_BTS" },
+	{ 0xB6, "NOKIA_BTS_LCS_COMMAND" },
+	{ 0xB7, "NOKIA_BTS_LCS_ANSWER" },
+	{ 0xB8, "NOKIA_BTS_LMU_FN_OFFSET_COMMAND" },
+	{ 0xB9, "NOKIA_BTS_LMU_FN_OFFSET_ANSWER" },
+	{ 0, NULL }
+};
+
+static const char *get_msg_type_name_string(uint8_t msg_type)
 {
-	switch (msg_type) {
-	case 0x80:
-		return "NOKIA_BTS_CONF_DATA";
-	case 0x81:
-		return "NOKIA_BTS_ACK";
-	case 0x82:
-		return "NOKIA_BTS_OMU_STARTED";
-	case 0x83:
-		return "NOKIA_BTS_START_DOWNLOAD_REQ";
-	case 0x84:
-		return "NOKIA_BTS_MF_REQ";
-	case 0x85:
-		return "NOKIA_BTS_AF_REQ";
-	case 0x86:
-		return "NOKIA_BTS_RESET_REQ";
-	case 0x87:
-		return "NOKIA_reserved";
-	case 0x88:
-		return "NOKIA_BTS_CONF_REQ";
-	case 0x89:
-		return "NOKIA_BTS_TEST_REQ";
-	case 0x8A:
-		return "NOKIA_BTS_TEST_REPORT";
-	case 0x8B:
-		return "NOKIA_reserved";
-	case 0x8C:
-		return "NOKIA_reserved";
-	case 0x8D:
-		return "NOKIA_reserved";
-	case 0x8E:
-		return "NOKIA_BTS_CONF_COMPL";
-	case 0x8F:
-		return "NOKIA_reserved";
-	case 0x90:
-		return "NOKIA_BTS_STM_TEST_REQ";
-	case 0x91:
-		return "NOKIA_BTS_STM_TEST_REPORT";
-	case 0x92:
-		return "NOKIA_BTS_TRANSMISSION_COMMAND";
-	case 0x93:
-		return "NOKIA_BTS_TRANSMISSION_ANSWER";
-	case 0x94:
-		return "NOKIA_BTS_HW_DB_UPLOAD_REQ";
-	case 0x95:
-		return "NOKIA_BTS_START_HW_DB_DOWNLOAD_REQ";
-	case 0x96:
-		return "NOKIA_BTS_HW_DB_SAVE_REQ";
-	case 0x97:
-		return "NOKIA_BTS_FLASH_ERASURE_REQ";
-	case 0x98:
-		return "NOKIA_BTS_HW_DB_DOWNLOAD_REQ";
-	case 0x99:
-		return "NOKIA_BTS_PWR_SUPPLY_CONTROL";
-	case 0x9A:
-		return "NOKIA_BTS_ATTRIBUTE_REQ";
-	case 0x9B:
-		return "NOKIA_BTS_ATTRIBUTE_REPORT";
-	case 0x9C:
-		return "NOKIA_BTS_HW_REQ";
-	case 0x9D:
-		return "NOKIA_BTS_HW_REPORT";
-	case 0x9E:
-		return "NOKIA_BTS_RTE_TEST_REQ";
-	case 0x9F:
-		return "NOKIA_BTS_RTE_TEST_REPORT";
-	case 0xA0:
-		return "NOKIA_BTS_HW_DB_VERIFICATION_REQ";
-	case 0xA1:
-		return "NOKIA_BTS_CLOCK_REQ";
-	case 0xA2:
-		return "NOKIA_AC_CIRCUIT_REQ_NACK";
-	case 0xA3:
-		return "NOKIA_AC_INTERRUPTED";
-	case 0xA4:
-		return "NOKIA_BTS_NEW_TRE_INFO";
-	case 0xA5:
-		return "NOKIA_AC_BSC_CIRCUITS_ALLOCATED";
-	case 0xA6:
-		return "NOKIA_BTS_TRE_POLL_LIST";
-	case 0xA7:
-		return "NOKIA_AC_CIRCUIT_REQ";
-	case 0xA8:
-		return "NOKIA_BTS_BLOCK_CTRL_REQ";
-	case 0xA9:
-		return "NOKIA_BTS_GSM_TIME_REQ";
-	case 0xAA:
-		return "NOKIA_BTS_GSM_TIME";
-	case 0xAB:
-		return "NOKIA_BTS_OUTPUT_CONTROL";
-	case 0xAC:
-		return "NOKIA_BTS_STATE_CHANGED";
-	case 0xAD:
-		return "NOKIA_BTS_SW_SAVE_REQ";
-	case 0xAE:
-		return "NOKIA_BTS_ALARM";
-	case 0xAF:
-		return "NOKIA_BTS_CHA_ADM_STATE";
-	case 0xB0:
-		return "NOKIA_AC_POOL_SIZE_REPORT";
-	case 0xB1:
-		return "NOKIA_AC_POOL_SIZE_INQUIRY";
-	case 0xB2:
-		return "NOKIA_BTS_COMMISS_TEST_COMPLETED";
-	case 0xB3:
-		return "NOKIA_BTS_COMMISS_TEST_REQ";
-	case 0xB4:
-		return "NOKIA_BTS_TRANSP_BTS_TO_BSC";
-	case 0xB5:
-		return "NOKIA_BTS_TRANSP_BSC_TO_BTS";
-	case 0xB6:
-		return "NOKIA_BTS_LCS_COMMAND";
-	case 0xB7:
-		return "NOKIA_BTS_LCS_ANSWER";
-	case 0xB8:
-		return "NOKIA_BTS_LMU_FN_OFFSET_COMMAND";
-	case 0xB9:
-		return "NOKIA_BTS_LMU_FN_OFFSET_ANSWER";
-	default:
-		return "unknown";
-	}
+	return get_value_string(nokia_msgt_name, msg_type);
 }
 
-static char *get_element_name_string(uint16_t element)
+static const struct value_string nokia_element_name[] = {
+	{ 0x01, "Ny1" },
+	{ 0x02, "T3105_F" },
+	{ 0x03, "Interference band limits" },
+	{ 0x04, "Interference report timer in secs" },
+	{ 0x05, "Channel configuration per TS" },
+	{ 0x06, "BSIC" },
+	{ 0x07, "RACH report timer in secs" },
+	{ 0x08, "Hardware database status" },
+	{ 0x09, "BTS RX level" },
+	{ 0x0A, "ARFN" },
+	{ 0x0B, "STM antenna attenuation" },
+	{ 0x0C, "Cell allocation bitmap" },
+	{ 0x0D, "Radio definition per TS" },
+	{ 0x0E, "Frame number" },
+	{ 0x0F, "Antenna diversity" },
+	{ 0x10, "T3105_D" },
+	{ 0x11, "File format" },
+	{ 0x12, "Last File" },
+	{ 0x13, "BTS type" },
+	{ 0x14, "Erasure mode" },
+	{ 0x15, "Hopping mode" },
+	{ 0x16, "Floating TRX" },
+	{ 0x17, "Power supplies" },
+	{ 0x18, "Reset type" },
+	{ 0x19, "Averaging period" },
+	{ 0x1A, "RBER2" },
+	{ 0x1B, "LAC" },
+	{ 0x1C, "CI" },
+	{ 0x1D, "Failure parameters" },
+	{ 0x1E, "(RF max power reduction)" },
+	{ 0x1F, "Measured RX_SENS" },
+	{ 0x20, "Extended cell radius" },
+	{ 0x21, "reserved" },
+	{ 0x22, "Success-Failure" },
+	{ 0x23, "Ack-Nack" },
+	{ 0x24, "OMU test results" },
+	{ 0x25, "File identity" },
+	{ 0x26, "Generation and version code" },
+	{ 0x27, "SW description" },
+	{ 0x28, "BCCH LEV" },
+	{ 0x29, "Test type" },
+	{ 0x2A, "Subscriber number" },
+	{ 0x2B, "reserved" },
+	{ 0x2C, "HSN" },
+	{ 0x2D, "reserved" },
+	{ 0x2E, "MS RXLEV" },
+	{ 0x2F, "MS TXLEV" },
+	{ 0x30, "RXQUAL" },
+	{ 0x31, "RX SENS" },
+	{ 0x32, "Alarm block" },
+	{ 0x33, "Neighbouring BCCH levels" },
+	{ 0x34, "STM report type" },
+	{ 0x35, "MA" },
+	{ 0x36, "MAIO" },
+	{ 0x37, "H_FLAG" },
+	{ 0x38, "TCH_ARFN" },
+	{ 0x39, "Clock output" },
+	{ 0x3A, "Transmitted power" },
+	{ 0x3B, "Clock sync" },
+	{ 0x3C, "TMS protocol discriminator" },
+	{ 0x3D, "TMS protocol data" },
+	{ 0x3E, "FER" },
+	{ 0x3F, "SWR result" },
+	{ 0x40, "Object identity" },
+	{ 0x41, "STM RX Antenna Test" },
+	{ 0x42, "reserved" },
+	{ 0x43, "reserved" },
+	{ 0x44, "Object current state" },
+	{ 0x45, "reserved" },
+	{ 0x46, "FU channel configuration" },
+	{ 0x47, "reserved" },
+	{ 0x48, "ARFN of a CU" },
+	{ 0x49, "FU radio definition" },
+	{ 0x4A, "reserved" },
+	{ 0x4B, "Severity" },
+	{ 0x4C, "Diversity selection" },
+	{ 0x4D, "RX antenna test" },
+	{ 0x4E, "RX antenna supervision period" },
+	{ 0x4F, "RX antenna state" },
+	{ 0x50, "Sector configuration" },
+	{ 0x51, "Additional info" },
+	{ 0x52, "SWR parameters" },
+	{ 0x53, "HW inquiry mode" },
+	{ 0x54, "reserved" },
+	{ 0x55, "Availability status" },
+	{ 0x56, "reserved" },
+	{ 0x57, "EAC inputs" },
+	{ 0x58, "EAC outputs" },
+	{ 0x59, "reserved" },
+	{ 0x5A, "Position" },
+	{ 0x5B, "HW unit identity" },
+	{ 0x5C, "RF test signal attenuation" },
+	{ 0x5D, "Operational state" },
+	{ 0x5E, "Logical object identity" },
+	{ 0x5F, "reserved" },
+	{ 0x60, "BS_TXPWR_OM" },
+	{ 0x61, "Loop_Duration" },
+	{ 0x62, "LNA_Path_Selection" },
+	{ 0x63, "Serial number" },
+	{ 0x64, "HW version" },
+	{ 0x65, "Obj. identity and obj. state" },
+	{ 0x66, "reserved" },
+	{ 0x67, "EAC input definition" },
+	{ 0x68, "EAC id and text" },
+	{ 0x69, "HW unit status" },
+	{ 0x6A, "SW release version" },
+	{ 0x6B, "FW version" },
+	{ 0x6C, "Bit_Error_Ratio" },
+	{ 0x6D, "RXLEV_with_Attenuation" },
+	{ 0x6E, "RXLEV_without_Attenuation" },
+	{ 0x6F, "reserved" },
+	{ 0x70, "CU_Results" },
+	{ 0x71, "reserved" },
+	{ 0x72, "LNA_Path_Results" },
+	{ 0x73, "RTE Results" },
+	{ 0x74, "Real Time" },
+	{ 0x75, "RX diversity selection" },
+	{ 0x76, "EAC input config" },
+	{ 0x77, "Feature support" },
+	{ 0x78, "File version" },
+	{ 0x79, "Outputs" },
+	{ 0x7A, "FU parameters" },
+	{ 0x7B, "Diagnostic info" },
+	{ 0x7C, "FU BSIC" },
+	{ 0x7D, "TRX Configuration" },
+	{ 0x7E, "Download status" },
+	{ 0x7F, "RX difference limit" },
+	{ 0x80, "TRX HW capability" },
+	{ 0x81, "Common HW config" },
+	{ 0x82, "Autoconfiguration pool size" },
+	{ 0x83, "TRE diagnostic info" },
+	{ 0x84, "TRE object identity" },
+	{ 0x85, "New TRE Info" },
+	{ 0x86, "Acknowledgement period" },
+	{ 0x87, "Synchronization mode" },
+	{ 0x88, "reserved" },
+	{ 0x89, "Block Control Data" },
+	{ 0x8A, "SW load mode" },
+	{ 0x8B, "Recommended recovery action" },
+	{ 0x8C, "BSC BCF id" },
+	{ 0x8D, "Q1 baud rate" },
+	{ 0x8E, "Allocation status" },
+	{ 0x8F, "Functional entity number" },
+	{ 0x90, "Transmission delay" },
+	{ 0x91, "Loop Duration ms" },
+	{ 0x92, "Logical channel" },
+	{ 0x93, "Q1 address" },
+	{ 0x94, "Alarm detail" },
+	{ 0x95, "Cabinet type" },
+	{ 0x96, "HW unit existence" },
+	{ 0x97, "RF power parameters" },
+	{ 0x98, "Message scenario" },
+	{ 0x99, "HW unit max amount" },
+	{ 0x9A, "Master TRX" },
+	{ 0x9B, "Transparent data" },
+	{ 0x9C, "BSC topology info" },
+	{ 0x9D, "Air i/f modulation" },
+	{ 0x9E, "LCS Q1 command data" },
+	{ 0x9F, "Frame number offset" },
+	{ 0xA0, "Abis TSL" },
+	{ 0xA1, "Dynamic pool info" },
+	{ 0xA2, "LCS LLP data" },
+	{ 0xA3, "LCS Q1 answer data" },
+	{ 0xA4, "DFCA FU Radio Definition" },
+	{ 0xA5, "Antenna hopping" },
+	{ 0xA6, "Field record sequence number" },
+	{ 0xA7, "Timeslot offslot" },
+	{ 0xA8, "EPCR capability" },
+	{ 0xA9, "Connectsite optional element" },
+	{ 0xAA, "TSC" },
+	{ 0xAB, "Special TX Power Setting" },
+	{ 0xAC, "Optional sync settings" },
+	{ 0xFA, "Abis If parameters" },
+	{ 0, NULL }
+};
+
+static const char *get_element_name_string(uint16_t element)
 {
-	switch (element) {
-	case 0x01:
-		return "Ny1";
-	case 0x02:
-		return "T3105_F";
-	case 0x03:
-		return "Interference band limits";
-	case 0x04:
-		return "Interference report timer in secs";
-	case 0x05:
-		return "Channel configuration per TS";
-	case 0x06:
-		return "BSIC";
-	case 0x07:
-		return "RACH report timer in secs";
-	case 0x08:
-		return "Hardware database status";
-	case 0x09:
-		return "BTS RX level";
-	case 0x0A:
-		return "ARFN";
-	case 0x0B:
-		return "STM antenna attenuation";
-	case 0x0C:
-		return "Cell allocation bitmap";
-	case 0x0D:
-		return "Radio definition per TS";
-	case 0x0E:
-		return "Frame number";
-	case 0x0F:
-		return "Antenna diversity";
-	case 0x10:
-		return "T3105_D";
-	case 0x11:
-		return "File format";
-	case 0x12:
-		return "Last File";
-	case 0x13:
-		return "BTS type";
-	case 0x14:
-		return "Erasure mode";
-	case 0x15:
-		return "Hopping mode";
-	case 0x16:
-		return "Floating TRX";
-	case 0x17:
-		return "Power supplies";
-	case 0x18:
-		return "Reset type";
-	case 0x19:
-		return "Averaging period";
-	case 0x1A:
-		return "RBER2";
-	case 0x1B:
-		return "LAC";
-	case 0x1C:
-		return "CI";
-	case 0x1D:
-		return "Failure parameters";
-	case 0x1E:
-		return "(RF max power reduction)";
-	case 0x1F:
-		return "Measured RX_SENS";
-	case 0x20:
-		return "Extended cell radius";
-	case 0x21:
-		return "reserved";
-	case 0x22:
-		return "Success-Failure";
-	case 0x23:
-		return "Ack-Nack";
-	case 0x24:
-		return "OMU test results";
-	case 0x25:
-		return "File identity";
-	case 0x26:
-		return "Generation and version code";
-	case 0x27:
-		return "SW description";
-	case 0x28:
-		return "BCCH LEV";
-	case 0x29:
-		return "Test type";
-	case 0x2A:
-		return "Subscriber number";
-	case 0x2B:
-		return "reserved";
-	case 0x2C:
-		return "HSN";
-	case 0x2D:
-		return "reserved";
-	case 0x2E:
-		return "MS RXLEV";
-	case 0x2F:
-		return "MS TXLEV";
-	case 0x30:
-		return "RXQUAL";
-	case 0x31:
-		return "RX SENS";
-	case 0x32:
-		return "Alarm block";
-	case 0x33:
-		return "Neighbouring BCCH levels";
-	case 0x34:
-		return "STM report type";
-	case 0x35:
-		return "MA";
-	case 0x36:
-		return "MAIO";
-	case 0x37:
-		return "H_FLAG";
-	case 0x38:
-		return "TCH_ARFN";
-	case 0x39:
-		return "Clock output";
-	case 0x3A:
-		return "Transmitted power";
-	case 0x3B:
-		return "Clock sync";
-	case 0x3C:
-		return "TMS protocol discriminator";
-	case 0x3D:
-		return "TMS protocol data";
-	case 0x3E:
-		return "FER";
-	case 0x3F:
-		return "SWR result";
-	case 0x40:
-		return "Object identity";
-	case 0x41:
-		return "STM RX Antenna Test";
-	case 0x42:
-		return "reserved";
-	case 0x43:
-		return "reserved";
-	case 0x44:
-		return "Object current state";
-	case 0x45:
-		return "reserved";
-	case 0x46:
-		return "FU channel configuration";
-	case 0x47:
-		return "reserved";
-	case 0x48:
-		return "ARFN of a CU";
-	case 0x49:
-		return "FU radio definition";
-	case 0x4A:
-		return "reserved";
-	case 0x4B:
-		return "Severity";
-	case 0x4C:
-		return "Diversity selection";
-	case 0x4D:
-		return "RX antenna test";
-	case 0x4E:
-		return "RX antenna supervision period";
-	case 0x4F:
-		return "RX antenna state";
-	case 0x50:
-		return "Sector configuration";
-	case 0x51:
-		return "Additional info";
-	case 0x52:
-		return "SWR parameters";
-	case 0x53:
-		return "HW inquiry mode";
-	case 0x54:
-		return "reserved";
-	case 0x55:
-		return "Availability status";
-	case 0x56:
-		return "reserved";
-	case 0x57:
-		return "EAC inputs";
-	case 0x58:
-		return "EAC outputs";
-	case 0x59:
-		return "reserved";
-	case 0x5A:
-		return "Position";
-	case 0x5B:
-		return "HW unit identity";
-	case 0x5C:
-		return "RF test signal attenuation";
-	case 0x5D:
-		return "Operational state";
-	case 0x5E:
-		return "Logical object identity";
-	case 0x5F:
-		return "reserved";
-	case 0x60:
-		return "BS_TXPWR_OM";
-	case 0x61:
-		return "Loop_Duration";
-	case 0x62:
-		return "LNA_Path_Selection";
-	case 0x63:
-		return "Serial number";
-	case 0x64:
-		return "HW version";
-	case 0x65:
-		return "Obj. identity and obj. state";
-	case 0x66:
-		return "reserved";
-	case 0x67:
-		return "EAC input definition";
-	case 0x68:
-		return "EAC id and text";
-	case 0x69:
-		return "HW unit status";
-	case 0x6A:
-		return "SW release version";
-	case 0x6B:
-		return "FW version";
-	case 0x6C:
-		return "Bit_Error_Ratio";
-	case 0x6D:
-		return "RXLEV_with_Attenuation";
-	case 0x6E:
-		return "RXLEV_without_Attenuation";
-	case 0x6F:
-		return "reserved";
-	case 0x70:
-		return "CU_Results";
-	case 0x71:
-		return "reserved";
-	case 0x72:
-		return "LNA_Path_Results";
-	case 0x73:
-		return "RTE Results";
-	case 0x74:
-		return "Real Time";
-	case 0x75:
-		return "RX diversity selection";
-	case 0x76:
-		return "EAC input config";
-	case 0x77:
-		return "Feature support";
-	case 0x78:
-		return "File version";
-	case 0x79:
-		return "Outputs";
-	case 0x7A:
-		return "FU parameters";
-	case 0x7B:
-		return "Diagnostic info";
-	case 0x7C:
-		return "FU BSIC";
-	case 0x7D:
-		return "TRX Configuration";
-	case 0x7E:
-		return "Download status";
-	case 0x7F:
-		return "RX difference limit";
-	case 0x80:
-		return "TRX HW capability";
-	case 0x81:
-		return "Common HW config";
-	case 0x82:
-		return "Autoconfiguration pool size";
-	case 0x83:
-		return "TRE diagnostic info";
-	case 0x84:
-		return "TRE object identity";
-	case 0x85:
-		return "New TRE Info";
-	case 0x86:
-		return "Acknowledgement period";
-	case 0x87:
-		return "Synchronization mode";
-	case 0x88:
-		return "reserved";
-	case 0x89:
-		return "Block Control Data";
-	case 0x8A:
-		return "SW load mode";
-	case 0x8B:
-		return "Recommended recovery action";
-	case 0x8C:
-		return "BSC BCF id";
-	case 0x8D:
-		return "Q1 baud rate";
-	case 0x8E:
-		return "Allocation status";
-	case 0x8F:
-		return "Functional entity number";
-	case 0x90:
-		return "Transmission delay";
-	case 0x91:
-		return "Loop Duration ms";
-	case 0x92:
-		return "Logical channel";
-	case 0x93:
-		return "Q1 address";
-	case 0x94:
-		return "Alarm detail";
-	case 0x95:
-		return "Cabinet type";
-	case 0x96:
-		return "HW unit existence";
-	case 0x97:
-		return "RF power parameters";
-	case 0x98:
-		return "Message scenario";
-	case 0x99:
-		return "HW unit max amount";
-	case 0x9A:
-		return "Master TRX";
-	case 0x9B:
-		return "Transparent data";
-	case 0x9C:
-		return "BSC topology info";
-	case 0x9D:
-		return "Air i/f modulation";
-	case 0x9E:
-		return "LCS Q1 command data";
-	case 0x9F:
-		return "Frame number offset";
-	case 0xA0:
-		return "Abis TSL";
-	case 0xA1:
-		return "Dynamic pool info";
-	case 0xA2:
-		return "LCS LLP data";
-	case 0xA3:
-		return "LCS Q1 answer data";
-	case 0xA4:
-		return "DFCA FU Radio Definition";
-	case 0xA5:
-		return "Antenna hopping";
-	case 0xA6:
-		return "Field record sequence number";
-	case 0xA7:
-		return "Timeslot offslot";
-	case 0xA8:
-		return "EPCR capability";
-	case 0xA9:
-		return "Connectsite optional element";
-	case 0xAA:
-		return "TSC";
-	case 0xAB:
-		return "Special TX Power Setting";
-	case 0xAC:
-		return "Optional sync settings";
-	case 0xFA:
-		return "Abis If parameters";
-	default:
-		return "unknown";
-	}
+	return get_value_string(nokia_element_name, element);
 }
 
 static const struct value_string nokia_bts_types[] = {
