diff --git a/src/Lunr/Corona/JsonView.php b/src/Lunr/Corona/JsonView.php
index 7213c47544823dbd0ce0d1e28695e6e8b67307ff..155fa6bc215a6d0dcc6c576d020d9634d988301a 100644
--- a/src/Lunr/Corona/JsonView.php
+++ b/src/Lunr/Corona/JsonView.php
@@ -18,17 +18,50 @@ namespace Lunr\Corona;
  */
 class JsonView extends View
 {
+    /**
+     * Shared instance of the JSON URI retriever
+     * @var \JsonSchema\Uri\UriRetriever
+     */
+    protected $jsonretriever;
+
+    /**
+     * Shared instance of the JSON resolver
+     * @var \JsonSchema\RefResolver
+     */
+    protected $jsonresolver;
+
+    /**
+     * Shared instance of the JSON validator
+     * @var \JsonSchema\Validator
+     */
+    protected $jsonvalidator;
+
+    /**
+     * The list of calls to check and what to check them against
+     * @var array
+     */
+    protected $whitelist;
 
     /**
      * Constructor.
      *
-     * @param RequestInterface $request       Shared instance of the Request class
-     * @param Response         $response      Shared instance of the Response class
-     * @param Configuration    $configuration Shared instance of to the Configuration class
+     * @param RequestInterface                $request       Shared instance of the Request class
+     * @param Response                        $response      Shared instance of the Response class
+     * @param \Lunr\Core\Configuration        $configuration Shared instance of to the Configuration class
+     * @param \Lunr\Core\ConfigServiceLocator $locator       Shared instance of to the ConfigServiceLocator class
      */
-    public function __construct($request, $response, $configuration)
+    public function __construct($request, $response, $configuration, $locator = NULL)
     {
         parent::__construct($request, $response, $configuration);
+
+        if($locator != NULL) {
+            $this->jsonretriever = $locator->jsonretriever();
+            $this->jsonresolver = $locator->jsonresolver();
+            $this->jsonvalidator = $locator->jsonvalidator();
+
+            $this->configuration->load_file('validation');
+            $this->whitelist = $this->configuration['validation']['schemalist']->toArray();
+        }
     }
 
     /**
@@ -64,29 +97,68 @@ class JsonView extends View
         $msg  = $this->response->get_error_message($identifier);
         $code = $this->response->get_return_code($identifier);
 
-        $json = [];
+        $return_data = [];
 
-        $json['data']   = $this->prepare_data($this->response->get_response_data());
-        $json['status'] = [];
+        $return_data['data']   = $this->prepare_data($this->response->get_response_data());
+        $return_data['status'] = [];
 
-        $json['status']['code']    = !is_numeric($info) || is_float($info + 1) ? $code : $info;
-        $json['status']['message'] = is_null($msg) ? '' : $msg;
+        $return_data['status']['code']    = !is_numeric($info) || is_float($info + 1) ? $code : $info;
+        $return_data['status']['message'] = is_null($msg) ? '' : $msg;
 
-        if ($json['data'] === [])
+        if ($return_data['data'] === [])
         {
-            $json['data'] = new \stdClass();
+            $return_data['data'] = new \stdClass();
         }
 
         header('Content-type: application/json');
-        http_response_code($code);
+
+        if($this->whitelist !== NULL && in_array($code, $this->configuration['validation']['http_codes']->toArray())) {
+            $this->get_json_validated($return_data);
+        }
 
         if ($this->request->sapi == 'cli')
         {
-            echo json_encode($json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . "\n";
+            $json = json_encode($return_data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . "\n";
         }
         else
         {
-            echo json_encode($json, JSON_UNESCAPED_UNICODE);
+            $json = json_encode($return_data, JSON_UNESCAPED_UNICODE);
+        }
+
+        http_response_code($code);
+        echo $json;
+    }
+
+    /**
+     * Check if the JSON needs to be validated and
+     *
+     * @param array $json the response data passed by reference
+     *
+     * @return void
+     */
+    private function get_json_validated(&$json)
+    {
+
+        $schema_name = $this->request->controller . '/' . $this->request->method;
+        if(!array_key_exists($schema_name, $this->whitelist))
+        {
+            return;
+        }
+
+        $schema_path = $this->request->application_path . str_replace($this->request->base_path, '', $this->statics($this->whitelist[$schema_name]));
+        if(!is_readable($schema_path)) {
+            $json['status']['json_message'] = 'JSON schema was not found, not validated';
+            return;
+        }
+
+        $schema_file = $this->jsonretriever->retrieve('file://' . $schema_path);
+        $this->jsonresolver->resolve($schema_file);
+        $this->jsonvalidator->check(json_decode(json_encode($json)), $schema_file);
+
+        if (!$this->jsonvalidator->isValid())
+        {
+            $json['status']['json_message'] = 'JSON failed to validate against the schema';
+            $json['status']['json_code']    = HttpCode::INTERNAL_SERVER_ERROR;
         }
     }
 
diff --git a/src/Lunr/Corona/View.php b/src/Lunr/Corona/View.php
index afa94f9060843cb4d26c9117787a6354cd4050db..bc4e9823216e0ba0ff2f90cf9d1bab8e44c86bed 100644
--- a/src/Lunr/Corona/View.php
+++ b/src/Lunr/Corona/View.php
@@ -33,7 +33,8 @@ abstract class View
 
     /**
      * Shared instance of the Configuration class
-     * @var Configuration
+     *
+     * @var \Lunr\Core\Configuration
      */
     protected $configuration;
 
diff --git a/support/setup.sh b/support/setup.sh
index 933f0fa85ac6b1f0a0e30306fd328d4abc22ad1c..701456cdd4332fbb6fd00ecc01c3bb7cc5799a17 100755
--- a/support/setup.sh
+++ b/support/setup.sh
@@ -12,6 +12,7 @@ fi
 # interactions download locations
 PSRLOG="https://github.com/php-fig/log/archive/1.0.0.tar.gz"
 RESQUE="https://github.com/chrisboulton/php-resque/archive/1.2.tar.gz"
+JSON_SCHEMA="https://github.com/justinrainbow/json-schema/archive/1.6.1.tar.gz"
 
 if ! [ -e "$DESTDIR/Psr/Log" ]; then
   cd "$TMP"
@@ -31,6 +32,15 @@ if ! [ -e "$DESTDIR/Resque" ]; then
   cd -
 fi
 
+if ! [ -e "$DESTDIR/JsonSchema" ]; then
+  cd "$TMP"
+    wget --content-disposition "$JSON_SCHEMA"
+    tar xvf json-schema-1.6.1.tar.gz
+
+    mv json-schema-1.6.1/src/JsonSchema "$DESTDIR/JsonSchema"
+  cd -
+fi
+
 # cleanup
 rm -rf "$TMP"/*
 
