componentized for grunt build system