remember to explicitly call return, python-style
remove else after tail call
manual merge
manual merge