run callback within it's own context