 
 private extension Siren {
 
-    func iTunesURLFromString() -> NSURL {
-
-        var storeURLString = "https://itunes.apple.com/lookup?id=\(appID!)"
+    func iTunesURLFromString() throws -> NSURL {
+
+        let components = NSURLComponents()
+        components.scheme = "https"
+        components.host = "itunes.apple.com"
+        components.path = "/lookup"
+
+        var items: [NSURLQueryItem] = [NSURLQueryItem(name: "id", value: appID)]
 
         if let countryCode = countryCode {
-            storeURLString += "&country=\(countryCode)"
-        }
-
-        printMessage("iTunes Lookup URL: \(storeURLString)")
-
-        return NSURL(string: storeURLString)!
+            let item = NSURLQueryItem(name: "country", value: countryCode)
+            items.append(item)
+        }
+
+        components.queryItems = items
+
+        guard let url = components.URL where !url.absoluteString.isEmpty else {
+            throw SirenErrorType.MalformedURL
+        }
+
+        return url
     }
 
     func daysSinceLastVersionCheckDate(lastVersionCheckPerformedOnDate: NSDate) -> Int {

        let description: String

        switch code {
        case .NoUpdateAvailable:
            description = "No new update available."
        case .AppStoreDataRetrievalFailure:

 Siren-specific Error Codes
 */
private enum SirenErrorCode: Int {
    case MalformedURL = 1000
    case NoUpdateAvailable
    case AppStoreDataRetrievalFailure
    case AppStoreJSONParsingFailure
    case AppStoreVersionNumberFailure
    case AppStoreVersionArrayFailure
}

/**
 Siren-specific Error Throwable Errors
 */
private enum SirenErrorType: ErrorType {
    case MalformedURL
}

/** 
