implement as extension