diff --git a/examples/validator/app/tinygltf-validate.cc b/examples/validator/app/tinygltf-validate.cc
index 055f19b..def5577 100644
--- a/examples/validator/app/tinygltf-validate.cc
+++ b/examples/validator/app/tinygltf-validate.cc
@@ -34,7 +34,8 @@
 
 static void usage(const char *name)
 {
-	std::cerr << "Usage: " << name << " <schema> < <document>\n";
+	std::cerr << "Usage: " << name << " <gltf file> <gltf schema dir>\n";
+	std::cerr << "  schema dir : $glTF/specification/2.0/schema\n";
 	exit(EXIT_FAILURE);
 }
 
@@ -45,6 +46,7 @@
 	assert(r.undefined_refs.size() == 0);
 #endif
 
+#if 0
 static void loader(const json_uri &uri, json &schema)
 {
 	std::fstream lf("." + uri.path());
@@ -57,17 +59,17 @@
 		throw e;
 	}
 }
+#endif
 
-int main(int argc, char *argv[])
+bool validate(const std::string &schema_dir, const std::string &filename)
 {
-	if (argc != 2)
-		usage(argv[0]);
+  std::string gltf_schema = schema_dir + "/glTF.schema.json";
 
-	std::fstream f(argv[1]);
+	std::fstream f(gltf_schema);
 	if (!f.good()) {
-		std::cerr << "could not open " << argv[1] << " for reading\n";
-		usage(argv[0]);
-	}
+		std::cerr << "could not open " << gltf_schema << " for reading\n";
+    return false;
+  }
 
 	// 1) Read the schema for the document you want to validate
 	json schema;
@@ -75,11 +77,24 @@
 		f >> schema;
 	} catch (std::exception &e) {
 		std::cerr << e.what() << " at " << f.tellp() << " - while parsing the schema\n";
-		return EXIT_FAILURE;
+		return false;
 	}
 
 	// 2) create the validator and
-	json_validator validator(loader, [](const std::string &, const std::string &) {});
+	json_validator validator([&schema_dir](const json_uri &uri, json &schema) {
+    std::cout << "uri.url  : " << uri.url() << std::endl;
+    std::cout << "uri.path : " << uri.path() << std::endl;
+
+    std::fstream lf(schema_dir + "/" + uri.path());
+    if (!lf.good())
+      throw std::invalid_argument("could not open " + uri.url() + " tried with " + uri.path());
+
+    try {
+      lf >> schema;
+    } catch (std::exception &e) {
+      throw e;
+    }
+  }, [](const std::string &, const std::string &) {});
 
 	try {
 		// insert this schema as the root to the validator
@@ -93,16 +108,33 @@
 	// 3) do the actual validation of the document
 	json document;
 
+	std::fstream d(filename);
+	if (!d.good()) {
+		std::cerr << "could not open " << filename << " for reading\n";
+    return false;
+  }
+
 	try {
-		std::cin >> document;
+		d >> document;
 		validator.validate(document);
 	} catch (std::exception &e) {
 		std::cerr << "schema validation failed\n";
-		std::cerr << e.what() << " at offset: " << std::cin.tellg() << "\n";
-		return EXIT_FAILURE;
+		std::cerr << e.what() << " at offset: " << d.tellg() << "\n";
+		return false;
 	}
 
 	std::cerr << "document is valid\n";
 
-	return EXIT_SUCCESS;
+  return true;
+
+}
+
+int main(int argc, char *argv[])
+{
+	if (argc != 3)
+		usage(argv[0]);
+
+  bool ret = validate(argv[1], argv[2]);
+
+	return ret ? EXIT_SUCCESS : EXIT_FAILURE;
 }
diff --git a/examples/validator/src/json-uri.cpp b/examples/validator/src/json-uri.cpp
index e480fce..2dc6113 100644
--- a/examples/validator/src/json-uri.cpp
+++ b/examples/validator/src/json-uri.cpp
@@ -86,8 +86,11 @@
 		auto path = url.substr(pos);
 		if (path[0] == '/') // if it starts with a / it is root-path
 			path_ = path;
-		else // otherwise it is a subfolder
-			path_.append(path);
+		else { // otherwise it is a subfolder
+      // HACK(syoyo): Force append '/' for glTF json schemas
+			path_ = path;
+			//path_.append(path);
+    }
 
 		pointer_ = json_pointer("");
 	}
diff --git a/examples/validator/src/json-validator.cpp b/examples/validator/src/json-validator.cpp
index cb26ca2..3358805 100644
--- a/examples/validator/src/json-validator.cpp
+++ b/examples/validator/src/json-validator.cpp
@@ -278,7 +278,9 @@
 			// check whether all schema-references are new
 			for (auto &sref : r.schema_refs) {
 				if (schema_refs_.find(sref.first) != schema_refs_.end())
-					throw std::invalid_argument("schema " + sref.first.to_string() + " already present in validator.");
+          // HACK(syoyo): Skip duplicated schema.
+          break;
+					//throw std::invalid_argument("schema " + sref.first.to_string() + " already present in validator.");
 			}
 			// no undefined references and no duplicated schema - store the schema
 			schema_store_.push_back(schema);
