diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6450084
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/.npm
diff --git a/lib/client.js b/lib/client.js
index 3963ab8..79de745 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -30,6 +30,9 @@ SearchSource.prototype._loadData = function(query, options) {
   }
 
   function handleData(err, payload) {
+    if (!payload) {
+      return;
+    }
     if(err) {
       self.status.set({error: err});
       throw err;
@@ -128,11 +131,27 @@ SearchSource.prototype.getData = function(options, getCursor) {
     selector = {};
   }
 
+  function pick(doc, field) {
+    if (_.isString(field)) field = field.split('.');
+    if (!_.isArray(field)) return doc[field];
+    var tmp = doc;
+    while (i = field.shift())
+      tmp = tmp[i];
+    return tmp;
+  };
+
+  function put(doc, field, value) {
+    if (_.isString(field)) field = field.split('.');
+    if (!_.isArray(field)) doc[field] = value;
+    pick(doc, _.initial(field))[_.last(field)] = value;
+  };
+
   function transform(doc) {
     if(options.transform) {
       self.searchFields.forEach(function(field) {
-        if(self.currentQuery && doc[field]) {
-          doc[field] = options.transform(doc[field], regExp, field, self.currentQuery);
+        var property = pick(doc, field);
+        if(self.currentQuery && property) {
+          put(doc, field, options.transform(property, regExp, field, self.currentQuery));
         }
       });
     }