diff --git a/src/core/run.js b/src/core/run.js
index 68244643abcaf1b78f06f9ede8ff64c5cad49408..255774338522a8a82e8ccd9939bb94158481e8e9 100644
--- a/src/core/run.js
+++ b/src/core/run.js
@@ -185,7 +185,7 @@ function run(refs, schema, container) {
 
           // call given thunks if present
           utils.merge(sub, typeof _sub.thunk === 'function'
-            ? _sub.thunk()
+            ? _sub.thunk(sub)
             : _sub);
         });
       }
@@ -200,24 +200,26 @@ function run(refs, schema, container) {
         }
 
         return {
-          thunk() {
+          thunk(rootSchema) {
             const copy = utils.omitProps(sub, ['anyOf', 'oneOf']);
             const fixed = random.pick(mix);
 
             utils.merge(copy, fixed);
 
-            if (sub.oneOf && copy.properties) {
-              mix.forEach(omit => {
-                if (omit !== fixed && omit.required) {
-                  omit.required.forEach(key => {
-                    // remove additional properties from merged schemas
-                    if (!copy.required.includes(key)) {
-                      delete copy.properties[key];
-                    }
-                  });
-                }
-              });
-            }
+            // remove additional properties from merged schemas
+            mix.forEach(omit => {
+              if (omit.required && omit !== fixed) {
+                omit.required.forEach(key => {
+                  if (copy.properties && !copy.required.includes(key)) {
+                    delete copy.properties[key];
+                  }
+
+                  if (rootSchema && rootSchema.properties) {
+                    delete rootSchema.properties[key];
+                  }
+                });
+              }
+            });
 
             return copy;
           },
diff --git a/src/core/traverse.js b/src/core/traverse.js
index 32135b121c4a83f4edb5340e96c9d6c4f93652d9..6258f0758bf3b3d7be1524b4effbe8da0ac1b948 100644
--- a/src/core/traverse.js
+++ b/src/core/traverse.js
@@ -54,7 +54,7 @@ function traverse(schema, path, resolve, rootSchema) {
 
   // thunks can return sub-schemas
   if (typeof schema.thunk === 'function') {
-    return traverse(schema.thunk(), path, resolve);
+    return traverse(schema.thunk(rootSchema), path, resolve);
   }
 
   if (typeof schema.generate === 'function') {