modularized using the revealing prototype pattern