         self.backend = backend
         self.middlewares = middlewares
         self.prepareForEndpoint = prepareForEndpoint
+    }
+
+    /**
+       Initializes a provider by copying a existing one.
+
+       - Parameter backend: Using new backend instead of existing configuration.
+       - Parameter middlewares: Using new middlewares instead of existing configuration.
+       - Parameter prepareForEndpoint: Using new `prepareForEndpoint` hook instead of existing configuration.
+    */
+    public func copy(backend: Backend? = nil,
+                     middlewares: [Middleware]? = nil,
+                     prepareForEndpoint: (Endpoint -> ())? = nil) -> MoyaXProvider {
+        return MoyaXProvider(backend: backend ?? self.backend,
+                             middlewares: middlewares ?? self.middlewares,
+                             prepareForEndpoint: prepareForEndpoint ?? self.prepareForEndpoint)
     }
 
     /**

    }

    /**
        Creates a request for given target and call the completion once the request has finished.

        The flow is equivalent to:


    public let backend: Backend
    public let middlewares: [Middleware]
    public let prepareForEndpoint: (Endpoint -> ())?

    /**
       Initializes a provider.
