added implementation
merge again, formatting is funky