diff --git a/device.mk b/device.mk
index c555d6a963cf27b4b6219ad6a52f95fbe8259497..e8482a36e2f5fa629f51f3deea0f85f7f9c140b1 100644
--- a/device.mk
+++ b/device.mk
@@ -57,6 +57,9 @@ PRODUCT_COPY_FILES += \
     $(LOCAL_PATH)/idc/uinput-fpc.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/uinput-fpc.idc
 
 # Init
+PRODUCT_COPY_FILES += \
+    $(LOCAL_PATH)/rootdir/etc/init.sys.beckham.rc:$(TARGET_COPY_OUT_SYSTEM)/etc/init/init.sys.beckham.rc
+
 PRODUCT_PACKAGES += \
     init.beckham.rc \
     init.gbmods.sh
diff --git a/rootdir/etc/init.sys.beckham.rc b/rootdir/etc/init.sys.beckham.rc
new file mode 100644
index 0000000000000000000000000000000000000000..e8f32ba14e565cffd285bb6a2203d1465a6bded7
--- /dev/null
+++ b/rootdir/etc/init.sys.beckham.rc
@@ -0,0 +1,3 @@
+on post-fs-data
+    # Greybus firmware directory
+    mkdir /data/gbfirmware 0770 oem_5020 oem_5020
diff --git a/sepolicy-mods/private/file_contexts b/sepolicy-mods/private/file_contexts
new file mode 100644
index 0000000000000000000000000000000000000000..58c36da319b9ac2caf060f68b58ebb6caeef1537
--- /dev/null
+++ b/sepolicy-mods/private/file_contexts
@@ -0,0 +1,2 @@
+# Greybus firmware
+/data/gbfirmware(/.*)?                u:object_r:greybus_fw_data_file:s0
diff --git a/sepolicy-mods/public/file.te b/sepolicy-mods/public/file.te
new file mode 100644
index 0000000000000000000000000000000000000000..39de06d58eee4da2fd57a49ecfc0d7acbb4cec95
--- /dev/null
+++ b/sepolicy-mods/public/file.te
@@ -0,0 +1,2 @@
+# Greybus firmware
+type greybus_fw_data_file, file_type, core_data_file_type, data_file_type, mlstrustedobject;
diff --git a/sepolicy-mods/vendor/file.te b/sepolicy-mods/vendor/file.te
index c462dbdc47f10da567ff6fb707b3f7a44569316e..199f6fa0bd9b0fb14164c73933a5d5962b5cc954 100644
--- a/sepolicy-mods/vendor/file.te
+++ b/sepolicy-mods/vendor/file.te
@@ -1,4 +1,3 @@
 # Greybus
 type sysfs_greybus, fs_type, sysfs_type, mlstrustedobject;
-type gbfirmware_file, file_type, core_data_file_type, data_file_type, mlstrustedobject;
 type sysfs_mods_camd, fs_type, sysfs_type, mlstrustedobject;
diff --git a/sepolicy-mods/vendor/file_contexts b/sepolicy-mods/vendor/file_contexts
index d615a59f9c0a7276ba023d2ed85513471c4b0fa4..a28629127f03ee3dad2cbaae452d63b397d3eb47 100644
--- a/sepolicy-mods/vendor/file_contexts
+++ b/sepolicy-mods/vendor/file_contexts
@@ -3,7 +3,6 @@
 /(vendor|system/vendor)/lib(64)?/libmodmanager\.so          u:object_r:same_process_hal_file:s0
 
 # Greybus (Mods)
-/data/gbfirmware(/.*)?                                      u:object_r:gbfirmware_file:s0
 /dev/gbraw[0-9]*                                            u:object_r:greybus_raw_device:s0
 /sys/bus/greybus(/.*)?                                      u:object_r:sysfs_greybus:s0
 /sys/class/i2c-adapter/i2c-7/7-002d/enable                  u:object_r:sysfs_greybus:s0
diff --git a/sepolicy-mods/vendor/mods_app.te b/sepolicy-mods/vendor/mods_app.te
index 44672ea508101e062895fe99e91a8c60083d8145..fe83f6ad3d159f58ca0d0a1db97e4134b6d888ea 100644
--- a/sepolicy-mods/vendor/mods_app.te
+++ b/sepolicy-mods/vendor/mods_app.te
@@ -1,8 +1,8 @@
 allow mods_app ion_device:chr_file { open read };
 allow mods_app self:netlink_kobject_uevent_socket { bind create read setopt };
 
-allow mods_app gbfirmware_file:dir create_dir_perms;
-allow mods_app gbfirmware_file:file create_file_perms;
+allow mods_app greybus_fw_data_file:dir create_dir_perms;
+allow mods_app greybus_fw_data_file:file create_file_perms;
 allow mods_app greybus_raw_device:chr_file open;
 
 allow mods_app audioserver_service:service_manager find;
diff --git a/sepolicy-mods/vendor/platform_app.te b/sepolicy-mods/vendor/platform_app.te
index 14b1ccd3f1dc2fa6e74bb40c906082f57da681d6..d5f3d7204c1c888832729a36b5f801cf15eabccb 100644
--- a/sepolicy-mods/vendor/platform_app.te
+++ b/sepolicy-mods/vendor/platform_app.te
@@ -16,6 +16,6 @@ allow platform_app sysfs_greybus:file rw_file_perms;
 allow platform_app sysfs_greybus:lnk_file r_file_perms;
 allow platform_app sysfs_mods_camd:file rw_file_perms;
 allow platform_app sysfs_mods_camd:dir r_dir_perms;
-allow platform_app gbfirmware_file:dir create_dir_perms;
-allow platform_app gbfirmware_file:file create_file_perms;
+allow platform_app greybus_fw_data_file:dir create_dir_perms;
+allow platform_app greybus_fw_data_file:file create_file_perms;
 
diff --git a/sepolicy-mods/vendor/ueventd.te b/sepolicy-mods/vendor/ueventd.te
new file mode 100644
index 0000000000000000000000000000000000000000..9c9d488e818a34d68b983d8c98801585eae5f88e
--- /dev/null
+++ b/sepolicy-mods/vendor/ueventd.te
@@ -0,0 +1,3 @@
+# Greybus firmware
+allow ueventd greybus_fw_data_file:dir search;
+allow ueventd greybus_fw_data_file:file r_file_perms;