       else
         @_remapAttributes(subject)
 
-    _collectNonEmptyFields: (object) ->
+    # cleans the object to be send
+    # * rejects attributes starting with $
+    # * rejects validation errors and isPristine attribute
+    # * rejects js functions
+    # * rejects empty objects {}
+    # * rejects empty objects within array [{}]
+    _cleanup: (object) ->
       self = @
       newObject = {}
 


        # remap nested data according to rails conventions
        else if _.isObject(value)
          value = self._collectNonEmptyFields(value)

          object["#{key}_attributes"] = value
          delete object[key]


          # skip
        else if _.isArray(v)
          if _.isPlainObject(v[0])
            subset = _.map v, (x) -> self._cleanup(x)
            newObject[k] = _.reject subset, (x) -> _.isEmpty(x)

          else
            newObject[k] = v

        else if _.isPlainObject(v)
          obj = self._cleanup(v)
          newObject[k] = obj unless _.isEmpty(obj)

        else
