added several tests and functionallity