included new code and tests