diff --git a/dist/json-schema-faker.js b/dist/json-schema-faker.js
index 10fa2502d5afeaf259f47f384ddda8e5cb405fd6..476626f735c9be72f7beb91b47eddc7e4296a52e 100644
Binary files a/dist/json-schema-faker.js and b/dist/json-schema-faker.js differ
diff --git a/dist/json-schema-faker.min.js b/dist/json-schema-faker.min.js
index 58883d08c0e075fd9b5f62965d95a4ef660d81e8..5285763f63ed25d7d557c0b59aec4c90e3a198cd 100644
Binary files a/dist/json-schema-faker.min.js and b/dist/json-schema-faker.min.js differ
diff --git a/dist/locale/de.js b/dist/locale/de.js
index 114b86c80512e98c16b43c5fbc1275e3388b0d79..413318dd166d2eeaea2a6648e290a146eacc8445 100644
Binary files a/dist/locale/de.js and b/dist/locale/de.js differ
diff --git a/dist/locale/de.min.js b/dist/locale/de.min.js
index 8b622ee2f73bd598ef3e1b5ebea90f17dea80d07..e04c02aeb590841a28455d1c1f9975e11e5b910d 100644
Binary files a/dist/locale/de.min.js and b/dist/locale/de.min.js differ
diff --git a/dist/locale/de_AT.js b/dist/locale/de_AT.js
index 21b4d5eff7ad7e0ebb95c22214707f52c16d7d11..c995ea73f8a4a375ac1bac87e303cc99abbea9e8 100644
Binary files a/dist/locale/de_AT.js and b/dist/locale/de_AT.js differ
diff --git a/dist/locale/de_AT.min.js b/dist/locale/de_AT.min.js
index 5f357c5e5fb23289e4494f9ad09c2356de2e93a6..17a26f9276cd356f1a7f55f8276d5a0f08576de1 100644
Binary files a/dist/locale/de_AT.min.js and b/dist/locale/de_AT.min.js differ
diff --git a/dist/locale/de_CH.js b/dist/locale/de_CH.js
index 8767e1ccee990c627d55ba7f5ee187933f19556a..e02750ba2022a7d0db6330c692082d1ab1c04349 100644
Binary files a/dist/locale/de_CH.js and b/dist/locale/de_CH.js differ
diff --git a/dist/locale/de_CH.min.js b/dist/locale/de_CH.min.js
index 205c78cb5541e79e564847750b752e3d21f5e839..9858d8aaf02a141d9a47d9bd39e8e807c07041eb 100644
Binary files a/dist/locale/de_CH.min.js and b/dist/locale/de_CH.min.js differ
diff --git a/dist/locale/en.js b/dist/locale/en.js
index 9a836021b8899905aa107a4ee934c19582fc6c4d..4e5c13215b0d88d6622279a2e92f339c28380494 100644
Binary files a/dist/locale/en.js and b/dist/locale/en.js differ
diff --git a/dist/locale/en.min.js b/dist/locale/en.min.js
index 808194ac0b7017f943c6219638da20a069ee9975..e39a4d9df70f90f1bc1dad4f6e72b8d13bbca5fe 100644
Binary files a/dist/locale/en.min.js and b/dist/locale/en.min.js differ
diff --git a/dist/locale/en_AU.js b/dist/locale/en_AU.js
index 91ef4a7bdb9db04d02c155d223fd402cc4ccfe1d..6e0d1b02a3df004c65b44ba4e8d90e7870b3a390 100644
Binary files a/dist/locale/en_AU.js and b/dist/locale/en_AU.js differ
diff --git a/dist/locale/en_AU.min.js b/dist/locale/en_AU.min.js
index 8b8f0e40e26a38bc5897981b35f7e72ec2102e90..462874d5ec3a5a5a6c0f1b8770c3ec727e698b57 100644
Binary files a/dist/locale/en_AU.min.js and b/dist/locale/en_AU.min.js differ
diff --git a/dist/locale/en_BORK.js b/dist/locale/en_BORK.js
index dc6aa63ab3b90477321c95d5bc2ada5781690755..106fe02f777a045e11f0607bb41c14c3ca68b825 100644
Binary files a/dist/locale/en_BORK.js and b/dist/locale/en_BORK.js differ
diff --git a/dist/locale/en_BORK.min.js b/dist/locale/en_BORK.min.js
index c87c1a60bfd43e939891dee1a45e32a2ccf59508..890f886fcc890912e970c3466a0a59c9b7f801fa 100644
Binary files a/dist/locale/en_BORK.min.js and b/dist/locale/en_BORK.min.js differ
diff --git a/dist/locale/en_CA.js b/dist/locale/en_CA.js
index 76796e44821cb509ad3f72b036c84f252d9cb97f..61a62de6eb7492273c3d7c0b1f5da35eca861f2c 100644
Binary files a/dist/locale/en_CA.js and b/dist/locale/en_CA.js differ
diff --git a/dist/locale/en_CA.min.js b/dist/locale/en_CA.min.js
index 9b7abfc62be886e45b99239557c433ade14accf0..f36a83e47e146309aca0bd82e059eb94d3a9fc9e 100644
Binary files a/dist/locale/en_CA.min.js and b/dist/locale/en_CA.min.js differ
diff --git a/dist/locale/en_GB.js b/dist/locale/en_GB.js
index 1fb94564878e58c1fddbcafe464e6cdb57aa0710..eca0888b8c236a93fd6f25203a09ab0b76bb2d9f 100644
Binary files a/dist/locale/en_GB.js and b/dist/locale/en_GB.js differ
diff --git a/dist/locale/en_GB.min.js b/dist/locale/en_GB.min.js
index 5bba82bd3193addc91c1524efe12de5278c0c32c..5fb41be67cc61bb2c42e5752776086f50ab674c9 100644
Binary files a/dist/locale/en_GB.min.js and b/dist/locale/en_GB.min.js differ
diff --git a/dist/locale/en_IE.js b/dist/locale/en_IE.js
index 104f471ef4685016603f673671c801834f5f304c..38ac4ff51db850752da82c7133ba00fbffd6e594 100644
Binary files a/dist/locale/en_IE.js and b/dist/locale/en_IE.js differ
diff --git a/dist/locale/en_IE.min.js b/dist/locale/en_IE.min.js
index 00a1173df0fdf058379ff17f545bb427a4819ca1..0ae6bb442d18d09f7d848a007e9c40c9d0eae9b5 100644
Binary files a/dist/locale/en_IE.min.js and b/dist/locale/en_IE.min.js differ
diff --git a/dist/locale/en_IND.js b/dist/locale/en_IND.js
index 5bb331c7fc427d12c98d0dc98e2c2d239b32c445..212221bff637ecf8152339dbb6d612c41c11b240 100644
Binary files a/dist/locale/en_IND.js and b/dist/locale/en_IND.js differ
diff --git a/dist/locale/en_IND.min.js b/dist/locale/en_IND.min.js
index 4bbebc04421f611ec00239e80277cd285854d1eb..f726865f62b327786dac19dfd628a1f631797cbf 100644
Binary files a/dist/locale/en_IND.min.js and b/dist/locale/en_IND.min.js differ
diff --git a/dist/locale/en_US.js b/dist/locale/en_US.js
index aca4453ffa2a0c41f79fe6d57e1dfc62ff85a696..78c1b2f30977e64370ec097b8e08c5f0bee70bb4 100644
Binary files a/dist/locale/en_US.js and b/dist/locale/en_US.js differ
diff --git a/dist/locale/en_US.min.js b/dist/locale/en_US.min.js
index 58aaa2bc928559d6291dbd0efa7e72d9eada52ca..1bde2848f2874a6230664bccc6ad9bab6d63dd37 100644
Binary files a/dist/locale/en_US.min.js and b/dist/locale/en_US.min.js differ
diff --git a/dist/locale/en_au_ocker.js b/dist/locale/en_au_ocker.js
index f91aedf09ead9d44943952687219f5778d301196..e0318446f83ef455feacb9b5ba342ac7611257ad 100644
Binary files a/dist/locale/en_au_ocker.js and b/dist/locale/en_au_ocker.js differ
diff --git a/dist/locale/en_au_ocker.min.js b/dist/locale/en_au_ocker.min.js
index 741594562b2f35549c9f09d52389b335fda018fb..60317acb77dc8f5604e91a6d14b15ac51d5b754e 100644
Binary files a/dist/locale/en_au_ocker.min.js and b/dist/locale/en_au_ocker.min.js differ
diff --git a/dist/locale/es.js b/dist/locale/es.js
index 5c1ffde2a9e9c264447e6afc1fb6c572144ea804..531470e707e24899459c01fd419353ce83130680 100644
Binary files a/dist/locale/es.js and b/dist/locale/es.js differ
diff --git a/dist/locale/es.min.js b/dist/locale/es.min.js
index 683831202a806153d927af041ca16cfb60d9287b..7de1ea8bb30710451a6938c56edc46b6a3d75dae 100644
Binary files a/dist/locale/es.min.js and b/dist/locale/es.min.js differ
diff --git a/dist/locale/es_MX.js b/dist/locale/es_MX.js
index 008a319afd74db1eef1c09c5da20d208ff136ea0..278a1deadb9b680eabacf16418b798368d22f8dd 100644
Binary files a/dist/locale/es_MX.js and b/dist/locale/es_MX.js differ
diff --git a/dist/locale/es_MX.min.js b/dist/locale/es_MX.min.js
index ad696c6c8e312fdba55b3ed2aa9f68bdfb23c14c..6d1fe3a04f73f2443d9f84b525eb416b92c64a3f 100644
Binary files a/dist/locale/es_MX.min.js and b/dist/locale/es_MX.min.js differ
diff --git a/dist/locale/fa.js b/dist/locale/fa.js
index d0ab24db6e196a1eee9ff76fa76e5e88d16b871f..fd9c07295a7c3ecbfb8b9445a7fedf1bc10e8f62 100644
Binary files a/dist/locale/fa.js and b/dist/locale/fa.js differ
diff --git a/dist/locale/fa.min.js b/dist/locale/fa.min.js
index b7f264aca91958ded9465f0bb6d2774e8a8d865d..45f623c66812acf87a7ae148060c8f622a8fec40 100644
Binary files a/dist/locale/fa.min.js and b/dist/locale/fa.min.js differ
diff --git a/dist/locale/fr.js b/dist/locale/fr.js
index 33c679a7a3fd772b7e5b77cf1234ff45025e9571..d179ad5ba8e603501c50b2d5ee1648534b96737d 100644
Binary files a/dist/locale/fr.js and b/dist/locale/fr.js differ
diff --git a/dist/locale/fr.min.js b/dist/locale/fr.min.js
index 59500083fd939d442a0a640b32b69614527a2a1e..2efd9d9f00fa151a8786b04946c5694181f7bba7 100644
Binary files a/dist/locale/fr.min.js and b/dist/locale/fr.min.js differ
diff --git a/dist/locale/fr_CA.js b/dist/locale/fr_CA.js
index 3eb2bad98e1adbb3418df63ffd539f52dfbcd8b8..2f992a581ad68e0f357cff0dae17533b1948e810 100644
Binary files a/dist/locale/fr_CA.js and b/dist/locale/fr_CA.js differ
diff --git a/dist/locale/fr_CA.min.js b/dist/locale/fr_CA.min.js
index 25c5c5a3483f596e8a1a619191e489331c6d9327..2b8643804309bddcc4b1adf21bc8cb501bd431d9 100644
Binary files a/dist/locale/fr_CA.min.js and b/dist/locale/fr_CA.min.js differ
diff --git a/dist/locale/ge.js b/dist/locale/ge.js
index 2ccb84e590e1d0914f8ec61410a458b4401f0ea5..b5aee7b9dc652f8334a97664a160666fbb381bad 100644
Binary files a/dist/locale/ge.js and b/dist/locale/ge.js differ
diff --git a/dist/locale/ge.min.js b/dist/locale/ge.min.js
index 4caa5b56d7872a88b25d6d0b49dbc87e9ff9240f..c588704d58a125a39529aa0a19c86604b01f3cf1 100644
Binary files a/dist/locale/ge.min.js and b/dist/locale/ge.min.js differ
diff --git a/dist/locale/it.js b/dist/locale/it.js
index aedd82fda6788bb11f929341c8ae595369e6e60d..cfb7d60f0ea4c37b4fdb9560160401859b7ec1f3 100644
Binary files a/dist/locale/it.js and b/dist/locale/it.js differ
diff --git a/dist/locale/it.min.js b/dist/locale/it.min.js
index ad6c866c1f9e019da228cbc71929fd519c28cbf6..ddafa931f0c1cc541639c131c629d836c3407180 100644
Binary files a/dist/locale/it.min.js and b/dist/locale/it.min.js differ
diff --git a/dist/locale/ja.js b/dist/locale/ja.js
index 11d2d7528a3f0262df411e559d1bdbf44c47627b..e490e0728d2fe367f9d7bcce2fd41e994fd38413 100644
Binary files a/dist/locale/ja.js and b/dist/locale/ja.js differ
diff --git a/dist/locale/ja.min.js b/dist/locale/ja.min.js
index f7839bbb95519a9afb73a1ec9a14ca5e92128e59..2e2ab56812239a3927ae7529d52a79994e4a0eed 100644
Binary files a/dist/locale/ja.min.js and b/dist/locale/ja.min.js differ
diff --git a/dist/locale/ko.js b/dist/locale/ko.js
index bed8344fbc562aff4abea7c441631d88674999b3..a49da7ab7d96de8431465d289e13aed104637357 100644
Binary files a/dist/locale/ko.js and b/dist/locale/ko.js differ
diff --git a/dist/locale/ko.min.js b/dist/locale/ko.min.js
index 3262287e52b37a69fdef2c33b2c18405b2e46fb5..35281e9c2a29e788c90a4892b3911529560fa84f 100644
Binary files a/dist/locale/ko.min.js and b/dist/locale/ko.min.js differ
diff --git a/dist/locale/nb_NO.js b/dist/locale/nb_NO.js
index 630e2bd49b4574ecc04d1a5e373f137d57ce2b56..12d6bd389a59f526993ca3c6995c35f0dee1d9ac 100644
Binary files a/dist/locale/nb_NO.js and b/dist/locale/nb_NO.js differ
diff --git a/dist/locale/nb_NO.min.js b/dist/locale/nb_NO.min.js
index 014905b537435867ad36b17ef24f17418c66ed7b..5242259595a5c11597c619548070daf281fdd858 100644
Binary files a/dist/locale/nb_NO.min.js and b/dist/locale/nb_NO.min.js differ
diff --git a/dist/locale/nep.js b/dist/locale/nep.js
index cec7d592c06ab980b978aa5f8f1ac09cfe567723..4a6c14b76cd160a1bb1538c226e2b69dffa9c78f 100644
Binary files a/dist/locale/nep.js and b/dist/locale/nep.js differ
diff --git a/dist/locale/nep.min.js b/dist/locale/nep.min.js
index ab8393650cc51fd16c4ee5123edda13c0be69c42..4102f885f2dfcd222a20058c0a5fea146957e77b 100644
Binary files a/dist/locale/nep.min.js and b/dist/locale/nep.min.js differ
diff --git a/dist/locale/nl.js b/dist/locale/nl.js
index 610e658fa50fc438f8f502712c25f16c740476bc..a86132857c467f9fa3ae89079c82e9a0e93cbc41 100644
Binary files a/dist/locale/nl.js and b/dist/locale/nl.js differ
diff --git a/dist/locale/nl.min.js b/dist/locale/nl.min.js
index e56614598ca613f1951a502dd1ec025649ff86f8..aa7a74eb1c7c045bd1b6eae1dbab0040cfa39765 100644
Binary files a/dist/locale/nl.min.js and b/dist/locale/nl.min.js differ
diff --git a/dist/locale/pl.js b/dist/locale/pl.js
index 15adc17484669bcee76e47c31d7a041e50b66250..6bc73a8a97ac1e9092f60b7bd3e4721f5c300f10 100644
Binary files a/dist/locale/pl.js and b/dist/locale/pl.js differ
diff --git a/dist/locale/pl.min.js b/dist/locale/pl.min.js
index 3c2c0b540d5cc4e1763afe5182a6738edddd8d1a..427a990f47e74386d0d791318fce74a8582bdbc5 100644
Binary files a/dist/locale/pl.min.js and b/dist/locale/pl.min.js differ
diff --git a/dist/locale/pt_BR.js b/dist/locale/pt_BR.js
index b6a5b40658b785aeed2c8fe7e3728e85ba0b757a..b103d8eb3ae3d4ccf7d8063c4499a55a463c7b29 100644
Binary files a/dist/locale/pt_BR.js and b/dist/locale/pt_BR.js differ
diff --git a/dist/locale/pt_BR.min.js b/dist/locale/pt_BR.min.js
index 00a968f8686db945282b21d6fdd877b6b75b14d7..0e19fa24b5c40a1b4657de8fa62159b3db2827c7 100644
Binary files a/dist/locale/pt_BR.min.js and b/dist/locale/pt_BR.min.js differ
diff --git a/dist/locale/ru.js b/dist/locale/ru.js
index b204a7bf4b59c25321abc2a0f42da40c384b427a..9aa0ed948933fa4e9b633e2d09c830450bc370bc 100644
Binary files a/dist/locale/ru.js and b/dist/locale/ru.js differ
diff --git a/dist/locale/ru.min.js b/dist/locale/ru.min.js
index 702c8cc7fff1ed9af3281054d68e51e507afdfca..a44ff6ff6e9f673dee970d361d261a2b549c38a6 100644
Binary files a/dist/locale/ru.min.js and b/dist/locale/ru.min.js differ
diff --git a/dist/locale/sk.js b/dist/locale/sk.js
index 39fb302b8705f137add6b3a1bfb4b9722fe23b04..4013721f75d1544d411c28a11dee69bd1e37a611 100644
Binary files a/dist/locale/sk.js and b/dist/locale/sk.js differ
diff --git a/dist/locale/sk.min.js b/dist/locale/sk.min.js
index c87bfef0c2469a8ac70e736908b10f2001ac087e..797d67603769bcdd5406b886c1acc79cca010517 100644
Binary files a/dist/locale/sk.min.js and b/dist/locale/sk.min.js differ
diff --git a/dist/locale/sv.js b/dist/locale/sv.js
index d9f2b6669a3caf768a70ccc33c2c315b42cacf6b..229e6fe47f09f11f36c3f0d8630dca95fdb58809 100644
Binary files a/dist/locale/sv.js and b/dist/locale/sv.js differ
diff --git a/dist/locale/sv.min.js b/dist/locale/sv.min.js
index 0cc2ee099bec01be43a7a9d42fa4382f0a967f33..50e4e486f65324e2d12eae1d8a356a675de8751e 100644
Binary files a/dist/locale/sv.min.js and b/dist/locale/sv.min.js differ
diff --git a/dist/locale/tr.js b/dist/locale/tr.js
index 21d87cd231ba1d1dd991c405e0c35fccb510fc91..ab4703485a8b8dd59454df177349a69eab02a072 100644
Binary files a/dist/locale/tr.js and b/dist/locale/tr.js differ
diff --git a/dist/locale/tr.min.js b/dist/locale/tr.min.js
index 0aa922627ff84b7efd408e7f1424bbd395c4e9ab..4906d66d31b573042ea3618360fff68ebc30489f 100644
Binary files a/dist/locale/tr.min.js and b/dist/locale/tr.min.js differ
diff --git a/dist/locale/uk.js b/dist/locale/uk.js
index 72da3638a779159d92b6bf1a38ba163c2452d831..0bd9af4c55d9dc1ea7f7fda9ef70939c2c69d272 100644
Binary files a/dist/locale/uk.js and b/dist/locale/uk.js differ
diff --git a/dist/locale/uk.min.js b/dist/locale/uk.min.js
index d3f0fe69e098eef33cc91780e1c4dda6e9800705..21821431d1e02adbd2d5ac96f0c24705f17b117c 100644
Binary files a/dist/locale/uk.min.js and b/dist/locale/uk.min.js differ
diff --git a/dist/locale/vi.js b/dist/locale/vi.js
index d4c0206103ae20bf7f3ec4de30840be050aa91ea..dd2ecd65ba80af3602f91e56ed327eafad1847bd 100644
Binary files a/dist/locale/vi.js and b/dist/locale/vi.js differ
diff --git a/dist/locale/vi.min.js b/dist/locale/vi.min.js
index 6cb5c98b2efb8c8c3506dc456a67914cccc28699..4e22df433bea2007394cac06a8bb68ad31def10b 100644
Binary files a/dist/locale/vi.min.js and b/dist/locale/vi.min.js differ
diff --git a/dist/locale/zh_CN.js b/dist/locale/zh_CN.js
index 43f1c942f57831271f57833ab4a3017bdf66cc79..bde152fa736a42113faedef7a8ad548eea5ddcb3 100644
Binary files a/dist/locale/zh_CN.js and b/dist/locale/zh_CN.js differ
diff --git a/dist/locale/zh_CN.min.js b/dist/locale/zh_CN.min.js
index 32352d975ae7e9f7b632217fe75bcac1bf734f37..adb6443f267cc4876c7c111c36252bbfd865c431 100644
Binary files a/dist/locale/zh_CN.min.js and b/dist/locale/zh_CN.min.js differ
diff --git a/dist/locale/zh_TW.js b/dist/locale/zh_TW.js
index 87b913ebf9bf6de175b1ba72920298eb4145f536..e02e20daaddc5702eadf6400a122b65e04761809 100644
Binary files a/dist/locale/zh_TW.js and b/dist/locale/zh_TW.js differ
diff --git a/dist/locale/zh_TW.min.js b/dist/locale/zh_TW.min.js
index 3227d1c24a8ea947e541f8d685884536b6901d78..645f3e5f172bc6686c09d9847c791fd8ee1516e0 100644
Binary files a/dist/locale/zh_TW.min.js and b/dist/locale/zh_TW.min.js differ
diff --git a/lib/core/clean.js b/lib/core/clean.js
index f2487c21893e89cdfcc9ac71f3384e70937df9bc..804d448bbde0d219372f511a1ca59c5cbcdb5b7a 100644
Binary files a/lib/core/clean.js and b/lib/core/clean.js differ
diff --git a/lib/core/traverse.js b/lib/core/traverse.js
index 379910ec781847cd02fc9f6f035c95bd558a5a3d..ee263e57516aca4dde6bc4ec78f65b79db6c021f 100644
Binary files a/lib/core/traverse.js and b/lib/core/traverse.js differ
diff --git a/lib/types/object.js b/lib/types/object.js
index 07726e069d5aad679c375a32a1566c59d691ee64..bb0fa593b770225dc31a0ac9165df699a574bc5d 100644
Binary files a/lib/types/object.js and b/lib/types/object.js differ
diff --git a/package.json b/package.json
index 6d369496bd1e0e920eff338a92e91c6127f155f1..e6b8d6954d119582c9aca3b116b054be8e06749c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "json-schema-faker",
-  "version": "0.4.1",
+  "version": "0.4.2",
   "description": "JSON-Schema + fake data generators",
   "homepage": "http://json-schema-faker.js.org",
   "main": "index.js",
diff --git a/spec/schema/core/issues/empty-props.json b/spec/schema/core/issues/empty-props.json
index 991f0ee926b57a8432c7e8b1f7ad4815e74ae007..d6f1311766afcd9c2ad8bb6610cd1271b6b488df 100644
--- a/spec/schema/core/issues/empty-props.json
+++ b/spec/schema/core/issues/empty-props.json
@@ -4,6 +4,26 @@
     "tests": [
       {
         "description": "should remove empty objects, e.g. [] {}",
+        "schema": {
+          "type": "object",
+          "properties": {
+            "foo": { "$ref": "#/definitions/baz" }
+          },
+          "definitions": {
+            "baz": {
+              "type": "array",
+              "items": {
+                "anyOf": [
+                  { "$ref": "#/definitions/baz" }
+                ]
+              }
+            }
+          }
+        },
+        "equal": {}
+      },
+      {
+        "description": "should leave props when required",
         "schema": {
           "type": "object",
           "properties": {
@@ -21,7 +41,9 @@
           },
           "required": ["foo"]
         },
-        "nonEmpty": true
+        "equal": {
+          "foo": []
+        }
       }
     ]
   }
diff --git a/spec/schema/helpers.coffee b/spec/schema/helpers.coffee
index 5ca792b9ce549fe8e71489e88727c8bbfd4ccc92..bcbee43100c57a2a21c07aa9e63ba10d1687827b 100644
--- a/spec/schema/helpers.coffee
+++ b/spec/schema/helpers.coffee
@@ -74,36 +74,3 @@ global.customMatchers =
 
       pass: !fail.length
       message: fail.join('\n') if fail.length
-
-  toHaveNonEmptyProps: ->
-    compare: (actual, expected) ->
-      fail = 0
-
-      test = (o) ->
-        if Array.isArray(o)
-          o = o.map(test).filter (x) ->
-            typeof x isnt 'undefined'
-
-          unless o.length
-            fail += 1
-            return
-
-        else if typeof o is 'object'
-          for k, v of o
-            f = test(v)
-
-            if typeof f is 'undefined'
-              delete o[k]
-            else
-              o[k] = f
-
-          unless Object.keys(o).length
-            fail += 1
-            return
-
-        o
-
-      safe = JSON.stringify actual
-
-      pass: fail is 0
-      message: "Object #{safe} has empty properties" if fail
diff --git a/spec/schema/main-spec.coffee b/spec/schema/main-spec.coffee
index a375d62625fa78b712ac80f2553c98a4ba66feeb..b6ed88ba5b2fea4e2f8c5faf7fc11289a79bdc12 100644
--- a/spec/schema/main-spec.coffee
+++ b/spec/schema/main-spec.coffee
@@ -39,10 +39,6 @@ tryTest = (test, refs, schema) ->
 
     expect(error).toMatch new RegExp(test.throws, 'im')
 
-  # strict checks
-  if test.nonEmpty
-    expect(sample).toHaveNonEmptyProps()
-
   if test.valid
     try
       expect(sample).toHaveSchema [schema, refs]
diff --git a/ts/core/clean.ts b/ts/core/clean.ts
index 4e8e8acf620ffdf7dfae6c69e7f1d055ea4e10cb..b23f1726f269f4e88d485412f46d6dddfe9e297c 100644
--- a/ts/core/clean.ts
+++ b/ts/core/clean.ts
@@ -20,7 +20,7 @@ function hasNothing(obj) {
   return typeof obj === 'undefined' || obj === null;
 }
 
-function removeProps(obj, key?, parent?) {
+function removeProps(obj, key?, parent?, required?) {
   var i,
       value,
       isFullyEmpty = true;
@@ -43,6 +43,12 @@ function removeProps(obj, key?, parent?) {
     for (i in obj) {
       value = obj[i];
 
+      if (required && required.indexOf(i) > -1) {
+        isFullyEmpty = false;
+        removeProps(value);
+        continue;
+      }
+
       if (isObject(value)) {
         removeProps(value, i, obj);
       }
@@ -61,7 +67,7 @@ function removeProps(obj, key?, parent?) {
   }
 }
 
-export = function(obj: any) {
-  removeProps(obj);
+export = function(obj: any, required?: Array<string>) {
+  removeProps(obj, undefined, undefined, required);
   return obj;
 };
diff --git a/ts/core/traverse.ts b/ts/core/traverse.ts
index 4883f0f9496a2b01e4a64c62ab8230664843edc5..8ceb630badb785f9b4851f391a6c1e3107449867 100644
--- a/ts/core/traverse.ts
+++ b/ts/core/traverse.ts
@@ -1,4 +1,3 @@
-import clean = require('./clean');
 import random = require('./random');
 import ParseError = require('./error');
 import inferType = require('./infer');
@@ -92,7 +91,7 @@ function traverse(schema: JsonSchema, path: SchemaPath, resolve: Function) {
     }
   }
 
-  return clean(copy);
+  return copy;
 }
 
 export = traverse;
diff --git a/ts/index.ts b/ts/index.ts
index 7457460042393b033cf92f5a37c144f79268546a..f100735095761b6e4836a950016c5a102b2bf75e 100644
--- a/ts/index.ts
+++ b/ts/index.ts
@@ -17,6 +17,6 @@ jsf.extend = function(name: string, cb: Function) {
   return jsf;
 };
 
-jsf.version = '0.4.0';
+jsf.version = '0.4.2';
 
 export = jsf;
diff --git a/ts/types/object.ts b/ts/types/object.ts
index ffac5507556599ca868f99dd269a8f5c23fc96a9..933b21d95f40afb0adf401197059c6d02dceba85 100644
--- a/ts/types/object.ts
+++ b/ts/types/object.ts
@@ -1,6 +1,7 @@
 import container = require('../class/Container');
 import random = require('../core/random');
 import words = require('../generators/words');
+import clean = require('../core/clean');
 import utils = require('../core/utils');
 import option = require('../api/option');
 import ParseError = require('../core/error');
@@ -41,8 +42,7 @@ var objectType: FTypeGenerator = function objectType(value: IObjectSchema, path,
                 props[key] = properties[key];
             }
         });
-
-        return traverseCallback(props, path.concat(['properties']), resolve);
+        return clean(traverseCallback(props, path.concat(['properties']), resolve), value.required);
     }
 
     var min = Math.max(value.minProperties || 0, requiredProperties.length);
@@ -123,7 +123,7 @@ var objectType: FTypeGenerator = function objectType(value: IObjectSchema, path,
         );
     }
 
-  return traverseCallback(props, path.concat(['properties']), resolve);
+  return clean(traverseCallback(props, path.concat(['properties']), resolve), value.required);
 };
 
 export = objectType;