with validation