diff --git a/library/main/src/com/android/setupwizardlib/SetupWizardLayout.java b/library/main/src/com/android/setupwizardlib/SetupWizardLayout.java
index 3906a9b..ce4896f 100644
--- a/library/main/src/com/android/setupwizardlib/SetupWizardLayout.java
+++ b/library/main/src/com/android/setupwizardlib/SetupWizardLayout.java
@@ -152,6 +152,12 @@
 
     @Override
     protected void onRestoreInstanceState(Parcelable state) {
+        if (!(state instanceof SavedState)) {
+            Log.w(TAG, "Ignoring restore instance state " + state);
+            super.onRestoreInstanceState(state);
+            return;
+        }
+
         final SavedState ss = (SavedState) state;
         super.onRestoreInstanceState(ss.getSuperState());
         final boolean isProgressBarShown = ss.mIsProgressBarShown;
diff --git a/library/test/src/com/android/setupwizardlib/test/SetupWizardLayoutTest.java b/library/test/src/com/android/setupwizardlib/test/SetupWizardLayoutTest.java
index fd26239..f71c794 100644
--- a/library/test/src/com/android/setupwizardlib/test/SetupWizardLayoutTest.java
+++ b/library/test/src/com/android/setupwizardlib/test/SetupWizardLayoutTest.java
@@ -19,8 +19,11 @@
 import android.content.Context;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
+import android.os.Parcelable;
 import android.test.InstrumentationTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
+import android.util.SparseArray;
+import android.view.AbsSavedState;
 import android.view.ContextThemeWrapper;
 import android.view.InflateException;
 import android.view.LayoutInflater;
@@ -159,6 +162,57 @@
         }
     }
 
+    @SmallTest
+    public void testOnRestoreFromInstanceState() {
+        final SetupWizardLayout layout = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout.setId(1234);
+
+        SparseArray<Parcelable> container = new SparseArray<>();
+        layout.saveHierarchyState(container);
+
+        final SetupWizardLayout layout2 = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout2.setId(1234);
+        layout2.restoreHierarchyState(container);
+
+        assertFalse("Progress bar should not be shown", layout2.isProgressBarShown());
+    }
+
+    @SmallTest
+    public void testOnRestoreFromInstanceStateProgressBarShown() {
+        final SetupWizardLayout layout = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout.setId(1234);
+
+        layout.setProgressBarShown(true);
+
+        SparseArray<Parcelable> container = new SparseArray<>();
+        layout.saveHierarchyState(container);
+
+        final SetupWizardLayout layout2 = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout2.setId(1234);
+        layout2.restoreHierarchyState(container);
+
+        assertTrue("Progress bar should be shown", layout2.isProgressBarShown());
+    }
+
+    @SmallTest
+    public void testOnRestoreFromIncompatibleInstanceState() {
+        final SetupWizardLayout layout = new SetupWizardLayout(mContext);
+        // noinspection ResourceType
+        layout.setId(1234);
+
+        SparseArray<Parcelable> container = new SparseArray<>();
+        container.put(1234, AbsSavedState.EMPTY_STATE);
+        layout.restoreHierarchyState(container);
+
+        // SetupWizardLayout shouldn't crash with incompatible Parcelable
+
+        assertFalse("Progress bar should not be shown", layout.isProgressBarShown());
+    }
+
     private void assertDefaultTemplateInflated(SetupWizardLayout layout) {
         View decorView = layout.findViewById(R.id.suw_layout_decor);
         View navbar = layout.findViewById(R.id.suw_layout_navigation_bar);
