diff --git a/context_condition_session.inc b/context_condition_session.inc.new
index c2990ea..9903561 100644
--- a/context_condition_session.inc
+++ b/context_condition_session.inc.new
@@ -21,11 +21,53 @@ class context_condition_session extends context_condition {
   function execute(array $session) {
     $keys = variable_get('context_session', array());
     foreach ($keys as $key) {
-      if (isset($session[$key])) {
-        foreach ($this->get_contexts($key) as $context) {
+      if ( $this->_array_path_value($session, $key) ){
+        foreach ($this->get_contexts($key) as $context){
           $this->condition_met($context, $key);
         }
       }
     }
   }
+  
+  /**
+   * Get value of an array by using "root.branch.leaf" notation
+   *
+   * @param array $array   Array to traverse
+   * @param string $path   Path to a specific option to extract
+   * @param mixed $default Value to use if the path was not found
+   * @return mixed
+   * 
+   */
+  function _array_path_value(array $array, $path, $default = null)
+  {
+    $delimiter = '.';
+    if (empty($path)) {
+      return false;
+    }
+    $unpack_key_value=explode("==",$path);
+    $target_value=null;
+    $path=$unpack_key_value[0];
+    if (count($unpack_key_value)==2){
+      $target_value=$unpack_key_value[1];
+    }
+    $path = trim($path, $delimiter);
+    $value = $array;
+    $parts = explode($delimiter, $path);
+    foreach ($parts as $part) {
+      if (isset($value[$part])) {
+        $value = $value[$part];
+      } else {
+          return false;
+      }
+    }
+    if (!($target_value===NULL)){
+      if ( $value==$target_value ){
+        return true;
+      }else{
+        return false;
+      }
+    }else{
+      return true;
+    }
+  }
 }
