 
     for var i = 0, j = 0; i < 10; j++
     {
-      let timer = Timer(delay: 50_000)
+      let timer = Timer(delay: delay)
       if let selection = select(selectables + [timer])
       {
         XCTAssert(j == i)
-        if selection.id === timer
+        switch selection.id
         {
-          if let _ = timer.extract(selection)
-          {
-            XCTFail("Timers must return nil from extract()")
-          }
-          i++
-        }
-        else
-        {
-          XCTFail("Incorrect selection")
-          break
+        case let s where s === timer: XCTFail("Timer never sets the selection")
+        case _ as Sender<Int>:        XCTFail("Incorrect selection")
+        case _ as Receiver<Int>:      XCTFail("Incorrect selection")
+        default: i++
         }
       }
     }

    <-rx3
    rx3.close()
    XCTAssert(rx3.isClosed)

    let _ = Timer()

    let dt = mach_absolute_time() - start
    XCTAssert(dt > numericCast(2*delay))


class TimerTests: XCTestCase
{
  let delay: Int64 = 50_000

  func testTimer()
  {
    let start = mach_absolute_time()

    let time1 = dispatch_time(DISPATCH_TIME_NOW, delay)
    let rx1 = Timer(time1)
