followed refactoring, added defer() method in Task