             if @isNew() then super else @get 'url'
 
         parse: (response) =>
-            @nodes = {}
-
             if response
+                @nodes = {}
                 @node = DataContextNode.parseAttrs response.json, null, @cacheNode
 
             return response

    DataContextNode.parseAttrs = (attrs, parent, callback) ->
        if not attrs
            node = new DataContextNode
        # Existing node. Note this assumes
        else if attrs instanceof DataContextNode
            node = attrs
        # Branch
        else if attrs.type is 'and' or attrs.type is 'or' and attrs.children?.length >= 2
            node = new DataContextNode type: attrs.type
            children = _.map attrs.children, (_attrs) -> DataContextNode.parseAttrs _attrs, node
            node.set children: children
            node.type = 'branch'
        # Condition
        else if attrs.operator and attrs.id and attrs.value isnt undefined
            node = new DataContextNode attrs
            node.type = 'condition'
        # Composite
        else if attrs.composite is true and attrs.id
            node = new DataContextNode attrs
            node.type = 'composite'
        else
            throw new Error 'Unknown node type'


            return @

        add: (nodes...) ->
            if not @isBranch()
                throw new Error 'Node is not a branch. Use "promote" to convert it into one'
            @attributes.children.push.apply @attributes.children, _.map nodes, (attrs) =>
                DataContextNode.parseAttrs attrs, @
