try to have no state inside (i.e. remove id and lastData and lastError).
add __toString method in Enums.
maybe some Data Transfer Object
simplified the construction… add modify method.