diff --git a/Android.mk b/Android.mk
index 12e5b2c0b1ea07ea9a1cee266e957ffb48d3cfa3..351078ff19d82397d3262f1949eb08b54f6f8716 100644
--- a/Android.mk
+++ b/Android.mk
@@ -27,4 +27,15 @@ LOCAL_PATH := $(call my-dir)
 
 ifneq ($(filter beckham, $(TARGET_DEVICE)),)
 include $(call all-makefiles-under,$(LOCAL_PATH))
+
+MODS_LIBS := libmodhw.so
+MODS_SYMLINKS := $(addprefix $(TARGET_OUT)/priv-app/ModFmwkProxyService/lib/arm64/,$(notdir $(MODS_LIBS)))
+$(MODS_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
+	@echo "MODS lib link: $@"
+	@mkdir -p $(dir $@)
+	@rm -rf $@
+	$(hide) ln -sf /system/lib64/$(notdir $@) $@
+
+ALL_DEFAULT_INSTALLED_MODULES += $(MODS_SYMLINKS)
+
 endif
diff --git a/device.mk b/device.mk
index 097797e33508349c83d9262b04e4d37aa991b5d2..d93f9c878f0350ba023925dc68abfa43b77e18f1 100644
--- a/device.mk
+++ b/device.mk
@@ -50,7 +50,8 @@ PRODUCT_COPY_FILES += \
 
 # Init
 PRODUCT_PACKAGES += \
-    init.beckham.rc
+    init.beckham.rc \
+    init.gbmods.sh
 
 # NFC
 PRODUCT_PACKAGES += \
diff --git a/overlay/lineage-sdk/lineage/res/res/values/config.xml b/overlay/lineage-sdk/lineage/res/res/values/config.xml
index dd3b39cc61f6bb6d528a30a0b184941ebca4e513..51b50e253fce2ffdb53ed8ab97d8689d69d0a331 100644
--- a/overlay/lineage-sdk/lineage/res/res/values/config.xml
+++ b/overlay/lineage-sdk/lineage/res/res/values/config.xml
@@ -58,4 +58,9 @@
          config to 7. -->
     <integer name="config_deviceHardwareWakeKeys">64</integer>
 
+    <!-- The list of vendor package signatures that should also be considered
+         platform signatures, specifically for use on devices with a vendor partition. -->
+    <string-array name="config_vendorPlatformSignatures" translatable="false">
+        <item>308203c5308202ada003020102020213ae300d06092a864886f70d01010505003076310b30090603550406130255533111300f06035504081308496c6c696e6f6973311530130603550407130c4c69626572747976696c6c653111300f060355040a13084d6f746f726f6c61310c300a060355040b13034d4d49311c301a06035504031313436f6d6d6f6e204d6f746f424c555220322d31301e170d3131303331353232343430355a170d3336303331353232343430355a3078310b30090603550406130255533111300f06035504081308496c6c696e6f6973311530130603550407130c4c69626572747976696c6c653111300f060355040a13084d6f746f726f6c61310c300a060355040b13034d4d49311e301c06035504031315436f6d6d6f6e204d6f746f424c555220322d312d3130820122300d06092a864886f70d01010105000382010f003082010a0282010100bdbc690d0a26c6c953c5900b1ebb303ee791edbad39950f1b185cfc75f9cc6268a4cb7aadf4eb87d3ba7bf982e0ede6a9e3a41b07d84a626b4bd6e37a9feb4a96add829913e7b5e7a9575616f91f22c6dcec9e0293183d419d50f62756b22cd6d8284f8be17fa1c422eac27738c3a9c937d0313e3417ab6f4bb2cdc13f2f77b160b0ff87357b8983d8ea729a7135d88020c6fbca873f78f567a4092cdf28999d459cb8943d7b1e6e35cde5b035fdb63944b78d026fd291476fc385df694e42b1db443dd1ffb427f37d26dcd8cf1d8380fe6a094c1b45c924f1addd2e90d67a32bb8de5b146f47c7bfeae5286c810fa51762b073b58dabf6494a47032595f60410203010001a35b3059301f0603551d23041830168014b3c62fe567c28d4489abc7abbdce60030ca6b62c301106096086480186f8420101040403020410300e0603551d0f0101ff0404030205e030130603551d25040c300a06082b06010505070303300d06092a864886f70d010105050003820101001384fcff397bbc871c55033830f4ca3de5c7d47116c79eb6c0ae152faec03a284c44bc39e3d3756467da60fa89cdd6546e4fd4b182faba3e833093ad8d6b975b5d72836e784f3e3a0ac34d7e83efbfa6c9601e54200415f5ccfcb2555430249ce5794e493f7a4c534b984ac3810ba09bcc9c5e7d985ff1b0902676ce1546301e91089614167b6b562c8585fea36ef6af6c350d77bad00a234755364eeb0be232d2561fb3e6535991c54a1f46f528a82139b7c62dddc53478d59aa593e79fb0f4610320072378f6101aced914e5da439e223900c46ef19d00763c4c315402ea82b14119a276fe40684bfad8c6bd16611c0b972daa5d18f2dfdd1f9bb1ca7aedfd</item>
+    </string-array>
 </resources>
diff --git a/proprietary-files.txt b/proprietary-files.txt
index 65cc3859a7f37eb849d0d9a0377ae044e5170f50..958ee5e9e1b510b957c2db1582121b296131174f 100644
--- a/proprietary-files.txt
+++ b/proprietary-files.txt
@@ -422,8 +422,29 @@ vendor/lib64/libkeymasterdeviceutils.so
 vendor/lib64/libkeymasterprovision.so
 vendor/lib64/libkeymasterutils.so
 
+# Moto Mods
+-priv-app/ModFmwkProxyService/ModFmwkProxyService.apk|36fdc66b39643433d2ffa46c986e300c6e6f7288
+etc/firmware/upd-00000126-00001001-fed70128-fffe0001-02.tftf
+etc/permissions/com.motorola.aov.xml
+etc/permissions/com.motorola.mod.protocols.xml
+etc/permissions/com.motorola.mod.xml|b25e55275b7ecc5f4d46db52c6148fe7c75ff60b
+lib64/libmodhw.so
+-priv-app/ModService/ModService.apk:priv-app/ModService/ModService.apk;PRESIGNED
+-priv-app/ProjectorApp/ProjectorApp.apk:priv-app/ProjectorApp/ProjectorApp.apk;PRESIGNED
+vendor/bin/mods_camd
+vendor/lib/libmodmanager.so
+vendor/lib64/libmodmanager.so
+vendor/lib64/com.motorola.mod@1.0_vendor.so
+vendor/lib/com.motorola.mod@1.0_vendor.so
+
 # NFC
 vendor/lib64/libpn553_fw.so
 
+# Other Sensors
+vendor/lib64/sensors.iio.so
+vendor/lib/sensors.iio.so
+vendor/lib64/libiio.so
+vendor/lib/libiio.so
+
 # Thermal
 etc/thermal-engine-beckham.conf:vendor/etc/thermal-engine.conf
diff --git a/rootdir/Android.mk b/rootdir/Android.mk
index b6cefd641fd3317f8c7192b95025f94cebe79f10..f18f4d872cb8d48aaec7ce8a7cc7e473f30c39bb 100644
--- a/rootdir/Android.mk
+++ b/rootdir/Android.mk
@@ -11,3 +11,11 @@ LOCAL_SRC_FILES    := etc/init.beckham.rc
 LOCAL_VENDOR_MODULE    := true
 LOCAL_MODULE_RELATIVE_PATH := init/hw
 include $(BUILD_PREBUILT)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE       := init.gbmods.sh
+LOCAL_MODULE_TAGS  := optional eng
+LOCAL_MODULE_CLASS := EXECUTABLES
+LOCAL_SRC_FILES    := bin/init.gbmods.sh
+LOCAL_VENDOR_MODULE    := true
+include $(BUILD_PREBUILT)
diff --git a/rootdir/bin/init.gbmods.sh b/rootdir/bin/init.gbmods.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c692e13498de7187fff112504f1b7357f71bfa46
--- /dev/null
+++ b/rootdir/bin/init.gbmods.sh
@@ -0,0 +1,30 @@
+#!/vendor/bin/sh
+
+debug=$(getprop ro.boot.gbdebug 2> /dev/null)
+bootmode=$(getprop ro.bootmode 2> /dev/null)
+
+# If androidboot.gbdebug is set on command line, skip inserting
+# the pre-installed modules.
+if [ "$debug" == "1" ]; then
+    return 0
+fi
+
+insmod /vendor/lib/modules/greybus.ko
+
+# Only support PTP and BATTERY in charge-only mode
+if [ "$bootmode" == "charger" ]; then
+    insmod /vendor/lib/modules/gb-mods.ko
+    insmod /vendor/lib/modules/gb-battery.ko
+    insmod /vendor/lib/modules/gb-ptp.ko
+
+    return 0
+fi
+
+gbmods="/vendor/lib/modules/gb-*"
+for mod in $gbmods
+do
+    insmod $mod
+done
+
+insmod /vendor/lib/modules/v4l2-hal.ko
+start vendor.mods_camd
diff --git a/rootdir/etc/init.beckham.rc b/rootdir/etc/init.beckham.rc
index 816a92382fb596f6fd0724be17e6db64631316a4..ba3ca25a596912dda04a75c4c672f0844818f4fb 100644
--- a/rootdir/etc/init.beckham.rc
+++ b/rootdir/etc/init.beckham.rc
@@ -38,3 +38,20 @@ on property:ro.vendor.hw.dualsim=true
 
 on property:ro.vendor.hw.dualsim=false
     setprop persist.radio.multisim.config ""
+
+on post-fs-data
+    # Start Loading mods kernel modules
+    start vendor.gbmodinstall
+
+service vendor.mods_camd /vendor/bin/mods_camd
+    class late_start
+    user camera
+    group camera system inet input graphics
+    disabled
+    rlimit 14 4 4
+    ioprio rt 4
+
+service vendor.gbmodinstall /vendor/bin/init.gbmods.sh
+    user root
+    oneshot
+    disabled