         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
     }

    // Show the spinner activity on screen, after delay. If new call to show,
    // showWithDelay or hide is maked before execution this call is discarded
    //
    public class func showWithDelay(delay: Double, title: String, animated: Bool = true) -> SwiftSpinner {
        let spinner = SwiftSpinner.sharedInstance
        
        spinner.showWithDelayBlock = {
            SwiftSpinner.show(title, animated: animated)
        }
        
        spinner.delay(seconds: delay) { [weak spinner] in
            if let spinner = spinner {
                spinner.showWithDelayBlock?()
            }
        }
        

        tapHandler?()
    }
}

public func <<T: RawRepresentable where T.RawValue: Comparable>(a: T, b: T) -> Bool {
    return a.rawValue < b.rawValue
}