diff --git a/index.js b/index.js
index <HASH>..<HASH> 100644
--- a/index.js
+++ b/index.js
@@ -387,6 +387,7 @@ function ApostropheSchemas(options, callback) {
     var results = [];
     return async.eachSeries(data, function(datum, callback) {
       var result = {};
+      result.id = self._apos.sanitizeId(datum.id) || self._apos.generateId();
       return self.convertFields(req, schema, 'form', datum, result, function(err) {
         if (err) {
           return callback(err);
diff --git a/public/js/editor.js b/public/js/editor.js
index <HASH>..<HASH> 100644
--- a/public/js/editor.js
+++ b/public/js/editor.js
@@ -198,6 +198,7 @@ function AposSchemas() {
         }
         var result = {};
         var $element = $($elements[i]);
+        result.id = $element.attr('data-id');
         return self.convertFields($element, field.schema, result, function(_err) {
           if (_err) {
             err = _err;
@@ -381,6 +382,8 @@ function AposSchemas() {
         addRemoveHandler($element);
         addMoveHandler($element);
 
+        $element.attr('data-id', data[i].id);
+
         $elements.append($element);
         return self.populateFields($element, field.schema, data[i], function() {
           i++;
schema properties now have a globally unique id field