Updated with tests
Updated with tests
Updated with tests