udefine(['mixedice', 'eventmap', 'performance'], function(mixedice, EventMap, performance) {

  var Timer = function() {
    mixedice([this, Timer.prototype], new EventMap());

    this.interval = 1000;
    this.startTime = -1;

    this.active = false;
    this.paused = false;

    var oldTicks = 0;

    this.tick = function(currentTime) {
      if (!this.active || !this.paused) {
        return;
      }

      this.trigger('tick');

      if (currentTime - this.startTime) {
        
      }
    };
  };

  Timer.prototype.start = function() {
    this.active = true;
    this.paused = false;

    this.startTime = performance.now();

    this.trigger('start');
  };

  Timer.prototype.pause = function() {
    this.paused = true;

    this.trigger('pause');
  };

  Timer.prototype.unpause = function() {
    this.paused = false;

    this.trigger('unpause');
  };

  Timer.prototype.stop = function() {
    this.paused = false;
    this.active = false;

    this.trigger('stop');
  };

});

@@ -102,32 +102,40 @@
 imer = function(
+interval
 ) %7B%0A    mixedice
@@ -176,16 +176,42 @@
 tMap());
+%0A    %0A    var self = this;
 %0A%0A    th
@@ -223,16 +223,28 @@
 terval =
+ interval %7C%7C
  1000;%0A 
@@ -393,20 +393,20 @@
    if (!
-this
+self
 .active 
@@ -409,20 +409,20 @@
 ive %7C%7C !
-this
+self
 .paused)
@@ -452,19 +452,76 @@
   %7D%0A
+      
 %0A      
-this
+if (interval %3E 0) %7B%0A        return;%0A      %7D%0A%0A      self
 .tri
@@ -544,16 +544,17 @@
      if 
+(
 (current
@@ -560,20 +560,20 @@
 tTime - 
-this
+self
 .startTi
@@ -574,28 +574,113 @@
 tartTime
-) %7B%0A        
+ - self.interval) %3E oldTicks) %7B%0A        oldTicks = currentTime;%0A        self.trigger('interval');
 %0A      %7D

Update timer logic