diff --git a/arm32-vendor.mk b/arm32-vendor.mk
index cc2aee92c59a83a050aae2834e8fa220db2617e5..9a34d5ddddf880b8c9bbc53e454e14f398fd4f16 100644
--- a/arm32-vendor.mk
+++ b/arm32-vendor.mk
@@ -7,11 +7,12 @@ PRODUCT_PROPERTY_OVERRIDES += \
 # take priority  and override the rules it inherit from other mk files
 # see copy file rules in core/Makefile
 PRODUCT_SDK_ADDON_COPY_FILES += \
-    development/sys-img/advancedFeatures.ini.arm:images/armeabi-v7a/advancedFeatures.ini \
+    device/generic/goldfish/data/etc/advancedFeatures.ini.arm:images/armeabi-v7a/advancedFeatures.ini \
     prebuilts/qemu-kernel/arm64/$(PRODUCT_KERNEL_VERSION)/kernel-qemu2:images/armeabi-v7a/kernel-ranchu-64
 PRODUCT_COPY_FILES += \
+    device/generic/goldfish/fstab.ranchu.initrd.arm:$(TARGET_COPY_OUT_RAMDISK)/fstab.ranchu \
     device/generic/goldfish/manifest-arm.xml:$(TARGET_COPY_OUT_VENDOR)/manifest.xml \
-    development/sys-img/advancedFeatures.ini.arm:advancedFeatures.ini \
+    device/generic/goldfish/data/etc/advancedFeatures.ini.arm:advancedFeatures.ini \
     prebuilts/qemu-kernel/arm64/$(PRODUCT_KERNEL_VERSION)/kernel-qemu2:kernel-ranchu-64 \
     device/generic/goldfish/fstab.ranchu.arm:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.ranchu
 
diff --git a/arm64-vendor.mk b/arm64-vendor.mk
index a579d3540b549ce1ee30aa86b5554c43e3a54f39..a05654d1cd952d6457c07baa07d98eeb89ae0e2d 100644
--- a/arm64-vendor.mk
+++ b/arm64-vendor.mk
@@ -7,12 +7,13 @@ PRODUCT_PROPERTY_OVERRIDES += \
 # take priority  and override the rules it inherit from other mk files
 # see copy file rules in core/Makefile
 PRODUCT_SDK_ADDON_COPY_FILES += \
-    development/sys-img/advancedFeatures.ini.arm:images/arm64-v8a/advancedFeatures.ini \
+    device/generic/goldfish/data/etc/advancedFeatures.ini.arm:images/arm64-v8a/advancedFeatures.ini \
     prebuilts/qemu-kernel/arm64/$(PRODUCT_KERNEL_VERSION)/kernel-qemu2:images/arm64-v8a/kernel-ranchu
 
 PRODUCT_COPY_FILES += \
+    device/generic/goldfish/fstab.ranchu.initrd.arm:$(TARGET_COPY_OUT_RAMDISK)/fstab.ranchu \
     device/generic/goldfish/manifest-arm.xml:$(TARGET_COPY_OUT_VENDOR)/manifest.xml \
-    development/sys-img/advancedFeatures.ini.arm:advancedFeatures.ini \
+    device/generic/goldfish/data/etc/advancedFeatures.ini.arm:advancedFeatures.ini \
     prebuilts/qemu-kernel/arm64/$(PRODUCT_KERNEL_VERSION)/kernel-qemu2:kernel-ranchu \
     device/generic/goldfish/fstab.ranchu.arm:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.ranchu
 EMULATOR_VENDOR_NO_GNSS := true
diff --git a/data/etc/advancedFeatures.ini b/data/etc/advancedFeatures.ini
index 70dec80ec352e8038ee394cdf92ffb34b84d5488..e1f8b6ade708d6f5db1036c20f94d926c603dd6b 100644
--- a/data/etc/advancedFeatures.ini
+++ b/data/etc/advancedFeatures.ini
@@ -5,7 +5,6 @@ GLESDynamicVersion = on
 GLDMA = on
 EncryptUserData = on
 IntelPerformanceMonitoringUnit = on
-SystemAsRoot = on
 Wifi = on
-KernelDeviceTreeBlobSupport = on
 HostComposition = on
+DynamicPartition = on
diff --git a/data/etc/advancedFeatures.ini.arm b/data/etc/advancedFeatures.ini.arm
index 29c1cf72ee27df3cd6f3fc1271ad3c39c572abf8..0acc6d557c4d046649c373831ef8102d5c33888d 100644
--- a/data/etc/advancedFeatures.ini.arm
+++ b/data/etc/advancedFeatures.ini.arm
@@ -3,4 +3,4 @@ LogcatPipe = on
 GLAsyncSwap = on
 GLESDynamicVersion = on
 GLDMA = on
-SystemAsRoot = on
+DynamicPartition = on
diff --git a/data/etc/user/advancedFeatures.ini b/data/etc/user/advancedFeatures.ini
index cb8280ac46356920a12941f2ae4c17da63f613de..a63f367450a637945f2c2024a3480dd808218f04 100644
--- a/data/etc/user/advancedFeatures.ini
+++ b/data/etc/user/advancedFeatures.ini
@@ -6,7 +6,6 @@ GLESDynamicVersion = on
 PlayStoreImage = on
 EncryptUserData = on
 IntelPerformanceMonitoringUnit = on
-SystemAsRoot = on
 Wifi = on
-KernelDeviceTreeBlobSupport = on
 HostComposition = on
+DynamicPartition = on
diff --git a/fstab.ranchu b/fstab.ranchu
index 49253348537006710b6d89a0723150ce3528502a..5fcd5ceceff5683d96cf709f59744f4b2bea2fd5 100644
--- a/fstab.ranchu
+++ b/fstab.ranchu
@@ -1,7 +1,7 @@
 # Android fstab file.
-#<src>                                                  <mnt_point>         <type>    <mnt_flags and options>                              <fs_mgr_flags>
-# The filesystem that contains the filesystem checker binary (typically /system) cannot
-# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
-/dev/block/vdc                                          /data               ext4      noatime,nosuid,nodev,nomblk_io_submit,errors=panic   wait,check,quota,fileencryption=aes-256-xts:aes-256-cts,reservedsize=128M
-/devices/*/block/vdf                                    auto                auto      defaults                                             voldmanaged=sdcard:auto,encryptable=userdata
-/dev/block/zram0                                    none               swap        defaults                                              zramsize=75%
+#<dev>  <mnt_point> <type>  <mnt_flags options> <fs_mgr_flags>
+system   /system     ext4    ro,barrier=1     wait,logical,avb=vbmeta,first_stage_mount
+vendor   /vendor     ext4    ro,barrier=1     wait,logical,first_stage_mount
+/dev/block/vdc   /data     ext4      noatime,nosuid,nodev,nomblk_io_submit,errors=panic   wait,check,quota,fileencryption=aes-256-xts:aes-256-cts,reservedsize=128M
+/devices/*/block/vdf auto   auto      defaults    voldmanaged=sdcard:auto,encryptable=userdata
+dev/block/zram0 none swap  defaults zramsize=75%
diff --git a/fstab.ranchu.arm b/fstab.ranchu.arm
index 41ecddc45c6d191d1537ec433903ee796e882596..a821e979f02a6c8a944e49bd7e048f66db076bba 100644
--- a/fstab.ranchu.arm
+++ b/fstab.ranchu.arm
@@ -2,5 +2,7 @@
 #<src>                                                  <mnt_point>         <type>    <mnt_flags and options>                              <fs_mgr_flags>
 # The filesystem that contains the filesystem checker binary (typically /system) cannot
 # specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
-/dev/block/vdc                                          /data               ext4      noatime,nosuid,nodev,nomblk_io_submit,errors=panic   wait,check,quota
-/devices/*/block/vde                                    auto                auto      defaults                                             voldmanaged=sdcard:auto,encryptable=userdata
+system   /system     ext4    ro,barrier=1     wait,logical,first_stage_mount
+vendor   /vendor     ext4    ro,barrier=1     wait,logical,first_stage_mount
+/dev/block/vdc  /data    ext4      noatime,nosuid,nodev,nomblk_io_submit,errors=panic   wait,check,quota
+/devices/*/block/vde  auto  auto      defaults voldmanaged=sdcard:auto,encryptable=userdata
diff --git a/fstab.ranchu.initrd b/fstab.ranchu.initrd
new file mode 100644
index 0000000000000000000000000000000000000000..e792febbb3a9db3c9dbcf0f6c6e028b442687ca6
--- /dev/null
+++ b/fstab.ranchu.initrd
@@ -0,0 +1,4 @@
+# Android fstab file for ramdisk
+#<dev>  <mnt_point> <type>  <mnt_flags options> <fs_mgr_flags>
+system   /system     ext4    ro,barrier=1     wait,logical,avb=vbmeta,first_stage_mount
+vendor   /vendor     ext4    ro,barrier=1     wait,logical,first_stage_mount
diff --git a/fstab.ranchu.initrd.arm b/fstab.ranchu.initrd.arm
new file mode 100644
index 0000000000000000000000000000000000000000..560566344695c8a228125f86e9f6493cd1b7f623
--- /dev/null
+++ b/fstab.ranchu.initrd.arm
@@ -0,0 +1,4 @@
+# Android fstab file.
+#<dev>  <mnt_point> <type>  <mnt_flags options> <fs_mgr_flags>
+system   /system     ext4    ro,barrier=1     wait,logical,first_stage_mount
+vendor   /vendor     ext4    ro,barrier=1     wait,logical,first_stage_mount
diff --git a/gralloc/Android.mk b/gralloc/Android.mk
index a837f0a476432a4e1a94d43d2147c3de2fc90739..e0b0b85d42daa29828866f7344541358ca5c01f2 100644
--- a/gralloc/Android.mk
+++ b/gralloc/Android.mk
@@ -32,6 +32,7 @@ LOCAL_HEADER_LIBRARIES := libhardware_headers
 
 LOCAL_MODULE := gralloc.goldfish.default
 LOCAL_CFLAGS:= -DLOG_TAG=\"gralloc\" -Wno-missing-field-initializers
+LOCAL_CFLAGS:= -DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION)
 ifeq ($(TARGET_USE_PAN_DISPLAY),true)
 LOCAL_CFLAGS += -DUSE_PAN_DISPLAY=1
 endif
diff --git a/gralloc/gralloc.cpp b/gralloc/gralloc.cpp
index 07bbfbacc48568a5a87fe4c647859c8500e55bfd..3f2c025115e134da7fa4949dec3932a5629fff1a 100644
--- a/gralloc/gralloc.cpp
+++ b/gralloc/gralloc.cpp
@@ -89,6 +89,10 @@ struct private_module_t HAL_MODULE_INFO_SYM = {
         .unregisterBuffer = gralloc_unregister_buffer,
         .lock = gralloc_lock,
         .unlock = gralloc_unlock,
+#if PLATFORM_SDK_VERSION >= 28
+        .validateBufferSize = NULL,
+        .getTransportSize = NULL,
+#endif
     },
     .framebuffer = 0,
     .flags = 0,
diff --git a/kernel-tests/advancedFeatures.ini b/kernel-tests/advancedFeatures.ini
index 0ba5e0412ab3c7b115ced52f6877ea74eb3c0a2b..e1f8b6ade708d6f5db1036c20f94d926c603dd6b 100644
--- a/kernel-tests/advancedFeatures.ini
+++ b/kernel-tests/advancedFeatures.ini
@@ -5,8 +5,6 @@ GLESDynamicVersion = on
 GLDMA = on
 EncryptUserData = on
 IntelPerformanceMonitoringUnit = on
-SystemAsRoot = on
 Wifi = on
-KernelDeviceTreeBlobSupport = on
 HostComposition = on
-
+DynamicPartition = on
diff --git a/sepolicy/common/netd.te b/sepolicy/common/netd.te
index 1176c05d16d5cbcb51b0e502ee73fe8a23319a39..09a28b9967441bb65e342f79d84c9743c6d9252b 100644
--- a/sepolicy/common/netd.te
+++ b/sepolicy/common/netd.te
@@ -1,4 +1,3 @@
 dontaudit netd self:capability sys_module;
 #TODO: This can safely be ignored until b/62954877 is fixed
 dontaudit netd kernel:system module_request;
-allow netd self:bpf { map_create map_read map_write };
diff --git a/tools/mk_combined_img.py b/tools/mk_combined_img.py
old mode 100644
new mode 100755
index 6769db259102eae67b039eed50ebdb7015757665..1b7bbff031ffca6cc6f28021ced6dc6eddf978ca
--- a/tools/mk_combined_img.py
+++ b/tools/mk_combined_img.py
@@ -74,7 +74,7 @@ def write_partition(partition, output_file, offset):
 
 def unsparse_partition(partition):
     # if the input image is in sparse format, unsparse it
-    simg2img = os.environ.get('ANDROID_HOST_OUT', '/usr') + '/bin/simg2img'
+    simg2img = os.environ.get('SIMG2IMG', 'simg2img')
     print "Unsparsing %s" % (partition["path"]),
     partition["fd"], temp_file = mkstemp()
     shell_command([simg2img, partition["path"], temp_file])
@@ -83,12 +83,13 @@ def unsparse_partition(partition):
     return
 
 def clear_partition_table(filename):
-    sgdisk = os.environ.get('ANDROID_HOST_OUT', '/usr') + '/bin/sgdisk'
+    sgdisk = os.environ.get('SGDISK', 'sgdisk')
+    print "%s --clear %s" % (sgdisk, filename)
     shell_command([sgdisk, '--clear', filename])
     return
 
 def add_partition(partition, output_file):
-    sgdisk = os.environ.get('ANDROID_HOST_OUT', '/usr') + '/bin/sgdisk'
+    sgdisk = os.environ.get('SGDISK', 'sgdisk')
     num = str(partition["num"])
     new_comm = '--new='+num+':'+partition["start"]+':'+partition["end"]
     type_comm = '--type='+num+':8300'
diff --git a/tools/mk_vbmeta_boot_params.sh b/tools/mk_vbmeta_boot_params.sh
new file mode 100755
index 0000000000000000000000000000000000000000..17a39e8eed1683115fa0d70a4535d58268a94f7d
--- /dev/null
+++ b/tools/mk_vbmeta_boot_params.sh
@@ -0,0 +1,89 @@
+#!/bin/bash
+
+if [ $# -ne 3 ]; then
+  echo "Usage: $0 <vbmeta.img> <system.img> <VbmetaBootParams.textproto>"
+  exit 1
+fi
+
+# Example Output from 'avbtool calculate_vbmeta_digest --image $OUT/vbmeta.img':
+# 3254db8a232946c712b5c6f8c1a80b31f2a200bab98553d86f5915d06bfd5436
+#
+# Example Output from 'avbtool info_image --image $OUT/vbmeta.img':
+#
+# Minimum libavb version:   1.0
+# Header Block:             256 bytes
+# Authentication Block:     576 bytes
+# Auxiliary Block:          1600 bytes
+# Algorithm:                SHA256_RSA4096
+# Rollback Index:           0
+# Flags:                    0
+# Release String:           'avbtool 1.1.0'
+# Descriptors:
+# ...
+#
+#
+
+set -e
+
+function die {
+  echo $1 >&2
+  exit 1
+}
+
+# Incrementing major version causes emulator binaries that do not support the
+# version to ignore this file.  This can be useful if there is a change
+# not supported by older emulator binaries.
+readonly MAJOR_VERSION=2
+
+readonly VBMETAIMG=$1
+readonly SYSIMG=$2
+readonly TARGET=$3
+
+# Extract the digest
+readonly VBMETA_DIGEST=$(${AVBTOOL:-avbtool} calculate_vbmeta_digest --image $VBMETAIMG)
+
+echo "digest is $VBMETA_DIGEST"
+
+readonly INFO_OUTPUT=$(${AVBTOOL:-avbtool} info_image --image $VBMETAIMG | grep "^Algorithm:")
+echo "output is $INFO_OUTPUT"
+
+# Extract the algorithm
+readonly ALG_OUTPUT=$(echo $INFO_OUTPUT | grep "Algorithm:")
+echo \"$ALG_OUTPUT\"
+readonly ALG_SPLIT=($(echo $ALG_OUTPUT | tr ' ' '\n'))
+readonly ORG_ALGORITHM=${ALG_SPLIT[1]}
+
+if [[ $ORG_ALGORITHM == "SHA256_RSA4096" ]]; then
+VBMETA_HASH_ALG=sha256
+else
+die "Don't know anything about $ORG_ALGORITHM"
+fi
+
+echo "hash algorithm is $VBMETA_HASH_ALG"
+
+# extract the size
+
+function get_bytes {
+    MY_OUTPUT=$(${AVBTOOL:-avbtool} info_image --image $1 | grep "$2" )
+    MY_SPLIT=($(echo $MY_OUTPUT | tr ' ' '\n'))
+    MY_BYTES=${MY_SPLIT[2]}
+    echo $MY_BYTES
+}
+
+HEADER_SIZE=$(get_bytes $VBMETAIMG "Header Block:")
+AUTHEN_SIZE=$(get_bytes $VBMETAIMG "Authentication Block:")
+AUX_SIZE=$(get_bytes $VBMETAIMG "Auxiliary Block:")
+SYSMETA_SIZE=$(get_bytes $SYSIMG "VBMeta size:")
+
+VBMETA_SIZE=$(expr $HEADER_SIZE + $AUTHEN_SIZE + $AUX_SIZE + $SYSMETA_SIZE)
+
+echo "vbmeta size $VBMETA_SIZE"
+
+HEADER_COMMENT="# androidboot.vbmeta.size=$VBMETA_SIZE androidboot.vbmeta.hash_alg=$VBMETA_HASH_ALG androidboot.vbmeta.digest=$VBMETA_DIGEST"
+
+echo $HEADER_COMMENT > $TARGET
+echo "major_version: $MAJOR_VERSION" >> $TARGET
+#echo "param: \"androidboot.slot_suffix=_a\"" >> $TARGET
+echo "param: \"androidboot.vbmeta.size=$VBMETA_SIZE\"" >> $TARGET
+echo "param: \"androidboot.vbmeta.hash_alg=$VBMETA_HASH_ALG\"" >> $TARGET
+echo "param: \"androidboot.vbmeta.digest=$VBMETA_DIGEST\"" >> $TARGET
diff --git a/vendor.mk b/vendor.mk
index 535d59f6dd2ecdd8388ccf67a4cee749c6a1146d..d0089116e6ebdd6c5748122e0f781335dc64449c 100644
--- a/vendor.mk
+++ b/vendor.mk
@@ -91,6 +91,7 @@ PRODUCT_PACKAGES += \
     android.hardware.gnss@1.0-impl
 endif
 
+
 PRODUCT_PACKAGES += \
     android.hardware.sensors@1.0-impl \
     android.hardware.sensors@1.0-service
@@ -138,6 +139,7 @@ PRODUCT_COPY_FILES += \
 
 
 PRODUCT_COPY_FILES += \
+    device/generic/goldfish/fstab.ranchu.initrd:$(TARGET_COPY_OUT_RAMDISK)/fstab.ranchu \
     device/generic/goldfish/data/etc/apns-conf.xml:data/misc/apns/apns-conf.xml \
     device/generic/goldfish/data/etc/local.prop:data/local.prop \
     device/generic/goldfish/init.ranchu-core.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.ranchu-core.sh \
diff --git a/x86-vendor.mk b/x86-vendor.mk
index 6824b87f4abcfec87b514663777f0b6098f31b6d..4a2eb10a8fe7e258af9e9a6678483bda5da8d231 100644
--- a/x86-vendor.mk
+++ b/x86-vendor.mk
@@ -8,11 +8,11 @@ PRODUCT_PROPERTY_OVERRIDES += \
 # build quite specifically for the emulator, and might not be
 # entirely appropriate to inherit from for on-device configurations.
 PRODUCT_COPY_FILES += \
-    development/sys-img/advancedFeatures.ini:advancedFeatures.ini \
+    device/generic/goldfish/data/etc/advancedFeatures.ini:advancedFeatures.ini \
     device/generic/goldfish/data/etc/encryptionkey.img:encryptionkey.img \
     prebuilts/qemu-kernel/x86_64/$(PRODUCT_KERNEL_VERSION)/kernel-qemu2:kernel-ranchu-64
 PRODUCT_SDK_ADDON_COPY_FILES += \
-    development/sys-img/advancedFeatures.ini:images/x86/advancedFeatures.ini \
+    device/generic/goldfish/data/etc/advancedFeatures.ini:images/x86/advancedFeatures.ini \
     device/generic/goldfish/data/etc/encryptionkey.img:images/x86/encryptionkey.img \
     prebuilts/qemu-kernel/x86_64/$(PRODUCT_KERNEL_VERSION)/kernel-qemu2:images/x86/kernel-ranchu-64
 
diff --git a/x86_64-vendor.mk b/x86_64-vendor.mk
index bab4ae8b36df2156ea507e68484d13656bc4184c..16ccf6a22f6c31e8eebfb4b1eb9be02b64bfb39f 100644
--- a/x86_64-vendor.mk
+++ b/x86_64-vendor.mk
@@ -8,11 +8,11 @@ PRODUCT_PROPERTY_OVERRIDES += \
 # build quite specifically for the emulator, and might not be
 # entirely appropriate to inherit from for on-device configurations.
 PRODUCT_COPY_FILES += \
-    development/sys-img/advancedFeatures.ini:advancedFeatures.ini \
+    device/generic/goldfish/data/etc/advancedFeatures.ini:advancedFeatures.ini \
     device/generic/goldfish/data/etc/encryptionkey.img:encryptionkey.img \
     prebuilts/qemu-kernel/x86_64/$(PRODUCT_KERNEL_VERSION)/kernel-qemu2:kernel-ranchu
 PRODUCT_SDK_ADDON_COPY_FILES += \
-    development/sys-img/advancedFeatures.ini:images/x86_64/advancedFeatures.ini \
+    device/generic/goldfish/data/etc/advancedFeatures.ini:images/x86_64/advancedFeatures.ini \
     device/generic/goldfish/data/etc/encryptionkey.img:images/x86_64/encryptionkey.img \
     prebuilts/qemu-kernel/x86_64/$(PRODUCT_KERNEL_VERSION)/kernel-qemu2:images/x86_64/kernel-ranchu