diff --git a/src/core/utils.js b/src/core/utils.js
index 6d46d56d315854d6681799ce55d0ba58f587e847..b22847d011959ca9b3baf1616d72c532b08f8ff2 100644
--- a/src/core/utils.js
+++ b/src/core/utils.js
@@ -178,7 +178,7 @@ function merge(a, b) {
       a[key] = a[key] || [];
       // fix #292 - skip duplicated values from merge object (b)
       b[key].forEach(value => {
-        if (a[key].indexOf(value) === -1) {
+        if (Array.isArray(a[key]) && a[key].indexOf(value) === -1) {
           a[key].push(value);
         }
       });
diff --git a/src/types/object.js b/src/types/object.js
index f4e0f2e45f431dd931da86cde6def8936517fe6c..e26aa5eb71734b762c1857b3e4a9e68941b1a5d7 100644
--- a/src/types/object.js
+++ b/src/types/object.js
@@ -50,10 +50,10 @@ function objectType(value, path, resolve, traverseCallback) {
   const fixedProbabilities = optionAPI('alwaysFakeOptionals') || optionAPI('fixedProbabilities') || false;
   const ignoreProperties = optionAPI('ignoreProperties') || [];
 
-  const min = Math.max(value.minProperties || 0, random.number(requiredProperties.length, allProperties.length));
+  const min = Math.max(value.minProperties || 0, requiredProperties.length);
   const max = value.maxProperties || (allProperties.length + (allowsAdditional ? random.number(1, 5) : 0));
 
-  let neededExtras = Math.max(0, min - requiredProperties.length);
+  let neededExtras = Math.max(0, allProperties.length - min);
 
   if (allProperties.length === 1 && !requiredProperties.length) {
     neededExtras = random.number(neededExtras, allProperties.length + (allProperties.length - min));