         return self
     }
     
+    private static let DEFAULT_LEVEL = SpinnerLevel.Normal
+    
+    private var lastLevel = DEFAULT_LEVEL
+    
     // MARK: - Public interface
     
     public lazy var titleLabel = UILabel()
     public var subtitleLabel: UILabel?
     
+    public enum SpinnerLevel: Int, Comparable {
+        case Low = 1
+        case Normal = 2
+        case High = 3
+    }
+    
     //
     // Show the spinner activity on screen, if visible only update the title
     //
-    public class func show(title: String, animated: Bool = true) -> SwiftSpinner {
+    public class func show(title: String, animated: Bool = true, level: SpinnerLevel = .Normal) -> SwiftSpinner {
         
         let window = UIApplication.sharedApplication().windows.first!
         let spinner = SwiftSpinner.sharedInstance
         
-        spinner.showWithDelayBlock = nil
-        spinner.clearTapHandler()
-        
-        spinner.updateFrame()
-        
-        if spinner.superview == nil {
-            //show the spinner
-            spinner.alpha = 0.0
-            window.addSubview(spinner)
-            
-            UIView.animateWithDuration(0.33, delay: 0.0, options: .CurveEaseOut, animations: {
-                spinner.alpha = 1.0
-                }, completion: nil)
-            
-            // Orientation change observer
-            NSNotificationCenter.defaultCenter().addObserver(
-                spinner,
-                selector: "updateFrame",
-                name: UIApplicationDidChangeStatusBarOrientationNotification,
-                object: nil)
-        }
-        
-        spinner.title = title
-        spinner.animating = animated
+        if spinner.lastLevel <= level
+        {
+            //new level should override
+            spinner.lastLevel = level
+            
+            spinner.showWithDelayBlock = nil
+            spinner.clearTapHandler()
+            
+            spinner.updateFrame()
+            
+            if spinner.superview == nil {
+                //show the spinner
+                spinner.alpha = 0.0
+                window.addSubview(spinner)
+                
+                UIView.animateWithDuration(0.33, delay: 0.0, options: .CurveEaseOut, animations: {
+                    spinner.alpha = 1.0
+                    }, completion: nil)
+                
+                // Orientation change observer
+                NSNotificationCenter.defaultCenter().addObserver(
+                    spinner,
+                    selector: "updateFrame",
+                    name: UIApplicationDidChangeStatusBarOrientationNotification,
+                    object: nil)
+            }
+            
+            spinner.title = title
+            spinner.animating = animated
+        }
         
         return spinner
     }

        tapHandler?()
    }
}

    }
    
    //
    // Hide the spinner(keeping old interface)
    //
    public class func hide(completion: (() -> Void)? = nil) {
        SwiftSpinner.hide(DEFAULT_LEVEL, completion: completion)
    }
    
    //
    // Hide the spinner
    //
    public class func hide(level: SpinnerLevel, completion: (() -> Void)? = nil) {
        
        let spinner = SwiftSpinner.sharedInstance
        
        if spinner.lastLevel <= level {
            
            spinner.lastLevel = DEFAULT_LEVEL
            
            NSNotificationCenter.defaultCenter().removeObserver(spinner)
            
            dispatch_async(dispatch_get_main_queue(), {
                spinner.showWithDelayBlock = nil
                spinner.clearTapHandler()
                
                if spinner.superview == nil {
                    return
                }
                
                UIView.animateWithDuration(0.33, delay: 0.0, options: .CurveEaseOut, animations: {
                    spinner.alpha = 0.0
                    }, completion: {_ in
                        spinner.alpha = 1.0
                        spinner.removeFromSuperview()
                        spinner.titleLabel.font = spinner.defaultTitleFont
                        spinner.titleLabel.text = nil
                        
                        completion?()
                })
                
                spinner.animating = false
            })
        }
    }
    
    //
