diff --git a/updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java b/updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java
index 1e0fadc..61872a6 100644
--- a/updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java
+++ b/updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java
@@ -25,6 +25,7 @@
 
 import java.io.File;
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Optional;
 
 /**
@@ -67,31 +68,28 @@
                 throw new JSONException("Invalid type, expected either "
                         + "NON_STREAMING or STREAMING, got " + o.getString("ab_install_type"));
         }
-        if (c.mAbInstallType == AB_INSTALL_TYPE_STREAMING) {
-            JSONObject meta = o.getJSONObject("ab_streaming_metadata");
-            JSONArray propertyFilesJson = meta.getJSONArray("property_files");
-            PackageFile[] propertyFiles =
-                    new PackageFile[propertyFilesJson.length()];
-            for (int i = 0; i < propertyFilesJson.length(); i++) {
-                JSONObject p = propertyFilesJson.getJSONObject(i);
-                propertyFiles[i] = new PackageFile(
-                        p.getString("filename"),
-                        p.getLong("offset"),
-                        p.getLong("size"));
-            }
-            String authorization = null;
-            if (meta.has("authorization")) {
-                authorization = meta.getString("authorization");
-            }
-            c.mAbStreamingMetadata = new StreamingMetadata(
-                    propertyFiles,
-                    authorization);
-        }
 
         // TODO: parse only for A/B updates when non-A/B is implemented
         JSONObject ab = o.getJSONObject("ab_config");
         boolean forceSwitchSlot = ab.getBoolean("force_switch_slot");
-        c.mAbConfig = new AbConfig(forceSwitchSlot);
+        boolean verifyPayloadMetadata = ab.getBoolean("verify_payload_metadata");
+        ArrayList<PackageFile> propertyFiles = new ArrayList<>();
+        if (ab.has("property_files")) {
+            JSONArray propertyFilesJson = ab.getJSONArray("property_files");
+            for (int i = 0; i < propertyFilesJson.length(); i++) {
+                JSONObject p = propertyFilesJson.getJSONObject(i);
+                propertyFiles.add(new PackageFile(
+                        p.getString("filename"),
+                        p.getLong("offset"),
+                        p.getLong("size")));
+            }
+        }
+        String authorization = ab.optString("authorization", null);
+        c.mAbConfig = new AbConfig(
+                forceSwitchSlot,
+                verifyPayloadMetadata,
+                propertyFiles.toArray(new PackageFile[0]),
+                authorization);
 
         c.mRawJson = json;
         return c;
@@ -112,9 +110,6 @@
     /** non-streaming (first saves locally) OR streaming (on the fly) */
     private int mAbInstallType;
 
-    /** metadata is required only for streaming update */
-    private StreamingMetadata mAbStreamingMetadata;
-
     /** A/B update configurations */
     private AbConfig mAbConfig;
 
@@ -127,7 +122,6 @@
         this.mName = in.readString();
         this.mUrl = in.readString();
         this.mAbInstallType = in.readInt();
-        this.mAbStreamingMetadata = (StreamingMetadata) in.readSerializable();
         this.mAbConfig = (AbConfig) in.readSerializable();
         this.mRawJson = in.readString();
     }
@@ -154,10 +148,6 @@
         return mAbInstallType;
     }
 
-    public StreamingMetadata getStreamingMetadata() {
-        return mAbStreamingMetadata;
-    }
-
     public AbConfig getAbConfig() {
         return mAbConfig;
     }
@@ -185,43 +175,11 @@
         dest.writeString(mName);
         dest.writeString(mUrl);
         dest.writeInt(mAbInstallType);
-        dest.writeSerializable(mAbStreamingMetadata);
         dest.writeSerializable(mAbConfig);
         dest.writeString(mRawJson);
     }
 
     /**
-     * Metadata for streaming A/B update.
-     */
-    public static class StreamingMetadata implements Serializable {
-
-        private static final long serialVersionUID = 31042L;
-
-        /** defines beginning of update data in archive */
-        private PackageFile[] mPropertyFiles;
-
-        /**
-         * SystemUpdaterSample receives the authorization token from the OTA server, in addition
-         * to the package URL. It passes on the info to update_engine, so that the latter can
-         * fetch the data from the package server directly with the token.
-         */
-        private String mAuthorization;
-
-        public StreamingMetadata(PackageFile[] propertyFiles, String authorization) {
-            this.mPropertyFiles = propertyFiles;
-            this.mAuthorization = authorization;
-        }
-
-        public PackageFile[] getPropertyFiles() {
-            return mPropertyFiles;
-        }
-
-        public Optional<String> getAuthorization() {
-            return mAuthorization == null ? Optional.empty() : Optional.of(mAuthorization);
-        }
-    }
-
-    /**
      * Description of a file in an OTA package zip file.
      */
     public static class PackageFile implements Serializable {
@@ -269,14 +227,48 @@
          */
         private boolean mForceSwitchSlot;
 
-        public AbConfig(boolean forceSwitchSlot) {
+        /**
+         * if set true device will boot to new slot, otherwise user manually
+         * switches slot on the screen.
+         */
+        private boolean mVerifyPayloadMetadata;
+
+        /** defines beginning of update data in archive */
+        private PackageFile[] mPropertyFiles;
+
+        /**
+         * SystemUpdaterSample receives the authorization token from the OTA server, in addition
+         * to the package URL. It passes on the info to update_engine, so that the latter can
+         * fetch the data from the package server directly with the token.
+         */
+        private String mAuthorization;
+
+        public AbConfig(
+                boolean forceSwitchSlot,
+                boolean verifyPayloadMetadata,
+                PackageFile[] propertyFiles,
+                String authorization) {
             this.mForceSwitchSlot = forceSwitchSlot;
+            this.mVerifyPayloadMetadata = verifyPayloadMetadata;
+            this.mPropertyFiles = propertyFiles;
+            this.mAuthorization = authorization;
         }
 
         public boolean getForceSwitchSlot() {
             return mForceSwitchSlot;
         }
 
+        public boolean getVerifyPayloadMetadata() {
+            return mVerifyPayloadMetadata;
+        }
+
+        public PackageFile[] getPropertyFiles() {
+            return mPropertyFiles;
+        }
+
+        public Optional<String> getAuthorization() {
+            return mAuthorization == null ? Optional.empty() : Optional.of(mAuthorization);
+        }
     }
 
 }
diff --git a/updater_sample/src/com/example/android/systemupdatersample/UpdateManager.java b/updater_sample/src/com/example/android/systemupdatersample/UpdateManager.java
index a9783e7..12a8f3f 100644
--- a/updater_sample/src/com/example/android/systemupdatersample/UpdateManager.java
+++ b/updater_sample/src/com/example/android/systemupdatersample/UpdateManager.java
@@ -324,7 +324,7 @@
             if (code == PrepareStreamingService.RESULT_CODE_SUCCESS) {
                 builder.setPayload(payloadSpec);
                 builder.addExtraProperty("USER_AGENT=" + HTTP_USER_AGENT);
-                config.getStreamingMetadata()
+                config.getAbConfig()
                         .getAuthorization()
                         .ifPresent(s -> builder.addExtraProperty("AUTHORIZATION=" + s));
                 updateEngineApplyPayload(builder.build());
diff --git a/updater_sample/src/com/example/android/systemupdatersample/services/PrepareStreamingService.java b/updater_sample/src/com/example/android/systemupdatersample/services/PrepareStreamingService.java
index ac6e223..9314048 100644
--- a/updater_sample/src/com/example/android/systemupdatersample/services/PrepareStreamingService.java
+++ b/updater_sample/src/com/example/android/systemupdatersample/services/PrepareStreamingService.java
@@ -173,7 +173,7 @@
     }
 
     /**
-     * Downloads files defined in {@link UpdateConfig#getStreamingMetadata()}
+     * Downloads files defined in {@link UpdateConfig#getAbConfig()}
      * and exists in {@code PRE_STREAMING_FILES_SET}, and put them
      * in directory {@code dir}.
      * @throws IOException when can't download a file
@@ -185,7 +185,7 @@
             Files.deleteIfExists(Paths.get(OTA_PACKAGE_DIR, file));
         }
         Log.d(TAG, "Downloading files to " + dir);
-        for (UpdateConfig.PackageFile file : config.getStreamingMetadata().getPropertyFiles()) {
+        for (UpdateConfig.PackageFile file : config.getAbConfig().getPropertyFiles()) {
             if (PRE_STREAMING_FILES_SET.contains(file.getFilename())) {
                 Log.d(TAG, "Downloading file " + file.getFilename());
                 FileDownloader downloader = new FileDownloader(
diff --git a/updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java b/updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java
index 5080cb6..bbefcaf 100644
--- a/updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java
+++ b/updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java
@@ -83,7 +83,7 @@
 
     /**
      * @param filename searches by given filename
-     * @param config searches in {@link UpdateConfig#getStreamingMetadata()}
+     * @param config searches in {@link UpdateConfig#getAbConfig()}
      * @return offset and size of {@code filename} in the package zip file
      *         stored as {@link UpdateConfig.PackageFile}.
      */
@@ -91,7 +91,7 @@
             final String filename,
             UpdateConfig config) {
         return Arrays
-                .stream(config.getStreamingMetadata().getPropertyFiles())
+                .stream(config.getAbConfig().getPropertyFiles())
                 .filter(file -> filename.equals(file.getFilename()))
                 .findFirst();
     }
