Cleaned up compareTo (again)