diff --git a/includes/Drupal/Context/Context.php b/includes/Drupal/Context/Context.php
index fc1c6ca..ea2045c 100644
--- a/includes/Drupal/Context/Context.php
+++ b/includes/Drupal/Context/Context.php
@@ -110,11 +110,11 @@ class Context implements ContextInterface {
         if (isset($this->handlerClasses[$local_key])) {
           // Lazzy handler instanciation.
           if (!isset($this->handlers[$local_key]) && class_exists($this->handlerClasses[$local_key]['class'])) {
-            $this->handlers[$local_key] = new $this->handlerClasses[$local_key]['class']($this, $this->handlerClasses[$local_key]['params']);
+            $this->handlers[$local_key] = new $this->handlerClasses[$local_key]['class']($this->handlerClasses[$local_key]['params']);
           }
 
           if (isset($this->handlers[$local_key])) {
-            $handlerValue = $this->handlers[$local_key]->getValue($args);
+            $handlerValue = $this->handlers[$local_key]->getValue($args, $this);
             // NULL value here means the context pass, and let potential parent
             // overrides happen.
             if (NULL !== $handlerValue) {
diff --git a/includes/Drupal/Context/Handler/HandlerAbstract.php b/includes/Drupal/Context/Handler/HandlerAbstract.php
index 8987909..0f9f1fe 100644
--- a/includes/Drupal/Context/Handler/HandlerAbstract.php
+++ b/includes/Drupal/Context/Handler/HandlerAbstract.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Context\Handler;
 
-use \Drupal\Context\ContextInterface;
+use Drupal\Context\ContextInterface;
 
 /**
  * Base implementation of a Context Handler.
@@ -10,19 +10,6 @@ use \Drupal\Context\ContextInterface;
  * Other handlers may extend this class to make their job easier.
  */
 abstract class HandlerAbstract implements HandlerInterface {
-
-  /**
-   * Reference to the context object.
-   *
-   * Note: This creates a circular reference.  We should probably get rid of it
-   * and pass it every time.
-   *
-   * @todo Get rid of this property and avoid the circular dependency.
-   *
-   * @var Drupal\Context\ContextInterface
-   */
-  protected $context;
-
   /**
    * Parameters for the context handler.
    *
@@ -30,8 +17,7 @@ abstract class HandlerAbstract implements HandlerInterface {
    */
   protected $params;
 
-  public function __construct(ContextInterface $context, $params) {
-    $this->context = $context;
+  public function __construct(array $params = array()) {
     $this->params = $params;
   }
 }
diff --git a/includes/Drupal/Context/Handler/HandlerInterface.php b/includes/Drupal/Context/Handler/HandlerInterface.php
index b792322..39bbcb0 100644
--- a/includes/Drupal/Context/Handler/HandlerInterface.php
+++ b/includes/Drupal/Context/Handler/HandlerInterface.php
@@ -2,11 +2,15 @@
 
 namespace Drupal\Context\Handler;
 
+use Drupal\Context\ContextInterface;
+
 /**
  * Interface for context handler objects.
+ * 
+ * Handlers are stateless object: they receive the context to work with at
+ * getValue() time.
  */
 interface HandlerInterface {
-
   /**
    * Retrieves the value for this context key.
    *
@@ -16,11 +20,13 @@ interface HandlerInterface {
    *   Arguments to pass into the context handler.  Arguments are derived from
    *   the portion of the context key after the key fragment that led to this
    *   handler.
+   * @param ContextInterface $context = null
+   *   The current context scope within this handler must fetch values.
    * @return mixed
    *   The corresponding value for this context. Return here an new instance of
    *   ContextOffsetIsNull if you don't have any value corresponding to
    *   the given arguments to provide: this will cause the context to stop
    *   value lookup for this offset.
    */
-  public function getValue(array $args = array());
+  public function getValue(array $args = array(), ContextInterface $context = null);
 }
diff --git a/modules/simpletest/tests/context_test.module b/modules/simpletest/tests/context_test.module
index a8a8992..122b848 100644
--- a/modules/simpletest/tests/context_test.module
+++ b/modules/simpletest/tests/context_test.module
@@ -1,9 +1,10 @@
 <?php
 
-class ContextMockHandler extends \Drupal\Context\Handler\HandlerAbstract {
+use Drupal\Context\ContextInterface;
 
-  public function getValue(array $args = array()) {
+class ContextMockHandler extends \Drupal\Context\Handler\HandlerAbstract {
 
+  public function getValue(array $args = array(), ContextInterface $context = null) {
     return $this->params['values'][implode(':', $args)];
   }
 
@@ -11,7 +12,7 @@ class ContextMockHandler extends \Drupal\Context\Handler\HandlerAbstract {
 
 class ContextTestCaseHelperOne extends \Drupal\Context\Handler\HandlerAbstract {
 
-  public function getValue(array $args = array()) {
+  public function getValue(array $args = array(), ContextInterface $context = null) {
     return 'one';
   }
 }
@@ -23,7 +24,7 @@ class ContextTestCaseHelperTwo extends \Drupal\Context\Handler\HandlerAbstract {
    */
   protected $i = 1;
 
-  public function getValue(array $args = array()) {
+  public function getValue(array $args = array(), ContextInterface $context = null) {
     // This increases every time it's called.  If we ever get back something
     // other than 1, it means the result caching is broken because we were
     // called a second time.
@@ -32,14 +33,14 @@ class ContextTestCaseHelperTwo extends \Drupal\Context\Handler\HandlerAbstract {
 }
 
 class ContextTestCaseHelperThree extends \Drupal\Context\Handler\HandlerAbstract {
-  public function getValue(array $args = array()) {
+  public function getValue(array $args = array(), ContextInterface $context = null) {
     $param = $args[0];
     return isset($this->params[$param]) ? $this->params[$param] : NULL;
   }
 }
 
 class ContextTestCaseHelperArguments extends \Drupal\Context\Handler\HandlerAbstract {
-  public function getValue(array $args = array()) {
+  public function getValue(array $args = array(), ContextInterface $context = null) {
     return $args;
   }
 }
@@ -71,7 +72,7 @@ class ContextValueExample implements \Drupal\Context\ValueInterface {
  */
 class ContextHandlerExample extends \Drupal\Context\Handler\HandlerAbstract {
 
-  public function getValue(array $args = array()) {
+  public function getValue(array $args = array(), ContextInterface $context = null) {
     if (isset($this->params['id'])) {
       $contextValueExample =  $this->createExampleObject($this->params['id']);
       $param = !empty($args) ? $args[0] : NULL;
