diff --git a/src/core/run.js b/src/core/run.js
index 46dde8ad29549fcc6943d1b141c6eb201afabaea..5a8b8dec43589b028da583a8f2a7fec2a257308f 100644
--- a/src/core/run.js
+++ b/src/core/run.js
@@ -97,8 +97,11 @@ function run(refs, schema, container) {
       }
 
       // cleanup
-      if (sub.id && typeof sub.id === 'string') {
+      const _id = sub.$id || sub.id;
+
+      if (typeof _id === 'string') {
         delete sub.id;
+        delete sub.$id;
         delete sub.$schema;
       }
 
diff --git a/src/core/traverse.js b/src/core/traverse.js
index 1ed942a59d2d3a9d602ff8051fcb783e039ec0ea..43c100d7b205066e318804024d61197211dec951 100644
--- a/src/core/traverse.js
+++ b/src/core/traverse.js
@@ -17,7 +17,11 @@ function traverse(schema, path, resolve, rootSchema) {
   if (path[path.length - 1] !== 'properties') {
     // example values have highest precedence
     if (optionAPI('useExamplesValue') && Array.isArray(schema.examples)) {
-      return utils.typecast(null, schema, () => random.pick(schema.examples));
+      // include `default` value as example too
+      const fixedExamples = schema.examples
+        .concat('default' in schema ? [schema.default] : []);
+
+      return utils.typecast(null, schema, () => random.pick(fixedExamples));
     }
 
     if (optionAPI('useDefaultValue') && 'default' in schema) {
@@ -33,6 +37,10 @@ function traverse(schema, path, resolve, rootSchema) {
     schema = utils.notValue(schema.not, utils.omitProps(schema, ['not']));
   }
 
+  if ('const' in schema) {
+    return schema.const;
+  }
+
   if (Array.isArray(schema.enum)) {
     return utils.typecast(null, schema, () => random.pick(schema.enum));
   }
diff --git a/src/core/utils.js b/src/core/utils.js
index a6530ac7f347da934d53debd045027e579e084c6..e140112f071e14040bb817189d43b90903be4fa8 100644
--- a/src/core/utils.js
+++ b/src/core/utils.js
@@ -265,7 +265,7 @@ function validate(value, schemas) {
 }
 
 function isKey(prop) {
-  return prop === 'enum' || prop === 'default' || prop === 'required' || prop === 'definitions';
+  return ['enum', 'const', 'default', 'examples', 'required', 'definitions'].indexOf(prop) !== -1;
 }
 
 function omitProps(obj, props) {
diff --git a/src/index.js b/src/index.js
index 7fd07fe6625ee5f9e1e5fcf552e84694f9d14dda..ed70aba8175f5bb7d7e1d154ab0ff1c05fbe52b5 100644
--- a/src/index.js
+++ b/src/index.js
@@ -59,7 +59,7 @@ function getRefs(refs) {
 
   if (Array.isArray(refs)) {
     refs.forEach(schema => {
-      $refs[schema.id] = schema;
+      $refs[schema.$id || schema.id] = schema;
     });
   } else {
     $refs = refs || {};