add exceptions and some updates