     
     private class func down(status: String, state: DropState?, blur: DropBlur?) {
         self.upAll()
-        if let window = window() {
-            let drop = Drop(frame: CGRectZero)
-            window.addSubview(drop)
-            
-            let sideConstraints = ([.Left, .Right] as [NSLayoutAttribute]).map {
-                return NSLayoutConstraint(
-                    item: window,
-                    attribute: $0,
-                    relatedBy: .Equal,
-                    toItem: drop,
-                    attribute: $0,
-                    multiplier: 1.0,
-                    constant: 0.0
-                )
-            }
-            
-            drop.topConstraint = NSLayoutConstraint(
-                item: window,
-                attribute: .Top,
-                relatedBy: .Equal,
-                toItem: drop,
-                attribute: .Top,
-                multiplier: 1.0,
-                constant: drop.heightConstraint.constant
-            )
-            
-            window.addConstraints(sideConstraints)
-            window.addConstraint(drop.topConstraint)
-            drop.setup(status, state: state, blur: blur)
-            drop.updateHeight()
-            
-            drop.topConstraint.constant = 0.0
-            UIView.animateWithDuration(
-                NSTimeInterval(0.25),
-                delay: NSTimeInterval(0.0),
-                options: .AllowUserInteraction | .CurveEaseOut,
-                animations: { [weak drop] () -> Void in
-                    if let drop = drop { drop.layoutIfNeeded() }
-                }, completion: nil
-            )
-        }
+        let drop = Drop(frame: CGRectZero)
+        Drop.window().addSubview(drop)
+        
+        let sideConstraints = ([.Left, .Right] as [NSLayoutAttribute]).map {
+            return NSLayoutConstraint(
+                item: drop,
+                attribute: $0,
+                relatedBy: .Equal,
+                toItem: Drop.window(),
+                attribute: $0,
+                multiplier: 1.0,
+                constant: 0.0
+            )
+        }
+        
+        drop.topConstraint = NSLayoutConstraint(
+            item: drop,
+            attribute: .Top,
+            relatedBy: .Equal,
+            toItem: Drop.window(),
+            attribute: .Top,
+            multiplier: 1.0,
+            constant: -drop.heightConstraint.constant
+        )
+        
+        Drop.window().addConstraints(sideConstraints)
+        Drop.window().addConstraint(drop.topConstraint)
+        drop.setup(status, state: state, blur: blur)
+        drop.updateHeight()
+        
+        drop.topConstraint.constant = 0.0
+        UIView.animateWithDuration(
+            NSTimeInterval(0.25),
+            delay: NSTimeInterval(0.0),
+            options: .AllowUserInteraction | .CurveEaseOut,
+            animations: { [weak drop] () -> Void in
+                if let drop = drop { drop.layoutIfNeeded() }
+            }, completion: nil
+        )
     }
     
     private class func up(drop: Drop, interval: NSTimeInterval) {
-        drop.topConstraint.constant = drop.heightConstraint.constant
+        drop.topConstraint.constant = -drop.heightConstraint.constant
         UIView.animateWithDuration(
             interval,
             delay: NSTimeInterval(0.0),

}

extension Drop {
    private class func window() -> UIWindow? {
        return UIApplication.sharedApplication().keyWindow
    }
    
    private class func statusBarHeight() -> CGFloat {

    }
    
    public class func upAll() {
        for view in Drop.window().subviews {
            if let drop = view as? Drop {
                drop.up()
            }
        }
    }
