added prototype pattern