better parameter checking