minor refactoring
minor change
add setter method
add three arguments function interfaces
largely refactored