Refactored to move await from crazy generics
refactor from generics

incomplete