replace value type with reflect.Value
ton of tests for data references, fix some subtleties.