ported to topcomponent