add properties, refactor to base prototype