diff --git a/src/EntityManager.cpp b/src/EntityManager.cpp
index ab658b2..81df6e1 100644
--- a/src/EntityManager.cpp
+++ b/src/EntityManager.cpp
@@ -33,8 +33,9 @@
 #include <experimental/filesystem>
 
 constexpr const char *OUTPUT_DIR = "/var/configuration/";
-constexpr const char *CONFIGURATION_DIR = "/usr/share/configurations";
-constexpr const char *schemaFile = "schema.json";
+constexpr const char *configurationDirectory = "/usr/share/configurations";
+constexpr const char *schemaDirectory = "/usr/share/configurations/schemas";
+constexpr const char *globalSchema = "global.json";
 constexpr const char *TEMPLATE_CHAR = "$";
 constexpr const size_t PROPERTIES_CHANGED_UNTIL_FLUSH_COUNT = 20;
 constexpr const int32_t MAX_MAPPER_DEPTH = 0;
@@ -960,19 +961,32 @@
 {
     // find configuration files
     std::vector<fs::path> jsonPaths;
-    if (!find_files(fs::path(CONFIGURATION_DIR), R"(.*\.json)", jsonPaths, 0))
+    if (!find_files(fs::path(configurationDirectory), R"(.*\.json)", jsonPaths,
+                    0))
     {
         std::cerr << "Unable to find any configuration files in "
-                  << CONFIGURATION_DIR << "\n";
+                  << configurationDirectory << "\n";
         return false;
     }
+
+    std::ifstream schemaStream(std::string(schemaDirectory) + "/" +
+                               globalSchema);
+    if (!schemaStream.good())
+    {
+        std::cerr
+            << "Cannot open schema file,  cannot validate JSON, exiting\n\n";
+        std::exit(EXIT_FAILURE);
+    }
+    nlohmann::json schema = nlohmann::json::parse(schemaStream, nullptr, false);
+    if (schema.is_discarded())
+    {
+        std::cerr
+            << "Illegal schema file detected, cannot validate JSON, exiting\n";
+        std::exit(EXIT_FAILURE);
+    }
+
     for (auto &jsonPath : jsonPaths)
     {
-        if (boost::algorithm::ends_with(jsonPath.string(), schemaFile))
-        {
-            // todo: parse using schema
-            continue;
-        }
         std::ifstream jsonStream(jsonPath.c_str());
         if (!jsonStream.good())
         {
@@ -985,6 +999,12 @@
             std::cerr << "syntax error in " << jsonPath.string() << "\n";
             continue;
         }
+        if (!validateJson(schema, data))
+        {
+            std::cerr << "Error validating " << jsonPath.string() << "\n";
+            continue;
+        }
+
         if (data.type() == nlohmann::json::value_t::array)
         {
             for (auto &d : data)
diff --git a/src/Utils.cpp b/src/Utils.cpp
index b5c3787..6db1157 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -18,6 +18,10 @@
 #include <experimental/filesystem>
 #include <fstream>
 #include <regex>
+#include <valijson/adapters/nlohmann_json_adapter.hpp>
+#include <valijson/schema.hpp>
+#include <valijson/schema_parser.hpp>
+#include <valijson/validator.hpp>
 
 namespace fs = std::experimental::filesystem;
 
@@ -45,4 +49,19 @@
         }
     }
     return true;
+}
+
+bool validateJson(const nlohmann::json &schemaFile, const nlohmann::json &input)
+{
+    valijson::Schema schema;
+    valijson::SchemaParser parser;
+    valijson::adapters::NlohmannJsonAdapter schemaAdapter(schemaFile);
+    parser.populateSchema(schemaAdapter, schema);
+    valijson::Validator validator;
+    valijson::adapters::NlohmannJsonAdapter targetAdapter(input);
+    if (!validator.validate(schema, targetAdapter, NULL))
+    {
+        return false;
+    }
+    return true;
 }
\ No newline at end of file
