     /// - Parameter URL: The dirty URL to be normalized.
     ///
     /// - Returns: The normalized URL. Returns `nil` if the pecified URL is invalid.
-    static func normalizedURL(dirtyURL: URLConvertible) -> URLConvertible {
+    static func normalizedURL(dirtyURL: URLConvertible, scheme: String? = nil) -> URLConvertible {
         guard dirtyURL.URLValue != nil else {
             return dirtyURL
         }
-        var URLString = dirtyURL.URLStringValue.componentsSeparatedByString("?")[0].componentsSeparatedByString("#")[0]
+        var URLString = URLNavigator.URLWithScheme(scheme, dirtyURL).URLStringValue
+        URLString = URLString.componentsSeparatedByString("?")[0].componentsSeparatedByString("#")[0]
         URLString = self.replaceRegex(":/{3,}", "://", URLString)
         URLString = self.replaceRegex("(?<!:)/{2,}", "/", URLString)
         URLString = self.replaceRegex("/+$", "", URLString)


    // MARK: Utils

    /// Returns the URL by
    ///
    /// - Removing redundant trailing slash(/) on scheme

    /// A dictionary to store URLOpenHandlers by URL patterns.
    private(set) var URLOpenHandlers = [String: URLOpenHandler]()

    /// A default scheme. If this value is set, it's available to map URL paths without schemes.
    ///
    ///     Navigator.scheme = "myapp"
    ///     Navigator.map("/user/<int:id>", UserViewController.self)
    ///     Navigator.map("/post/<title>", PostViewController.self)
    ///
    /// this is equivalent to:
    ///
    ///     Navigator.map("myapp://user/<int:id>", UserViewController.self)
    ///     Navigator.map("myapp://post/<title>", PostViewController.self)
    public var scheme: String? {
        didSet {
            if let scheme = self.scheme where scheme.containsString("://") == true {
                self.scheme = scheme.componentsSeparatedByString("://")[0]
            }
        }
    }


    // MARK: Initializing

