add prototype pattern