ported from bower to component