diff --git a/package/network/utils/comgt/Makefile b/package/network/utils/comgt/Makefile
index 9ab2f14e8caf74551ef2e55c31497251e8517c6f..500365aaabdc62c5b71aae433a2f96a011c46b48 100644
--- a/package/network/utils/comgt/Makefile
+++ b/package/network/utils/comgt/Makefile
@@ -44,7 +44,7 @@ endef
 define Package/comgt-ncm
 $(call Package/comgt/Default)
   TITLE+=NCM 3G/4G Support
-  DEPENDS:=+comgt +kmod-usb-serial +kmod-usb-serial-option +kmod-usb-net +kmod-usb-net-cdc-ncm +kmod-usb-net-huawei-cdc-ncm
+  DEPENDS:=+comgt
 endef
 
 define Package/comgt/description
diff --git a/package/network/utils/comgt/files/ncm.json b/package/network/utils/comgt/files/ncm.json
index b9b15cdba05760d0ba118f63d5f583900743858d..ea4f98485f72782eca0fe2672dfc16531915c69e 100644
--- a/package/network/utils/comgt/files/ncm.json
+++ b/package/network/utils/comgt/files/ncm.json
@@ -19,7 +19,7 @@
 		"connect": "AT^NDISDUP=1,1,\\\"${apn}\\\"${username:+,\\\"$username\\\"}${password:+,\\\"$password\\\"}${auth:+,$auth}",
 		"disconnect": "AT^NDISDUP=1,0"
 	},
-	"SAMSUNG": {
+	"samsung": {
 		"initialize": [
 			"AT",
 			"AT+CGREG=2",
@@ -33,7 +33,7 @@
 		"connect": "AT+CGATT=1",
 		"disconnect": "AT+CGATT=0"
 	},
-	"Sony": {
+	"sony": {
 		"initialize": [
 			"AT+CFUN=1",
 			"AT+CGDCONT=1,\\\"IP\\\",\\\"${apn}\\\"",
diff --git a/package/network/utils/comgt/files/ncm.sh b/package/network/utils/comgt/files/ncm.sh
index 14e421fcadd81036c4dd25dcd6a1f85824f2ba0d..2c2835fe3947485ed48254047bf970797898a822 100644
--- a/package/network/utils/comgt/files/ncm.sh
+++ b/package/network/utils/comgt/files/ncm.sh
@@ -1,8 +1,10 @@
 #!/bin/sh
 
-. /lib/functions.sh
-. ../netifd-proto.sh
-init_proto "$@"
+[ -n "$INCLUDE_ONLY" ] || {
+	. /lib/functions.sh
+	. ../netifd-proto.sh
+	init_proto "$@"
+}
 
 proto_ncm_init_config() {
 	no_device=1
@@ -20,34 +22,52 @@ proto_ncm_init_config() {
 proto_ncm_setup() {
 	local interface="$1"
 
-	local manufacturer initialize setmode connect
+	local manufacturer initialize setmode connect ifname devname devpath
 
 	local device apn auth username password pincode delay mode
 	json_get_vars device apn auth username password pincode delay mode
 
 	[ -n "$device" ] || {
-		echo "ncm[$$]" "No control device specified"
+		echo "No control device specified"
 		proto_notify_error "$interface" NO_DEVICE
 		proto_set_available "$interface" 0
 		return 1
 	}
 	[ -e "$device" ] || {
-		echo "ncm[$$]" "Control device not valid"
+		echo "Control device not valid"
 		proto_set_available "$interface" 0
 		return 1
 	}
 	[ -n "$apn" ] || {
-		echo "ncm[$$]" "No APN specified"
+		echo "No APN specified"
 		proto_notify_error "$interface" NO_APN
 		proto_set_available "$interface" 0
 		return 1
 	}
 
+	devname="$(basename "$device")"
+	case "$devname" in
+	'tty'*)
+		devpath="$(readlink -f /sys/class/tty/$devname/device)"
+		ifname="$( ls "$devpath"/../../*/net )"
+		;;
+	*)
+		devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)"
+		ifname="$( ls "$devpath"/net )"
+		;;
+	esac
+	[ -n "$ifname" ] || {
+		echo "The interface could not be found."
+		proto_notify_error "$interface" NO_IFACE
+		proto_set_available "$interface" 0
+		return 1
+	}
+
 	[ -n "$delay" ] && sleep "$delay"
 
-	manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print $2 }'`
+	manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print tolower($2) }'`
 	[ $? -ne 0 ] && {
-		echo "ncm[$$]" "Failed to get modem information"
+		echo "Failed to get modem information"
 		proto_notify_error "$interface" GETINFO_FAILED
 		proto_set_available "$interface" 0
 		return 1
@@ -56,7 +76,7 @@ proto_ncm_setup() {
 	json_load "$(cat /etc/gcom/ncm.json)"
 	json_select "$manufacturer"
 	[ $? -ne 0 ] && {
-		echo "ncm[$$]" "Unsupported modem"
+		echo "Unsupported modem"
 		proto_notify_error "$interface" UNSUPPORTED_MODEM
 		proto_set_available "$interface" 0
 		return 1
@@ -64,7 +84,7 @@ proto_ncm_setup() {
 	json_get_values initialize initialize
 	for i in $initialize; do
 		eval COMMAND="$i" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
-			echo "ncm[$$]" "Failed to initialize modem"
+			echo "Failed to initialize modem"
 			proto_notify_error "$interface" INITIALIZE_FAILED
 			proto_set_available "$interface" 0
 			return 1
@@ -73,7 +93,7 @@ proto_ncm_setup() {
 
 	[ -n "$pincode" ] && {
 		PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
-			echo "ncm[$$]" "Unable to verify PIN"
+			echo "Unable to verify PIN"
 			proto_notify_error "$interface" PIN_FAILED
 			proto_block_restart "$interface"
 			return 1
@@ -83,7 +103,7 @@ proto_ncm_setup() {
 		json_select modes
 		json_get_var setmode "$mode"
 		COMMAND="$setmode" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
-			echo "ncm[$$]" "Failed to set operating mode"
+			echo "Failed to set operating mode"
 			proto_notify_error "$interface" SETMODE_FAILED
 			proto_set_available "$interface" 0
 			return 1
@@ -91,66 +111,66 @@ proto_ncm_setup() {
 		json_select ..
 	}
 
-	json_get_var connect connect
+	json_get_vars connect
 	eval COMMAND="$connect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
-		echo "ncm[$$]" "Failed to connect"
+		echo "Failed to connect"
 		proto_notify_error "$interface" CONNECT_FAILED
 		proto_set_available "$interface" 0
 		return 1
 	}
 
-	echo "ncm[$$]" "Connected, starting DHCP"
-	proto_init_update "*" 1
+	echo "Connected, starting DHCP"
+	
+	proto_init_update "$ifname" 1
 	proto_send_update "$interface"
 
 	json_init
 	json_add_string name "${interface}_dhcp"
 	json_add_string ifname "@$interface"
 	json_add_string proto "dhcp"
-	json_close_object
 	ubus call network add_dynamic "$(json_dump)"
 
 	json_init
 	json_add_string name "${interface}_dhcpv6"
 	json_add_string ifname "@$interface"
 	json_add_string proto "dhcpv6"
-	json_close_object
 	ubus call network add_dynamic "$(json_dump)"
 }
 
 proto_ncm_teardown() {
 	local interface="$1"
 
-	proto_init_update "*" 0
-	proto_send_update "$interface"
-
 	local manufacturer disconnect
 
-	local device 
+	local device
 	json_get_vars device
 
-	echo "ncm[$$]" "Stopping network"
+	echo "Stopping network"
 
-	manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print $2 }'`
+	manufacturer=`gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | awk '/Manufacturer/ { print tolower($2) }'`
 	[ $? -ne 0 ] && {
-		echo "ncm[$$]" "Failed to get modem information"
+		echo "Failed to get modem information"
 		proto_notify_error "$interface" GETINFO_FAILED
 		return 1
 	}
 
 	json_load "$(cat /etc/gcom/ncm.json)"
 	json_select "$manufacturer" || {
-		echo "ncm[$$]" "Unsupported modem"
+		echo "Unsupported modem"
 		proto_notify_error "$interface" UNSUPPORTED_MODEM
 		return 1
 	}
 
-	json_get_var disconnect disconnect
+	json_get_vars disconnect
 	COMMAND="$disconnect" gcom -d "$device" -s /etc/gcom/runcommand.gcom || {
-		echo "ncm[$$]" "Failed to disconnect"
+		echo "Failed to disconnect"
 		proto_notify_error "$interface" DISCONNECT_FAILED
 		return 1
 	}
-}
 
-add_protocol ncm
+	proto_init_update "*" 0
+	proto_send_update "$interface"
+}
+[ -n "$INCLUDE_ONLY" ] || {
+	add_protocol ncm
+}
diff --git a/package/network/utils/comgt/files/runcommand.gcom b/package/network/utils/comgt/files/runcommand.gcom
index ab24339dc95a7a13e03a9f323938c0375d259ab7..e99b6f922a418241b6723d257355757157e2b775 100644
--- a/package/network/utils/comgt/files/runcommand.gcom
+++ b/package/network/utils/comgt/files/runcommand.gcom
@@ -6,14 +6,15 @@ opengt
  flash 0.1
 
 :start
- send "sending -> "
+ print "sending -> ",$env("COMMAND"),"\n"
  send $env("COMMAND")
  send "^m"
 
- waitfor 15 "OK","ERR","ERROR"
+ waitfor 15 "OK","ERR","ERROR","COMMAND NOT SUPPORT"
  if % = 0 goto continue
  if % = 1 goto error
  if % = 2 goto error
+ if % = 3 goto notsupported
 
  print "Timeout running AT-command\n"
  exit 1
@@ -22,5 +23,9 @@ opengt
  print "Error running AT-command\n"
  exit 1
 
+:notsupported
+ print "AT-command not supported\n"
+ exit 1
+
 :continue
  exit 0