using custom execption for missing results instead of nullpointer