public function findEntity($description, $identifiers)
    {
        $classes = $description->getUniqueIdentifiers();

        foreach ($classes as $class) {
            foreach ($identifiers as $key => $value) {
                $property = $description->getProperty($key);
                $value = $property->serialize($value);
                $value = implode('', $value);

                //use the identifier application as the unique context
                $key = $description->getEntityIdentifier()->application.$key.$value;

                if (isset($this->_identity_map[$class][$key])) {
                    //found an entity
                    $entity = $this->_identity_map[$class][$key];

                    //only return an entity if it's still within the space
                    if (!$this->_entities->contains($entity)) {
                        return;
                    }

                    //if the description we are using is the parent of the found entity
                    //if not then we must have found a different entity with the common parent
                    //as the caller repository
                    if (!is_a($entity, $description->getEntityIdentifier()->classname)) {
                        return;
                    }

                    return $entity;
                }
            }
        }

        return;
    }