def timed_call(self, ms, callback, *args, **kwargs):
        """ We have to wake up the reactor after every call because
        it may calculate a long delay where it can sleep which causes events 
        that happen during this period to seem really slow as they do not get 
        processed until after the reactor "wakes up"
        
        """
        loop = self.loop
        r = loop.callLater(ms/1000.0, callback, *args, **kwargs)
        loop.wakeUp()
        return r