diff --git a/libmobile.c b/libmobile.c
index eb35498b318f50fdbc5facb9ac3d4a2e0eb48a5e..1652c23eb14f8a46c81d02dcb566fea159317974 100644
--- a/libmobile.c
+++ b/libmobile.c
@@ -2,19 +2,14 @@
 
 static char *zte = "usb0";
 static char *hilink = "eth5";
-static char *software_version = "22.200.05.00.1080";
 
 // check other libraries to maintain similar structure, libwifi, libethernet, libdsl
 struct json_object *mobile_set_pin(struct dongle dev, char *current_pin, char *new_pin)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_set_pin_zte(dev.ip, current_pin, new_pin);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_set_pin_hilink_huawei(current_pin, new_pin);
-		else
-			return mobile_set_pin_hilink_tre(current_pin, new_pin);
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_set_pin_hilink(current_pin, new_pin);
 
 	return NULL;
 }
@@ -23,12 +18,8 @@ struct json_object *mobile_disable_pin(struct dongle dev, char *pin)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_disable_pin_zte(dev.ip, pin);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_disable_pin_hilink_huawei(pin);
-		else
-			return mobile_disable_pin_hilink_tre(pin);
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_disable_pin_hilink(pin);
 
 	return NULL;
 }
@@ -37,12 +28,8 @@ struct json_object *mobile_verify_pin(struct dongle dev, char *pin)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_verify_pin_zte(dev.ip, pin);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_set_pin_hilinki_huawei(pin, pin);
-		else
-			return mobile_set_pin_hilink_tre(pin, pin);
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_set_pin_hilink(pin, pin);
 
 	return NULL;
 }
@@ -51,12 +38,8 @@ struct json_object *mobile_enable_pin(struct dongle dev, char *pin)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_enable_pin_zte(dev.ip, pin);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_enable_pin_hilink_huawei(pin);
-		else
-			return mobile_enable_pin_hilink_tre(pin);
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_enable_pin_hilink(pin);
 
 	return NULL;
 }
@@ -65,12 +48,8 @@ struct json_object *mobile_get_remaining_tries(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_get_remaining_tries_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_get_remaining_tries_hilink_huawei();
-		else
-			return mobile_get_remaining_tries_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_get_remaining_tries_hilink();
 
 	return NULL;
 }
@@ -79,12 +58,8 @@ struct json_object *mobile_unlock_sim(struct dongle dev, char *pin, char *puk)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_unlock_sim_zte(dev.ip, pin, puk);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_unlock_sim_hilink_huawei(pin, puk);
-		else
-			return mobile_unlock_sim_hilink_tre(pin, puk);
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_unlock_sim_hilink(pin, puk);
 
 	return NULL;
 }
@@ -93,12 +68,8 @@ struct json_object *mobile_get_apn_profiles(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_get_apn_profiles_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_get_apn_profiles_hilink_huawei();
-		else
-			return mobile_get_apn_profiles_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_get_apn_profiles_hilink();
 
 	return NULL;
 }
@@ -107,12 +78,8 @@ struct json_object *mobile_delete_apn_profile(struct dongle dev, char *name)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_delete_apn_profile_zte(dev.ip, name);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_delete_apn_profile_hilink_huawei(0);
-		else
-			return mobile_delete_apn_profile_hilink_zte(0);
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_delete_apn_profile_hilink(0);
 
 	return NULL;
 }
@@ -121,12 +88,8 @@ struct json_object *mobile_set_apn_profile(struct dongle dev, char *name)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_set_apn_profile_zte(dev.ip, name);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_set_apn_profile_hilink_huawei(name, name, name, name);
-		else
-			return mobile_set_apn_profile_hilink_tre(name, name, name, name);
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_set_apn_profile_hilink(name, name, name, name);
 
 	return NULL;
 }
@@ -135,12 +98,8 @@ struct json_object *mobile_create_apn_profile(struct dongle dev, char *profile_n
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_create_apn_profile_zte(dev.ip, profile_name, wan_apn, pdp_type);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_create_apn_profile_hilink_huawei(profile_name, profile_name, profile_name, profile_name);
-		else
-			return mobile_create_apn_profile_hilink_tre(profile_name, profile_name, profile_name, profile_name);
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_create_apn_profile_hilink(profile_name, profile_name, profile_name, profile_name);
 
 	return NULL;
 }
@@ -149,12 +108,8 @@ struct json_object *mobile_get_current_apn(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_get_current_apn_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_get_current_apn_hilink_huawei();
-		else
-			return mobile_get_current_apn_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_get_current_apn_hilink();
 
 	return NULL;
 }
@@ -163,12 +118,8 @@ struct json_object *mobile_get_rssi(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_get_rssi_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_get_signal_strength_hilink_huawei();
-		else
-			return mobile_get_signal_strength_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_get_signal_strength_hilink();
 
 	return NULL;
 }
@@ -177,12 +128,8 @@ struct json_object *mobile_connect_network(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_connect_network_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_connect_network_hilink_huawei();
-		else
-			return mobile_connect_network_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_connect_network_hilink();
 
 	return NULL;
 }
@@ -191,12 +138,8 @@ struct json_object *mobile_disconnect_network(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_disconnect_network_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_disconnect_network_hilink_huawei();
-		else
-			return mobile_disconnect_network_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_disconnect_network_hilink();
 
 	return NULL;
 }
@@ -205,12 +148,8 @@ struct json_object *mobile_get_modem_state(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_get_modem_state_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_get_provider_hilink_huawei();
-		else
-			return mobile_get_provider_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_get_provider_hilink();
 
 	return NULL;
 }
@@ -219,12 +158,8 @@ struct json_object *mobile_enable_roaming(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_enable_roaming_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_enable_roaming_hilink_huawei();
-		else
-			return mobile_enable_roaming_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_enable_roaming_hilink();
 
 	return NULL;
 }
@@ -233,12 +168,8 @@ struct json_object *mobile_disable_roaming(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_disable_roaming_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_disable_roaming_hilink_huawei();
-		else
-			return mobile_disable_roaming_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_disable_roaming_hilink();
 
 	return NULL;
 }
@@ -247,12 +178,8 @@ struct json_object *mobile_get_roam_status(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_get_roam_status_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_get_roam_status_hilink_huawei();
-		else
-			return mobile_get_roam_status_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_get_roam_status_hilink();
 
 	return NULL;
 }
@@ -261,12 +188,8 @@ struct json_object *mobile_get_pin_status(struct dongle dev)
 {
 	if (strcmp(dev.if_name, zte) == 0)
 		return mobile_get_pin_status_zte(dev.ip);
-	else if (strcmp(dev.if_name, hilink) == 0) {
-		if (strcmp(dev.software_version, software_version) == 0)
-			return mobile_get_pin_status_hilink_huawei();
-		else
-			return mobile_get_pin_status_hilink_tre();
-	}
+	else if (strcmp(dev.if_name, hilink) == 0)
+		return mobile_get_pin_status_hilink();
 
 	return NULL;
 }