diff --git a/lib/class/Container.js b/lib/class/Container.js
index 132428e891309bea2eedc85cd55a1706e234a0df..be1c2403964a17ea4560da369a2a97da6c389027 100644
Binary files a/lib/class/Container.js and b/lib/class/Container.js differ
diff --git a/lib/core/traverse.js b/lib/core/traverse.js
index 4de3ba68dc256c93aa77ac30cff3495e4fab30fa..379910ec781847cd02fc9f6f035c95bd558a5a3d 100644
Binary files a/lib/core/traverse.js and b/lib/core/traverse.js differ
diff --git a/lib/core/utils.js b/lib/core/utils.js
index 461c71797777577aa9fb31393d6b154fa87a4974..8e4d201d5459edbe5a85f5161de783dcf3badb9e 100644
Binary files a/lib/core/utils.js and b/lib/core/utils.js differ
diff --git a/lib/types/external.js b/lib/types/external.js
index 937ea305cd6d5ad7e3afcefede58df96ea97be49..78d1ab2aae1f162492216e6d4dce4192ab0e38ee 100644
Binary files a/lib/types/external.js and b/lib/types/external.js differ
diff --git a/package.json b/package.json
index 9d6d0e405861b2bd97c30f82c7bd3646e897e825..a79e131999d6f6202a41605ef791c9a4de531421 100644
--- a/package.json
+++ b/package.json
@@ -43,6 +43,7 @@
   },
   "devDependencies": {
     "browserify": "^13.1.1",
+    "casual": "^1.5.8",
     "clone": "^2.1.0",
     "codecov": "^1.0.1",
     "eslint": "^3.10.2",
diff --git a/spec/schema/core/issues/chance-and-faker.json b/spec/schema/core/issues/chance-and-faker.json
index 5345e144d0b3042bae566d5bd1de18578eea1d69..8e7d19fa07766aeac8f07392c59632cc53bf39c2 100644
--- a/spec/schema/core/issues/chance-and-faker.json
+++ b/spec/schema/core/issues/chance-and-faker.json
@@ -8,7 +8,7 @@
           "chance": "url",
           "faker": "internet.email"
         },
-        "throws": "ambiguous generator when using both faker and chance: .+?"
+        "throws": "ambiguous generator .+: .+?"
       }
     ]
   }
diff --git a/ts/class/Container.ts b/ts/class/Container.ts
index 8323c1851668268390ba32aef34e2cb4ec835874..af41152ebf4eed7ed1a59b2d0d4d6002270f6847 100644
--- a/ts/class/Container.ts
+++ b/ts/class/Container.ts
@@ -14,7 +14,7 @@ type Registry = {
 };
 
 /**
- * Container is used to wrap external libraries (faker, chance, randexp) that are used among the whole codebase. These
+ * Container is used to wrap external libraries (faker, chance, casual, randexp) that are used among the whole codebase. These
  * libraries might be configured, customized, etc. and each internal JSF module needs to access those instances instead
  * of pure npm module instances. This class supports consistent access to these instances.
  */
@@ -27,6 +27,7 @@ class Container {
     this.registry = {
       faker: null,
       chance: null,
+      casual: null,
       // randexp is required for "pattern" values
       randexp: RandExp
     };
@@ -77,7 +78,8 @@ class Container {
     return {
       faker: this.get('faker'),
       chance: this.get('chance'),
-      randexp: this.get('randexp')
+      randexp: this.get('randexp'),
+      casual: this.get('casual')
     };
   }
 }
diff --git a/ts/core/traverse.ts b/ts/core/traverse.ts
index 9a9888156dda2166a810a9e2a077c0a4b4c15a5b..4883f0f9496a2b01e4a64c62ab8230664843edc5 100644
--- a/ts/core/traverse.ts
+++ b/ts/core/traverse.ts
@@ -6,7 +6,7 @@ import types = require('../types/index');
 import option = require('../api/option');
 
 function isExternal(schema: IGeneratorSchema): boolean {
-  return schema.faker || schema.chance;
+  return schema.faker || schema.chance || schema.casual;
 }
 
 function reduceExternal(schema: IGeneratorSchema, path: SchemaPath): IGeneratorSchema {
@@ -16,11 +16,17 @@ function reduceExternal(schema: IGeneratorSchema, path: SchemaPath): IGeneratorS
   if (schema['x-chance']) {
     schema.chance = schema['x-chance'];
   }
+  if (schema['x-casual']) {
+    schema.casual = schema['x-casual'];
+  }
+
+  var count: number = // sum and test later
+    (schema.faker !== undefined ? 1 : 0) +
+    (schema.chance !== undefined ? 1 : 0) +
+    (schema.casual !== undefined ? 1 : 0);
 
-  var fakerUsed: boolean = schema.faker !== undefined,
-    chanceUsed: boolean = schema.chance !== undefined;
-  if (fakerUsed && chanceUsed) {
-    throw new ParseError('ambiguous generator when using both faker and chance: ' + JSON.stringify(schema), path);
+  if (count > 1) {
+    throw new ParseError('ambiguous generator mixing faker, chance or casual: ' + JSON.stringify(schema), path);
   }
 
   return schema;
diff --git a/ts/core/utils.ts b/ts/core/utils.ts
index 8b843738679bfd7585c81205daa2d9bd930726f0..36365fd981939e494708da70201f3a158a2f2e0d 100644
--- a/ts/core/utils.ts
+++ b/ts/core/utils.ts
@@ -28,7 +28,7 @@ function hasProperties(obj: Object, ...properties: string[]): boolean {
 
 /**
  * Returns typecasted value.
- * External generators (faker, chance) may return data in non-expected formats, such as string, when you might expect an
+ * External generators (faker, chance, casual) may return data in non-expected formats, such as string, when you might expect an
  * integer. This function is used to force the typecast.
  *
  * @param value
diff --git a/ts/index.d.ts b/ts/index.d.ts
index 814694d4e06d04970dd22d8aefa33dcd70d1db7d..de8297238a442b5b56b69658438874b2478b3079 100644
--- a/ts/index.d.ts
+++ b/ts/index.d.ts
@@ -6,6 +6,8 @@ interface IGeneratorSchema {
   'x-faker'?: any;
   chance?: any;
   'x-chance'?: any;
+  casual?: any;
+  'x-casual'?: any;
 }
 
 interface IStringSchema extends IGeneratorSchema {
diff --git a/ts/types/external.ts b/ts/types/external.ts
index 46e52e16893607fb1ff46d4b40e8cd48c42fbf57..f3c5258f901e1574bf6eb1f8b3358e190ff4ef52 100644
--- a/ts/types/external.ts
+++ b/ts/types/external.ts
@@ -5,9 +5,9 @@ import container = require('../class/Container');
 type ExternalParameters = any[];
 
 var externalType: FTypeGenerator = function externalType(value: JsonSchema, path: string|any): string|any {
-  var libraryName: string = value.faker ? 'faker' : 'chance',
-    libraryModule = value.faker ? container.get('faker') : container.get('chance'),
-    key = value.faker || value.chance,
+  var libraryName: string = value.faker ? 'faker' : (value.chance ? 'chance' : 'casual'),
+    libraryModule = container.get(libraryName),
+    key = value.faker || value.chance || value.casual,
     path = key,
     args: ExternalParameters = [];
 
@@ -42,6 +42,10 @@ var externalType: FTypeGenerator = function externalType(value: JsonSchema, path
   }
 
   if (typeof genFunction !== 'function') {
+    if (libraryName === 'casual') {
+      return utils.typecast(genFunction, value.type);
+    }
+
     throw new Error('unknown ' + libraryName + '-generator for ' + JSON.stringify(key));
   }
 
diff --git a/yarn.lock b/yarn.lock
index ea927d8507abcfaaf460777fa7321b1442bdba0d..8f3c45b7d7b076204f50dad87dd754c569b6de1c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -417,6 +417,13 @@ caseless@~0.11.0:
   version "0.11.0"
   resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
 
+casual:
+  version "1.5.8"
+  resolved "https://registry.yarnpkg.com/casual/-/casual-1.5.8.tgz#82009d3cd39b79e7ec8db7a6245699fcfbcb3691"
+  dependencies:
+    mersenne-twister "^1.0.1"
+    moment "^2.15.2"
+
 center-align@^0.1.1:
   version "0.1.3"
   resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
@@ -1625,6 +1632,10 @@ marked@^0.3.5:
   version "0.3.6"
   resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7"
 
+mersenne-twister@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/mersenne-twister/-/mersenne-twister-1.1.0.tgz#f916618ee43d7179efcf641bec4531eb9670978a"
+
 miller-rabin@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d"
@@ -1701,6 +1712,10 @@ module-deps@^4.0.8:
     through2 "^2.0.0"
     xtend "^4.0.0"
 
+moment@^2.15.2:
+  version "2.17.0"
+  resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.0.tgz#a4c292e02aac5ddefb29a6eed24f51938dd3b74f"
+
 ms@0.7.2:
   version "0.7.2"
   resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"