fixing the delay by going back to use Thread
implemented Future opts