diff --git a/eZ/Publish/Core/Limitation/AbstractPersistenceLimitationType.php b/eZ/Publish/Core/Limitation/AbstractPersistenceLimitationType.php
index c547e80..32a4b06 100644
--- a/eZ/Publish/Core/Limitation/AbstractPersistenceLimitationType.php
+++ b/eZ/Publish/Core/Limitation/AbstractPersistenceLimitationType.php
@@ -9,12 +9,16 @@
 
 namespace eZ\Publish\Core\Limitation;
 
+
+use eZ\Publish\API\Repository\Values\User\User as APIUser;
+use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
+use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\SPI\Persistence\Handler as SPIPersistenceHandler;
 
 /**
  * LocationLimitation is a Content limitation
  */
-class AbstractPersistenceLimitationType
+abstract class AbstractPersistenceLimitationType implements SPILimitationTypeInterface
 {
     /**
      * @var \eZ\Publish\SPI\Persistence\Handler
@@ -28,4 +32,22 @@ class AbstractPersistenceLimitationType
     {
         $this->persistence = $persistence;
     }
+
+    /**
+     * Returns Criterion for use in SearchService findLocations() query
+     *
+     * This may in most cases be simply reuse {@see getCriterion()} as Criterion is often the same.
+     *
+     * @throws \eZ\Publish\API\Repository\Exceptions\NotImplementedException If the limitation does not support
+     *         being used as a Criterion.
+     *
+     * @param \eZ\Publish\API\Repository\Values\User\Limitation $value
+     * @param \eZ\Publish\API\Repository\Values\User\User $currentUser
+     *
+     * @return \eZ\Publish\API\Repository\Values\Content\Query\CriterionInterface
+     */
+    public function getLocationCriterion( APILimitationValue $value, APIUser $currentUser )
+    {
+        return $this->getCriterion( $value, $currentUser );
+    }
 }
diff --git a/eZ/Publish/Core/Limitation/ContentTypeLimitationType.php b/eZ/Publish/Core/Limitation/ContentTypeLimitationType.php
index 1ce99c8..181420e 100644
--- a/eZ/Publish/Core/Limitation/ContentTypeLimitationType.php
+++ b/eZ/Publish/Core/Limitation/ContentTypeLimitationType.php
@@ -20,14 +20,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\ContentTypeLimitation as APIContentTypeLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
 
 /**
  * ContentTypeLimitation is a Content limitation
  */
-class ContentTypeLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class ContentTypeLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/LanguageLimitationType.php b/eZ/Publish/Core/Limitation/LanguageLimitationType.php
index 5bb3525..91a0b06 100644
--- a/eZ/Publish/Core/Limitation/LanguageLimitationType.php
+++ b/eZ/Publish/Core/Limitation/LanguageLimitationType.php
@@ -20,14 +20,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\LanguageLimitation as APILanguageLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
 
 /**
  * LanguageLimitation is a Content limitation
  */
-class LanguageLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class LanguageLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/LocationLimitationType.php b/eZ/Publish/Core/Limitation/LocationLimitationType.php
index ead9662..1f690d4 100644
--- a/eZ/Publish/Core/Limitation/LocationLimitationType.php
+++ b/eZ/Publish/Core/Limitation/LocationLimitationType.php
@@ -23,14 +23,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\LocationLimitation as APILocationLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
 use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\SPI\Persistence\Content\Location as SPILocation;
 
 /**
  * LocationLimitation is a Content limitation
  */
-class LocationLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class LocationLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/NewSectionLimitationType.php b/eZ/Publish/Core/Limitation/NewSectionLimitationType.php
index 6265848..32c7dbd 100644
--- a/eZ/Publish/Core/Limitation/NewSectionLimitationType.php
+++ b/eZ/Publish/Core/Limitation/NewSectionLimitationType.php
@@ -20,14 +20,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\NewSectionLimitation as APINewSectionLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\SPI\Persistence\Content\Section as SPISection;
 
 /**
  * NewSectionLimitation is a Content Limitation used on 'section' 'assign' function
  */
-class NewSectionLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class NewSectionLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/ObjectStateLimitationType.php b/eZ/Publish/Core/Limitation/ObjectStateLimitationType.php
index f902220..468ac67 100644
--- a/eZ/Publish/Core/Limitation/ObjectStateLimitationType.php
+++ b/eZ/Publish/Core/Limitation/ObjectStateLimitationType.php
@@ -22,13 +22,12 @@ use eZ\Publish\Core\Base\Exceptions\BadStateException;
 use eZ\Publish\API\Repository\Values\User\Limitation\ObjectStateLimitation as APIObjectStateLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
 use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 
 /**
  * ObjectStateLimitation is a Content limitation
  */
-class ObjectStateLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class ObjectStateLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/OwnerLimitationType.php b/eZ/Publish/Core/Limitation/OwnerLimitationType.php
index c54caac..9c39c48 100644
--- a/eZ/Publish/Core/Limitation/OwnerLimitationType.php
+++ b/eZ/Publish/Core/Limitation/OwnerLimitationType.php
@@ -20,14 +20,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\OwnerLimitation as APIOwnerLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
 
 /**
  * OwnerLimitation is a Content limitation
  */
-class OwnerLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class OwnerLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/ParentContentTypeLimitationType.php b/eZ/Publish/Core/Limitation/ParentContentTypeLimitationType.php
index 7a426f9..6f7216a 100644
--- a/eZ/Publish/Core/Limitation/ParentContentTypeLimitationType.php
+++ b/eZ/Publish/Core/Limitation/ParentContentTypeLimitationType.php
@@ -22,14 +22,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\ParentContentTypeLimitation as APIParentContentTypeLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\SPI\Persistence\Content\Location as SPILocation;
 
 /**
  * ParentContentTypeLimitation is a Content limitation
  */
-class ParentContentTypeLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class ParentContentTypeLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/ParentDepthLimitationType.php b/eZ/Publish/Core/Limitation/ParentDepthLimitationType.php
index 441b18d..06c8b10 100644
--- a/eZ/Publish/Core/Limitation/ParentDepthLimitationType.php
+++ b/eZ/Publish/Core/Limitation/ParentDepthLimitationType.php
@@ -17,13 +17,12 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\ParentDepthLimitation as APIParentDepthLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\SPI\Persistence\Content\Location as SPILocation;
 
 /**
  * ParentDepthLimitation is a Content limitation
  */
-class ParentDepthLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class ParentDepthLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/ParentOwnerLimitationType.php b/eZ/Publish/Core/Limitation/ParentOwnerLimitationType.php
index 01ddd77..0d3fb36 100644
--- a/eZ/Publish/Core/Limitation/ParentOwnerLimitationType.php
+++ b/eZ/Publish/Core/Limitation/ParentOwnerLimitationType.php
@@ -18,14 +18,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\ParentOwnerLimitation as APIParentOwnerLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\SPI\Persistence\Content\Location as SPILocation;
 
 /**
  * ParentOwnerLimitation is a Content limitation
  */
-class ParentOwnerLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class ParentOwnerLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/ParentUserGroupLimitationType.php b/eZ/Publish/Core/Limitation/ParentUserGroupLimitationType.php
index 3fb1e0f..358ace2 100644
--- a/eZ/Publish/Core/Limitation/ParentUserGroupLimitationType.php
+++ b/eZ/Publish/Core/Limitation/ParentUserGroupLimitationType.php
@@ -18,14 +18,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\ParentUserGroupLimitation as APIParentUserGroupLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\SPI\Persistence\Content\Location as SPILocation;
 
 /**
  * ParentUserGroupLimitation is a Content limitation
  */
-class ParentUserGroupLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class ParentUserGroupLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/SectionLimitationType.php b/eZ/Publish/Core/Limitation/SectionLimitationType.php
index 9d6a64f..431ad56 100644
--- a/eZ/Publish/Core/Limitation/SectionLimitationType.php
+++ b/eZ/Publish/Core/Limitation/SectionLimitationType.php
@@ -20,14 +20,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\SectionLimitation as APISectionLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
 
 /**
  * SectionLimitation is a Content Limitation & a Role Limitation
  */
-class SectionLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class SectionLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/SiteAccessLimitationType.php b/eZ/Publish/Core/Limitation/SiteAccessLimitationType.php
index 9090ebe..9195a56 100644
--- a/eZ/Publish/Core/Limitation/SiteAccessLimitationType.php
+++ b/eZ/Publish/Core/Limitation/SiteAccessLimitationType.php
@@ -9,6 +9,7 @@
 
 namespace eZ\Publish\Core\Limitation;
 
+use eZ\Publish\API\Repository\Exceptions\NotImplementedException;
 use eZ\Publish\API\Repository\Values\ValueObject;
 use eZ\Publish\API\Repository\Values\User\User as APIUser;
 use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException;
@@ -125,7 +126,10 @@ class SiteAccessLimitationType implements SPILimitationTypeInterface
     }
 
     /**
-     * Returns Criterion for use in find() query
+     * Returns Criterion for use in findContent() query
+     *
+     * @throws \eZ\Publish\API\Repository\Exceptions\NotImplementedException If the limitation does not support
+     *         being used as a Criterion.
      *
      * @param \eZ\Publish\API\Repository\Values\User\Limitation $value
      * @param \eZ\Publish\API\Repository\Values\User\User $currentUser
@@ -134,7 +138,23 @@ class SiteAccessLimitationType implements SPILimitationTypeInterface
      */
     public function getCriterion( APILimitationValue $value, APIUser $currentUser )
     {
-        throw new \eZ\Publish\API\Repository\Exceptions\NotImplementedException( __METHOD__ );
+        throw new NotImplementedException( __METHOD__ );
+    }
+
+    /**
+     * Returns Criterion for use in findLocations() query
+     *
+     * @throws \eZ\Publish\API\Repository\Exceptions\NotImplementedException If the limitation does not support
+     *         being used as a Criterion.
+     *
+     * @param \eZ\Publish\API\Repository\Values\User\Limitation $value
+     * @param \eZ\Publish\API\Repository\Values\User\User $currentUser
+     *
+     * @return \eZ\Publish\API\Repository\Values\Content\Query\CriterionInterface
+     */
+    public function getLocationCriterion( APILimitationValue $value, APIUser $currentUser )
+    {
+        throw new NotImplementedException( __METHOD__ );
     }
 
     /**
@@ -145,6 +165,6 @@ class SiteAccessLimitationType implements SPILimitationTypeInterface
      */
     public function valueSchema()
     {
-        throw new \eZ\Publish\API\Repository\Exceptions\NotImplementedException( __METHOD__ );
+        throw new NotImplementedException( __METHOD__ );
     }
 }
diff --git a/eZ/Publish/Core/Limitation/StatusLimitationType.php b/eZ/Publish/Core/Limitation/StatusLimitationType.php
index db1d7f7..f65c3d8 100644
--- a/eZ/Publish/Core/Limitation/StatusLimitationType.php
+++ b/eZ/Publish/Core/Limitation/StatusLimitationType.php
@@ -149,7 +149,7 @@ class StatusLimitationType implements SPILimitationTypeInterface
     }
 
     /**
-     * Returns Criterion for use in find() query
+     * Returns Criterion for use in findContent() query
      *
      * @throws \eZ\Publish\API\Repository\Exceptions\NotImplementedException If the limitation does not support
      *         being used as a Criterion.
@@ -165,6 +165,22 @@ class StatusLimitationType implements SPILimitationTypeInterface
     }
 
     /**
+     * Returns Criterion for use in findLocations() query
+     *
+     * @throws \eZ\Publish\API\Repository\Exceptions\NotImplementedException If the limitation does not support
+     *         being used as a Criterion.
+     *
+     * @param \eZ\Publish\API\Repository\Values\User\Limitation $value
+     * @param \eZ\Publish\API\Repository\Values\User\User $currentUser
+     *
+     * @return \eZ\Publish\API\Repository\Values\Content\Query\CriterionInterface
+     */
+    public function getLocationCriterion( APILimitationValue $value, APIUser $currentUser )
+    {
+        throw new NotImplementedException( __METHOD__ );
+    }
+
+    /**
      * Returns info on valid $limitationValues
      *
      * @return mixed[]|int In case of array, a hash with key as valid limitations value and value as human readable name
diff --git a/eZ/Publish/Core/Limitation/SubtreeLimitationType.php b/eZ/Publish/Core/Limitation/SubtreeLimitationType.php
index 493597f..d46806b 100644
--- a/eZ/Publish/Core/Limitation/SubtreeLimitationType.php
+++ b/eZ/Publish/Core/Limitation/SubtreeLimitationType.php
@@ -23,14 +23,13 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\SubtreeLimitation as APISubtreeLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
 use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 use eZ\Publish\SPI\Persistence\Content\Location as SPILocation;
 
 /**
  * SubtreeLimitation is a Content Limitation & a Role Limitation
  */
-class SubtreeLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class SubtreeLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/Core/Limitation/UserGroupLimitationType.php b/eZ/Publish/Core/Limitation/UserGroupLimitationType.php
index d892530..39da954 100644
--- a/eZ/Publish/Core/Limitation/UserGroupLimitationType.php
+++ b/eZ/Publish/Core/Limitation/UserGroupLimitationType.php
@@ -21,13 +21,12 @@ use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType;
 use eZ\Publish\API\Repository\Values\User\Limitation\UserGroupLimitation as APIUserGroupLimitation;
 use eZ\Publish\API\Repository\Values\User\Limitation as APILimitationValue;
 use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
-use eZ\Publish\SPI\Limitation\Type as SPILimitationTypeInterface;
 use eZ\Publish\Core\FieldType\ValidationError;
 
 /**
  * UserGroupLimitation is a Content Limitation
  */
-class UserGroupLimitationType extends AbstractPersistenceLimitationType implements SPILimitationTypeInterface
+class UserGroupLimitationType extends AbstractPersistenceLimitationType
 {
     /**
      * Accepts a Limitation value and checks for structural validity.
diff --git a/eZ/Publish/SPI/Limitation/Type.php b/eZ/Publish/SPI/Limitation/Type.php
index 5a5559f..6ec26fd 100644
--- a/eZ/Publish/SPI/Limitation/Type.php
+++ b/eZ/Publish/SPI/Limitation/Type.php
@@ -80,7 +80,7 @@ interface Type
     public function evaluate( APILimitationValue $value, APIUser $currentUser, APIValueObject $object, array $targets = null );
 
     /**
-     * Returns Criterion for use in find() query
+     * Returns Criterion for use in SearchService findContent() query
      *
      * @throws \eZ\Publish\API\Repository\Exceptions\NotImplementedException If the limitation does not support
      *         being used as a Criterion.
@@ -93,6 +93,21 @@ interface Type
     public function getCriterion( APILimitationValue $value, APIUser $currentUser );
 
     /**
+     * Returns Criterion for use in SearchService findLocations() query
+     *
+     * This may in most cases be simply reuse {@see getCriterion()} as Criterion is often the same.
+     *
+     * @throws \eZ\Publish\API\Repository\Exceptions\NotImplementedException If the limitation does not support
+     *         being used as a Criterion.
+     *
+     * @param \eZ\Publish\API\Repository\Values\User\Limitation $value
+     * @param \eZ\Publish\API\Repository\Values\User\User $currentUser
+     *
+     * @return \eZ\Publish\API\Repository\Values\Content\Query\CriterionInterface
+     */
+    public function getLocationCriterion( APILimitationValue $value, APIUser $currentUser );
+
+    /**
      * Returns info on valid $limitationValues
      *
      * @return mixed[]|int In case of array, a hash with key as valid limitations value and value as human readable name
