complete working version but legacy style get/set/call