diff --git a/src/json-validator.cpp b/src/json-validator.cpp
index 8dcd0d4fa188be84b3d63465f3efae62be7accac..fa288fceaad6fb37d223e2ac1433e2bc2358a635 100644
--- a/src/json-validator.cpp
+++ b/src/json-validator.cpp
@@ -84,8 +84,7 @@ bool schema_validator_validate_blob(struct blob_attr *msg, const char *object, c
 	struct schema_method *s_method;
 	json schema, obj;
 	int rv = 1;
-	char *str, *s;
-
+	char *arg_str, *schema_str;
 
 	if (!initialized)
 		return true;
@@ -101,28 +100,37 @@ bool schema_validator_validate_blob(struct blob_attr *msg, const char *object, c
 		goto out;
 
 	if (type == SCHEMA_INPUT_CALL)
-		s = blobmsg_format_json(s_method->b_input, true);
+		schema_str = blobmsg_format_json(s_method->b_input, true);
 	else if (type == SCHEMA_OUTPUT_CALL)
-		s = blobmsg_format_json(s_method->b_output, true);
+		schema_str = blobmsg_format_json(s_method->b_output, true);
 	else
 		goto out;
 
-	if (!s)
+	if (!schema_str)
 		goto out;
-	schema = json::parse(s);
+	schema = json::parse(schema_str);
 
-	str = blobmsg_format_json(msg, true);
-	obj = json::parse(str);
+	arg_str = blobmsg_format_json(msg, true);
+	obj = json::parse(arg_str);
 
 	if (s_object->definitions) {
-		json definitions = json::parse(s_object->definitions);
+		char *def_str;
+
+		def_str = blobmsg_format_json(s_object->definitions, true);
+		if (!def_str)
+			goto out_definitions;
+
+		json definitions = json::parse(def_str);
 		schema += json::object_t::value_type("definitions", definitions);
+
+		free(def_str);
 	}
 
 	rv = json_object_validate_schema(obj, schema);
 
-	free(str);
-	free(s);
+out_definitions:
+	free(arg_str);
+	free(schema_str);
 out:
 	return rv;
 }
@@ -158,14 +166,24 @@ bool schema_validator_validate_jobj(struct json_object *j_object, const char *ob
 	sch = json::parse(s);
 
 	if (s_object->definitions) {
-		json definitions = json::parse(s_object->definitions);
+		char *def_str;
+
+		def_str = blobmsg_format_json(s_object->definitions, true);
+		if (!def_str)
+			goto out_definitions;
+
+		json definitions = json::parse(def_str);
 		sch += json::object_t::value_type("definitions", definitions);
+
+		free(def_str);
 	}
 
 	obj = json::parse(json_object_get_string(j_object));
 
 	rv = json_object_validate_schema(obj, sch);
 
+out_definitions:
+	free(s);
 out:
 	return rv;
 }
diff --git a/src/schema.cpp b/src/schema.cpp
index 0b2af26bf7c5f532469693494ef2e7dc021f9bb4..a9b31db9dd2ba569847f8628a6b9ff022aa8a64c 100644
--- a/src/schema.cpp
+++ b/src/schema.cpp
@@ -124,7 +124,6 @@ schema_setup_file(const char *path)
 	struct blob_attr *root, *object;
 	int rem, rem2;
 	struct schema_object *schema_object;
-	char *definitions = NULL;
 
 	memset(&acl, 0, sizeof(acl));
 	blob_buf_init(&acl, 0);
@@ -154,8 +153,12 @@ schema_setup_file(const char *path)
 				goto out_flush;
 		}
 
-		if (!strncmp(blobmsg_name(root), "definitions", 12))
-			definitions = blobmsg_format_json(root, true);
+		if (!strncmp(blobmsg_name(root), "definitions", 12)) {
+			int len = blob_raw_len(root);
+
+			schema_object->definitions = (struct blob_attr *) calloc(1, sizeof(struct blob_attr) + len);
+			memcpy(schema_object->definitions, root, len);
+		}
 
 		if (strncmp(blobmsg_name(root), "properties", 11))
 			continue;
@@ -183,7 +186,6 @@ schema_setup_file(const char *path)
 	if (!schema_object->avl.key)
 		goto out_flush;
 
-	schema_object->definitions = definitions;
 	avl_insert(&s_ctx.schema_objects, &schema_object->avl);
 
 out:
@@ -191,6 +193,7 @@ out:
 	return;
 out_flush:
 	schema_flush_object(schema_object);
+	blob_buf_free(&acl);
 }
 
 struct schema_method *schema_get_method_schema(const char *object, const char *method)
@@ -212,7 +215,7 @@ struct schema_method *schema_get_method_schema(const char *object, const char *m
 	return NULL;
 }
 
-const char *schema_get_definitions_schema(const char *object)
+struct blob_attr *schema_get_definitions_schema(const char *object)
 {
 	struct schema_object *s_object;
 
diff --git a/src/schema.h b/src/schema.h
index 2575a062f9089f4e70649ef56e4f42e81d19e48b..2201b45afe8ba02a0a4ad798964ae2c426a3ed62 100644
--- a/src/schema.h
+++ b/src/schema.h
@@ -25,7 +25,7 @@ struct schema_method {
 struct schema_object {
 	char object_name[OBJECT_NAME_MAX_LEN];
 
-	char *definitions;
+	struct blob_attr *definitions;
 
 	bool regex;
 	regex_t regex_exp;
@@ -35,7 +35,7 @@ struct schema_object {
 };
 
 struct schema_method *schema_get_method_schema(const char *object, const char *method);
-const char *schema_get_definitions_schema(const char *object);
+struct blob_attr *schema_get_definitions_schema(const char *object);
 struct schema_object *schema_get_object_schema(const char *object);
 void schema_setup_json();
 void schema_flush_objects();