still need exceptions and comments