diff --git a/.travis.yml b/.travis.yml
index 1c368728aba400009d4f12b0266e5e09098ac10b..22f5006fd3e66cbf1b1dcb9d939a848ee9e5ce53 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,6 +2,7 @@ language: node_js
 branches:
   only:
     - master
+    - extending-dependencies
 node_js:
   - 0.10
 before_script:
diff --git a/README.md b/README.md
index ff8b8cc6559d0d57ac6a8327da272a2572ebf429..e8c202814a83399e27948a3c9ff582433c91daa5 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,9 @@ Fake your schemas!
 
 [![Build Status](https://travis-ci.org/pateketrueke/json-schema-faker.png?branch=master)](https://travis-ci.org/pateketrueke/json-schema-faker) [![NPM version](https://badge.fury.io/js/json-schema-faker.png)](http://badge.fury.io/js/json-schema-faker)  [![Coverage Status](https://coveralls.io/repos/pateketrueke/json-schema-faker/badge.png?branch=master)](https://coveralls.io/r/pateketrueke/json-schema-faker?branch=master)
 
-`json-schema-faker` supports (currently) the JSON-Schema specification **draft-04** only (?)
+[![npm version](https://badge.fury.io/js/json-schema-faker.svg)](http://badge.fury.io/js/json-schema-faker)
+
+`json-schema-faker` supports (currently) the JSON-Schema specification **draft-04** only.
 
 ```javascript
 var jsf = require('json-schema-faker');
diff --git a/lib/index.js b/lib/index.js
index 9d1910a6ff4ba410125af828c143e6d0eaebbee4..add3f48753d677aeffd0076ddc03c12a9e3645bb 100644
Binary files a/lib/index.js and b/lib/index.js differ
diff --git a/lib/types/object.js b/lib/types/object.js
index 9ebd2fb00fd64e8e36b611660d97a4290c275542..752a16b51a3f741c806200e2f538c57e1c8397bf 100644
Binary files a/lib/types/object.js and b/lib/types/object.js differ
diff --git a/lib/types/string.js b/lib/types/string.js
index 8438f3a60d66d958e313116df311a94b04be5d7c..ff328ad72dcd7082e852525bdbb0c6857f516803 100644
Binary files a/lib/types/string.js and b/lib/types/string.js differ
diff --git a/lib/util/container.js b/lib/util/container.js
new file mode 100644
index 0000000000000000000000000000000000000000..df9972353f946c20b0af69527a5157b9bd96775a
Binary files /dev/null and b/lib/util/container.js differ
diff --git a/lib/util/random.js b/lib/util/random.js
index d9fd0cd60437af6ebe3e94a23cef5cfe4dc416b4..1d7404554b592d522833b407141d7f84f18fa03d 100644
Binary files a/lib/util/random.js and b/lib/util/random.js differ
diff --git a/package.json b/package.json
index 727f37ba15d785dd3c26447a2145cf2f940e7e46..d472c77a474e6cb4e47bb0e6fcf1f9814dcfea83 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,17 @@
 {
   "name": "json-schema-faker",
-  "version": "0.1.6",
+  "version": "0.1.8",
   "description": "JSON-Schema + Faker",
   "main": "lib/index.js",
   "author": {
     "name": "Alvaro Cabrera",
     "email": "pateketrueke@gmail.com"
   },
+  "contributors": [{
+    "name": "Tomasz Ducin",
+    "email": "tomasz.ducin@gmail.com",
+    "url": "http://ducin.it"
+  }],
   "repository": {
     "type": "git",
     "url": "https://github.com/pateketrueke/json-schema-faker"
@@ -23,7 +28,7 @@
     "z-schema": "^3.3.1"
   },
   "dependencies": {
-    "chance": "^0.7.4",
+    "chance": "^0.7.5",
     "deref": "^0.2.8",
     "faker": "^2.1.2",
     "randexp": "^0.4.0"
diff --git a/spec/core/customize/faker-extend.js b/spec/core/customize/faker-extend.js
new file mode 100644
index 0000000000000000000000000000000000000000..c66c5a6b1658a3cb5fe0b87ffbad961d7f9f22f7
--- /dev/null
+++ b/spec/core/customize/faker-extend.js
@@ -0,0 +1,20 @@
+module.exports = {
+    extend: function (faker) {
+        faker.locale = "de";
+
+        faker.mixin = function (namespace, fnObject) {
+            faker[namespace] = fnObject;
+        };
+
+        faker.mixin('custom', {
+            statement: function (length) {
+                return faker.name.firstName() + " has " + faker.finance.amount() + " on " + faker.finance.account(length) + ".";
+            }
+        });
+
+        return faker;
+    },
+    register: function(jsfaker) {
+        return jsfaker.customize('faker', this.extend);
+    }
+};
diff --git a/spec/core/customize/faker.json b/spec/core/customize/faker.json
new file mode 100644
index 0000000000000000000000000000000000000000..1f73c00c02cfe2aa1f578e2cff8a330fc2576f29
--- /dev/null
+++ b/spec/core/customize/faker.json
@@ -0,0 +1,18 @@
+[
+  {
+    "description": "generated extended faker",
+    "tests": [
+      {
+        "description": "should handle faker.custom.statement",
+        "schema": {
+          "type": "string",
+          "faker": {
+              "custom.statement": [19]
+          }
+        },
+        "valid": true,
+        "require": "core/customize/faker-extend"
+      }
+    ]
+  }
+]
diff --git a/spec/core/formats/semver.js b/spec/core/formats/semver.js
new file mode 100644
index 0000000000000000000000000000000000000000..b5b813b41d0371d9dfd6b0ce5115225a5dcd3a10
--- /dev/null
+++ b/spec/core/formats/semver.js
@@ -0,0 +1,9 @@
+module.exports = {
+    register: function (jsf) {
+        return jsf.formats({
+            semver: function (gen, schema) {
+                return gen.randexp('\\d\\.\\d\\.[1-9]\\d?');
+            }
+        });
+    }
+};
diff --git a/spec/core/issues/format.json b/spec/core/issues/format.json
index d5f6b747140adfea33ef401d05f1c0d2ca5d6f5e..b1096f1e4daf0f292d79bbfb29c0b6e0da65b5d6 100644
--- a/spec/core/issues/format.json
+++ b/spec/core/issues/format.json
@@ -16,7 +16,8 @@
           "type": "string",
           "format": "semver"
         },
-        "valid": true
+        "valid": true,
+        "require": "core/formats/semver"
       },
       {
         "description": "should support faker/chance on numeric types",
diff --git a/spec/helpers.coffee b/spec/helpers.coffee
index bb009d69420a27627b94c9ee802fc87cd81fc868..f5b6efb73520f7fa74c8e645c4c797d4c88867db 100644
--- a/spec/helpers.coffee
+++ b/spec/helpers.coffee
@@ -3,7 +3,7 @@ clone = require('clone')
 ZSchema = require('z-schema')
 JaySchema = require('jayschema')
 
-formatValidators = require('./formats').validate
+formatValidators = require('./validator').validate
 
 [tv4, ZSchema].map formatValidators
 
diff --git a/spec/main-spec.coffee b/spec/main-spec.coffee
index 7ee94e442f5d9c647dd950d9f890e87817ab8e5b..d67b64a3e5d9f8d730354bb0f9706c7a222005d9 100644
--- a/spec/main-spec.coffee
+++ b/spec/main-spec.coffee
@@ -3,8 +3,6 @@ glob = require('glob')
 deref = require('deref')
 jsfaker = require('../lib')
 
-require('./formats').register(jsfaker)
-
 pick = (obj, key) ->
   parts = key.split('.')
   obj = obj[parts.shift()] while parts.length
@@ -39,6 +37,9 @@ glob.sync("#{__dirname}/**/*.json").forEach (file) ->
           error = ''
 
           sample = try
+            if test.require
+              wrapper = require('./' + test.require)
+              wrapper.register(jsfaker)
             jsfaker(schema, refs)
           catch e
             error = e.message
@@ -60,6 +61,7 @@ glob.sync("#{__dirname}/**/*.json").forEach (file) ->
               refs = [schema] if schema.id
               expect(sample).toHaveSchema schema, refs
             catch e
-              console.log JSON.stringify(schema, null, 2)
-              console.log JSON.stringify(sample, null, 2)
+              console.log suite.description
+              console.log 'schema', JSON.stringify(schema, null, 2)
+              console.log 'sample', JSON.stringify(sample, null, 2)
               throw e
diff --git a/spec/formats.coffee b/spec/validator.coffee
similarity index 78%
rename from spec/formats.coffee
rename to spec/validator.coffee
index 990e071bde45033cd93dd0e08043abea1e121c1e..51fbe716ef2384db078b914827a05df69d114f1d 100644
--- a/spec/formats.coffee
+++ b/spec/validator.coffee
@@ -1,11 +1,6 @@
 semver = require('semver')
 
 module.exports =
-  register: (jsf) ->
-    jsf.formats
-      semver: (gen, schema) ->
-        gen.randexp '\\d\\.\\d\\.[1-9]\\d?'
-
   validate: (v) ->
     registry = v.addFormat or v.registerFormat
     msgOnFail = not v.registerFormat