   
 }
 
+// MARK: - Removing definitions
+
+extension DependencyContainer {
+  
+  /**
+   Removes definition registered in the container.
+
+   - parameters:
+      - tag: The tag used to register definition.
+      - definition: The definition to remove
+   */
+  public func remove<T, F>(definition: DefinitionOf<T, F>, forTag tag: Tag? = nil) {
+    let key = DefinitionKey(protocolType: T.self, factoryType: F.self, associatedTag: tag)
+    remove(definitionForKey: key)
+  }
+  
+  func remove(definitionForKey key: DefinitionKey) {
+    threadSafe {
+      definitions[key] = nil
+    }
+  }
+
+  /**
+   Removes all definitions registered in the container.
+   */
+  public func reset() {
+    threadSafe {
+      definitions.removeAll()
+    }
+  }
+
+}
+
 extension DependencyContainer: CustomStringConvertible {
   
   public var description: String {

    }
  }

  // MARK: Resolve dependencies
  
  /**
  Resolve a dependency.

    }
  }
  
  ///Pool to hold instances, created during call to `resolve()`.
  ///Before `resolve()` returns pool is drained.
  class ResolvedInstances {
    var resolvedInstances = [DefinitionKey: Any]()
