use getDataNode() method internally instead of _dataNode field
handle NullPointerException, InvalidItemStackStringException
add throws declaration to parse(String) method
fix property name being passed as value name
fix settings, add commands
add support for item ids
clear sub node cache when node is removed