diff --git a/main.go b/main.go
index 2dd5013fefae0dccfc6f59d7b6f8896237b33fe3..c45ae388a344c95e3244b40c3dae606520c1d792 100644
--- a/main.go
+++ b/main.go
@@ -82,25 +82,33 @@ func realMain(args []string) int {
 
 	// Compile target schema
 	sl := gojsonschema.NewSchemaLoader()
-	schemaUri := *schemaFlag
+	schemaPath, err := filepath.Abs(*schemaFlag)
+	if err != nil {
+		log.Fatalf("%s: unable to convert to absolute path: %s\n", *schemaFlag, err)
+	}
 	for _, ref := range refFlags {
 		for _, p := range glob(ref) {
-			if p == schemaUri {
+			absPath, absPathErr := filepath.Abs(p)
+			if absPathErr != nil {
+				log.Fatalf("%s: unable to convert to absolute path: %s\n", absPath, err)
+			}
+
+			if absPath == schemaPath {
 				continue
 			}
 
-			loader, err := jsonLoader(p)
+			loader, err := jsonLoader(absPath)
 			if err != nil {
 				log.Fatalf("%s: unable to load schema ref: %s\n", *schemaFlag, err)
 			}
-			addSchemaErr := sl.AddSchemas(loader)
-			if addSchemaErr != nil {
+
+			if err := sl.AddSchemas(loader); err != nil {
 				log.Fatalf("%s: invalid schema: %s\n", p, err)
 			}
 		}
 	}
 
-	schemaLoader, err := jsonLoader(schemaUri)
+	schemaLoader, err := jsonLoader(schemaPath)
 	if err != nil {
 		log.Fatalf("%s: unable to load schema: %s\n", *schemaFlag, err)
 	}
@@ -125,29 +133,29 @@ func realMain(args []string) int {
 
 			loader, err := jsonLoader(path)
 			if err != nil {
-				msg := fmt.Sprintf("%s: unable to load doc: %s\n", *schemaFlag, err)
+				msg := fmt.Sprintf("%s: error: load doc %s\n", path, err)
 				fmt.Println(msg)
 				errors = append(errors, msg)
-			} else {
-				result, err := schema.Validate(loader)
-				switch {
-				case err != nil:
-					msg := fmt.Sprintf("%s: error: %s", path, err)
-					fmt.Println(msg)
-					errors = append(errors, msg)
-
-				case !result.Valid():
-					lines := make([]string, len(result.Errors()))
-					for i, desc := range result.Errors() {
-						lines[i] = fmt.Sprintf("%s: fail: %s", path, desc)
-					}
-					msg := strings.Join(lines, "\n")
-					fmt.Println(msg)
-					failures = append(failures, msg)
-
-				case !*quietFlag:
-					fmt.Printf("%s: pass\n", path)
+				return
+			}
+			result, err := schema.Validate(loader)
+			switch {
+			case err != nil:
+				msg := fmt.Sprintf("%s: error: validate: %s", path, err)
+				fmt.Println(msg)
+				errors = append(errors, msg)
+
+			case !result.Valid():
+				lines := make([]string, len(result.Errors()))
+				for i, desc := range result.Errors() {
+					lines[i] = fmt.Sprintf("%s: fail: %s", path, desc)
 				}
+				msg := strings.Join(lines, "\n")
+				fmt.Println(msg)
+				failures = append(failures, msg)
+
+			case !*quietFlag:
+				fmt.Printf("%s: pass\n", path)
 			}
 		}(p)
 	}
@@ -190,7 +198,7 @@ func jsonLoader(path string) (gojsonschema.JSONLoader, error) {
 }
 
 func printUsage() {
-	fmt.Fprintf(os.Stderr, `Usage: %s -s schema.json|schema.yml [options] document.json|document.yml ...
+	fmt.Fprintf(os.Stderr, `Usage: %s -s schema.(json|yml) [options] document.(json|yml) ...
 
   yajsv validates JSON and YAML document(s) against a schema. One of three statuses are
   reported per document:
diff --git a/main_windows_test.go b/main_windows_test.go
index 8914a5e705430b6eb6d64225fd1411d97655dd38..567ab6f9fcc7721ffb4a8156ce3cb374ae4bad54 100644
--- a/main_windows_test.go
+++ b/main_windows_test.go
@@ -84,7 +84,7 @@ func ExampleMain_error_jsonschema_jsondoc() {
 		log.Fatalf("exit: got %d, want 2", exit)
 	}
 	// Output:
-	// testdata\data-error.json: error: invalid character 'o' in literal null (expecting 'u')
+	// testdata\data-error.json: error: validate: invalid character 'o' in literal null (expecting 'u')
 }
 
 func ExampleMain_error_ymlschema_ymldoc() {
@@ -93,7 +93,7 @@ func ExampleMain_error_ymlschema_ymldoc() {
 		log.Fatalf("exit: got %d, want 2", exit)
 	}
 	// Output:
-	// testdata\schema.yml: unable to load doc: yaml: found unexpected end of stream
+	// testdata\data-error.yml: error: load doc yaml: found unexpected end of stream
 }
 
 func ExampleMain_glob_jsonschema_jsondoc() {
@@ -102,7 +102,7 @@ func ExampleMain_glob_jsonschema_jsondoc() {
 		log.Fatalf("exit: got %d, want 3", exit)
 	}
 	// Unordered output:
-	// testdata\data-error.json: error: invalid character 'o' in literal null (expecting 'u')
+	// testdata\data-error.json: error: validate: invalid character 'o' in literal null (expecting 'u')
 	// testdata\data-fail.json: fail: (root): foo is required
 }
 
@@ -112,7 +112,7 @@ func ExampleMain_glob_ymlschema_ymldoc() {
 		log.Fatalf("exit: got %d, want 3", exit)
 	}
 	// Unordered output:
-	// testdata\schema.yml: unable to load doc: yaml: found unexpected end of stream
+	// testdata\data-error.yml: error: load doc yaml: found unexpected end of stream
 	//
 	// testdata\data-fail.yml: fail: (root): foo is required
 }