added Prototype pattern