Hi,

Below is sample code which triggers a NPE when a node that has not yet been made visible is updated. Click on the 'Update Node' button without expanding the tree to trigger the problem. If the node has been made visible at least once, it will not trigger the NPE.

Note: The code is a modification of the Sencha Filter Tree Example and will require relevant dependencies.

Code:
public class FilterTreeExample implements IsWidget
{
    private final TreeStore<BaseDto> store = new TreeStore<BaseDto>(new KeyProvider());
    private FolderDto constructStore;


    class KeyProvider implements ModelKeyProvider<BaseDto>
    {
        @Override
        public String getKey(final BaseDto item)
        {
            return (item instanceof FolderDto ? "f-" : "m-") + item.getId().toString();
        }
    }


    @Override
    public Widget asWidget()
    {
        FlowLayoutContainer con = new FlowLayoutContainer();
        constructStore = constructStore();


        final Tree<BaseDto, String> tree = new Tree<BaseDto, String>(store, new ValueProvider<BaseDto, String>()
        {
            @Override
            public String getValue(final BaseDto object)
            {
                return object.getName();
            }


            @Override
            public void setValue(final BaseDto object, final String value)
            {
            }


            @Override
            public String getPath()
            {
                return "name";
            }
        });


        tree.setWidth( 300 );
        ButtonBar buttonBar = new ButtonBar();
        buttonBar.add(new TextButton("Update Node", new SelectHandler()
        {
            @Override
            public void onSelect(final SelectEvent event)
            {
                BaseDto find = find(constructStore, "Quartets");


                if (find != null)
                {
                    find.setName("updateName");
                    store.update(find);
                }
            }
        }));


        buttonBar.setLayoutData( new MarginData( 4 ) );
        con.add(buttonBar);
        con.add(tree);


        return con;
    }


    private FolderDto constructStore()
    {
        store.clear();


        FolderDto root = TestData.getMusicRootFolder();
        for (BaseDto base : root.getChildren())
        {
            store.add(base);
            if (base instanceof FolderDto)
            {
                processFolder(store, (FolderDto) base);
            }
        }


        return root;
    }


    private void processFolder(final TreeStore<BaseDto> store, final FolderDto folder)
    {
        for (BaseDto child : folder.getChildren())
        {
            store.add(folder, child);
            if (child instanceof FolderDto)
            {
                processFolder(store, (FolderDto) child);
            }
        }
    }


    private BaseDto find(final BaseDto dto, final String name)
    {
        if (dto instanceof FolderDto)
        {
            if (dto.getName().equals(name))
            {
                return dto;
            }


            for (BaseDto children : ((FolderDto) dto).getChildren())
            {
                return find(children, name);
            }
        }


        return null;
    }
}