add throw exceptions