add method setValue, change getValue to return an object
refactor