Add parameter checking and unit tests