throw exceptions to stop incorrect actions