diff --git a/conf/init.gs101.usb.rc b/conf/init.gs101.usb.rc
index aa7d68f..f0d671c 100644
--- a/conf/init.gs101.usb.rc
+++ b/conf/init.gs101.usb.rc
@@ -44,8 +44,9 @@
     write /config/usb_gadget/g1/functions/rndis.gs4/class e0
     write /config/usb_gadget/g1/functions/rndis.gs4/subclass 01
     write /config/usb_gadget/g1/functions/rndis.gs4/protocol 03
+    write /config/usb_gadget/g1/functions/rndis.gs4/os_desc/interface.ncm/compatible_id RNDIS
     write /config/usb_gadget/g1/functions/rndis.gs4/ifname rndis%d
-    setprop vendor.usb.rndis.config ncm.gs9
+    setprop vendor.usb.rndis.config rndis.gs4
 
     # midi function
     mkdir /config/usb_gadget/g1/functions/midi.gs5
@@ -62,6 +63,7 @@
     # ncm function
     mkdir /config/usb_gadget/g1/functions/ncm.gs9
     write /config/usb_gadget/g1/functions/ncm.gs9/os_desc/interface.ncm/compatible_id WINNCM
+    write /config/usb_gadget/g1/functions/ncm.gs9/ifname ncm%d
 
     # etr_miu function
     mkdir /config/usb_gadget/g1/functions/etr_miu.gs11
diff --git a/usb/UsbGadget.cpp b/usb/UsbGadget.cpp
index efbf778..b153e20 100644
--- a/usb/UsbGadget.cpp
+++ b/usb/UsbGadget.cpp
@@ -223,14 +223,12 @@
         case static_cast<uint64_t>(GadgetFunction::NCM):
             if (!(vendorFunctions == "user" || vendorFunctions == ""))
                 ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
-            // TODO(b/170953147): need to request a new PID. Sharing PID of rndis now.
-            ret = setVidPid("0x18d1", "0x4ee3");
+            ret = setVidPid("0x18d1", "0x4eeb");
             break;
         case GadgetFunction::ADB | GadgetFunction::NCM:
             if (!(vendorFunctions == "user" || vendorFunctions == ""))
                 ALOGE("Invalid vendorFunctions set: %s", vendorFunctions.c_str());
-            // TODO(b/170953147): need to request a new PID. Sharing PID of rndis+adb now.
-            ret = setVidPid("0x18d1", "0x4ee4");
+            ret = setVidPid("0x18d1", "0x4eec");
             break;
         default:
             ALOGE("Combination not supported");
@@ -263,30 +261,15 @@
     bool ffsEnabled = false;
     int i = 0;
 
-    // Use the NCM support hack because the gadget function has no NCM definition.
-    // TODO: add formal NCM function setup once gadget function supports NCM.
-    uint64_t usbFunctions = functions;
-    bool ncmEnabled = false;
-    const std::string vendorRndisConfig = GetProperty(google::pixel::usb::kVendorRndisConfig, "");
-    if ((functions & GadgetFunction::RNDIS) && (vendorRndisConfig.find("ncm.gs", 0) == 0)) {
-        ncmEnabled = true;
-        usbFunctions &= ~static_cast<uint64_t>(GadgetFunction::RNDIS);
-    }
-
-    if (addGenericAndroidFunctions(&monitorFfs, usbFunctions, &ffsEnabled, &i) !=
+    if (addGenericAndroidFunctions(&monitorFfs, functions, &ffsEnabled, &i) !=
         Status::SUCCESS)
         return Status::ERROR;
 
-    if ((functions & GadgetFunction::NCM) != 0) {
-        if (linkFunction("ncm.gs9", i++))
-            return Status::ERROR;
-    }
-
     std::string vendorFunctions = getVendorFunctions();
 
     if (vendorFunctions == "dm") {
         ALOGI("enable usbradio debug functions");
-        if ((usbFunctions & GadgetFunction::RNDIS) != 0) {
+        if ((functions & GadgetFunction::RNDIS) != 0) {
             if (linkFunction("acm.gs6", i++))
 	        return Status::ERROR;
             if (linkFunction("dm.gs7", i++))
@@ -303,17 +286,15 @@
             return Status::ERROR;
     }
 
-    if ((usbFunctions & GadgetFunction::ADB) != 0) {
+    if ((functions & GadgetFunction::ADB) != 0) {
         ffsEnabled = true;
         if (addAdb(&monitorFfs, &i) != Status::SUCCESS)
             return Status::ERROR;
     }
 
-    // Reordering NCM function makes Windows generic NCM driver work when vendor funcs are enabled.
-    // TODO: possibly remove the reordering once vendor function Windows driver supports NCM.
-    if (ncmEnabled) {
-        ALOGI("set ncm function");
-        if (linkFunction(vendorRndisConfig.c_str(), i++))
+    if ((functions & GadgetFunction::NCM) != 0) {
+        ALOGI("setCurrentUsbFunctions ncm");
+        if (linkFunction("ncm.gs9", i++))
             return Status::ERROR;
     }
 
