use AbstractValue, not just Value
make accept values read-only
Merge branch 'refactor' into develop-2