         
         return action
     }
-    
-    // MARK: Actions
+
+}
+
+// MARK: Helpers
+private extension Siren {
+    
+    func iTunesURLFromString() -> NSURL {
+        
+        var storeURLString = "https://itunes.apple.com/lookup?id=\(appID!)"
+        
+        if let countryCode = countryCode {
+            storeURLString += "&country=\(countryCode)"
+        }
+        
+        if debugEnabled {
+            println("[Siren] iTunes Lookup URL: \(storeURLString)");
+        }
+        
+        return NSURL(string: storeURLString)!
+    }
+    
+    func daysSinceLastVersionCheckDate() -> Int {
+        let calendar = NSCalendar.currentCalendar()
+        let components = calendar.components(.CalendarUnitDay, fromDate: lastVersionCheckPerformedOnDate!, toDate: NSDate(), options: nil)
+        return components.day
+    }
+    
+    func isAppStoreVersionNewer() -> Bool {
+        
+        var newVersionExists = false
+        
+        if let currentVersion = self.currentVersion {
+            if (currentVersion.compare(currentAppStoreVersion!, options: .NumericSearch) == NSComparisonResult.OrderedAscending) {
+                newVersionExists = true
+            }
+        }
+        
+        return newVersionExists
+    }
+    
+    /*
+        TODO: Potentially turn this into a custom setter/getter with property observers
+        https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID262
+    */
+    func setAlertType() -> SirenAlertType {
+        
+        if majorUpdateAlertType == nil {
+            majorUpdateAlertType = alertType
+        }
+        
+        if minorUpdateAlertType == nil {
+            minorUpdateAlertType = alertType
+        }
+        
+        if patchUpdateAlertType == nil {
+            patchUpdateAlertType = alertType
+        }
+        
+        let oldVersion = split(currentVersion!, {$0 == "."}, maxSplit: Int.max, allowEmptySlices: false).map {$0.toInt() ?? 0}
+        let newVersion = split(currentAppStoreVersion!, {$0 == "."}, maxSplit: Int.max, allowEmptySlices: false).map {$0.toInt() ?? 0}
+        
+        if oldVersion.count == 3 && newVersion.count == 3 {
+            if newVersion[0] > oldVersion[0] { // A.b.c
+                alertType = majorUpdateAlertType!
+            } else if newVersion[1] > oldVersion[1] { // a.B.c
+                alertType = minorUpdateAlertType!
+            } else if newVersion[2] > oldVersion[2] { // a.b.C
+                alertType = patchUpdateAlertType!
+            }
+        }
+        
+        return alertType
+    }
+    
+    // iOS 8 Compatibility Check
+    var useAlertController: Bool { // iOS 8 check
+        return objc_getClass("UIAlertController") != nil
+    }
+    
+    // Actions
     func launchAppStore() {
         let iTunesString =  "https://itunes.apple.com/app/id\(appID)";
         let iTunesURL = NSURL(string: iTunesString);

    }
    
    func showAlert() {

        let updateAvailableMessage = NSBundle().localizedString("Update Available", forceLanguageLocalization: forceLanguageLocalization)
        var newVersionMessage = localizedNewVersionMessage();

        if (useAlertController) { // iOS 8
            
            let alertController = UIAlertController(title: updateAvailableMessage, message: newVersionMessage, preferredStyle: .Alert)

    }
}

// MARK: String Localization
private extension Siren {

    func localizedNewVersionMessage() -> String {
        
        let newVersionMessageToLocalize = "A new version of %@ is available. Please update to version %@ now."
