refactored #new method