Version 3

Final, returns multiple types