added more parameter checking