         }
     }
     
-    private class func up(drop: Drop) {
-        self .up(drop, after: 0.0)
-    }
-    
-    private class func up(drop: Drop, after: Double) {
-        self .up(drop, after: after, interval: 0.25)
-    }
-    
-    private class func up(drop: Drop, after: Double, interval: NSTimeInterval) {
+    private class func up(drop: Drop, interval: NSTimeInterval) {
         drop.topConstraint.constant = drop.heightConstraint.constant
         let options: UIViewAnimationOptions = .AllowUserInteraction | .CurveEaseIn
         UIView.animateWithDuration(
             interval,
-            delay: after,
+            delay: NSTimeInterval(0.0),
             options: options,
             animations: { [weak drop] () -> Void in
                 if let drop = drop {

            }
        case .Ended:
            if topConstraint.constant > 0.0 {
                Drop.up(self, after: 0.0, interval: 0.1)
            } else {
                restartUpTimer(2.0)
                topConstraint.constant = 0.0

    }
    
    func up() {
        restartUpTimer(0.0)
    }
    
    func upFromTimer(timer: NSTimer) {
        if let interval = timer.userInfo as? Double {
            Drop.up(self, interval: interval)
        }
    }
    
    private func restartUpTimer(after: Double) {
        restartUpTimer(after, interval: 0.25)
    }
    
    private func restartUpTimer(after: Double, interval: Double) {
        upTimer?.invalidate()
        upTimer = nil
        upTimer = NSTimer.scheduledTimerWithTimeInterval(after, target: self, selector: "upFromTimer:", userInfo: interval, repeats: false)
    }
    
    private func updateHeight() {
