 }
 
 public struct RouteParams {
-    var routeOptions : RouteOptions?
-    var openParams : RoutableParams?
-    var extraParams : RoutableParams?
+    public let routeOptions : RouteOptions?
+    public let openParams : RoutableParams?
+    public let extraParams : RoutableParams?
     
     // TODO: CHECK THIS... MAYBE ALWAYS NEED DEFAULT PARAMS AVAILABLE?
     public var controllerParams : RoutableParams {

        }
    }
    
    public init(routerOptions: RouteOptions, openParams: RoutableParams?, extraParams: RoutableParams?) {
        self.routeOptions = routerOptions
        self.openParams = openParams
        self.extraParams = extraParams

    /**
    The property determining if the mapped `UIViewController` should be opened modally or pushed in the navigation stack.
    */
    public let isModal : Bool
    
    /**
    The property determining the `UIModalPresentationStyle` assigned to the mapped `UIViewController` instance. This is always assigned, regardless of whether or not `modal` is true.
    */
    public let presentationStyle : UIModalPresentationStyle
    
    /**
    The property determining the `UIModalTransitionStyle` assigned to the mapped `UIViewController` instance. This is always assigned, regardless of whether or not `modal` is true.
    */
    public let transitionStyle : UIModalTransitionStyle
    /**
    Default parameters sent to the `UIViewController`'s initWithRouteParams: method. This is useful if you want to pass some non-`NSString` information. These parameters will be overwritten by any parameters passed in the URL in open:.
    */
    public let defaultParams : RoutableParams?
    
    /**
    The property determining if the mapped `UIViewController` instance should be set as the root view controller of the router's `UINavigationController` instance.
    */
    public let shouldOpenAsRootViewController : Bool
    
}

open class Router {
    
    open static let shared = Router()
    
    // Map of URL format NSString -> RouteOptions
    // i.e. "users/:id"
