diff --git a/core/lib/Thelia/Condition/Implementation/ForSomeCustomers.php b/core/lib/Thelia/Condition/Implementation/ForSomeCustomers.php
new file mode 100644
index 000000000..7d77ed103
--- /dev/null
+++ b/core/lib/Thelia/Condition/Implementation/ForSomeCustomers.php
@@ -0,0 +1,185 @@
+
+ *
+ */
+class ForSomeCustomers extends ConditionAbstract
+{
+ const CUSTOMERS_LIST = 'customers';
+
+ /**
+ * @inheritdoc
+ */
+ public function __construct(FacadeInterface $facade)
+ {
+ $this->availableOperators = [
+ self::CUSTOMERS_LIST => [
+ Operators::IN,
+ Operators::OUT
+ ]
+ ];
+
+ parent::__construct($facade);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getServiceId()
+ {
+ return 'thelia.condition.for_some_customers';
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function setValidatorsFromForm(array $operators, array $values)
+ {
+ $this->checkComparisonOperatorValue($operators, self::CUSTOMERS_LIST);
+
+ // Use default values if data is not defined.
+ if (! isset($operators[self::CUSTOMERS_LIST]) || ! isset($values[self::CUSTOMERS_LIST])) {
+ $operators[self::CUSTOMERS_LIST] = Operators::IN;
+ $values[self::CUSTOMERS_LIST] = [];
+ }
+
+ // Be sure that the value is an array, make one if required
+ if (! is_array($values[self::CUSTOMERS_LIST])) {
+ $values[self::CUSTOMERS_LIST] = array($values[self::CUSTOMERS_LIST]);
+ }
+
+ // Check that at least one product is selected
+ if (empty($values[self::CUSTOMERS_LIST])) {
+ throw new InvalidConditionValueException(
+ get_class(), self::CUSTOMERS_LIST
+ );
+ }
+
+ $this->operators = [ self::CUSTOMERS_LIST => $operators[self::CUSTOMERS_LIST] ];
+ $this->values = [ self::CUSTOMERS_LIST => $values[self::CUSTOMERS_LIST] ];
+
+ return $this;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function isMatching()
+ {
+ $customer = $this->facade->getCustomer();
+
+ return $this->conditionValidator->variableOpComparison(
+ $customer->getId(),
+ $this->operators[self::CUSTOMERS_LIST],
+ $this->values[self::CUSTOMERS_LIST]
+ );
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getName()
+ {
+ return $this->translator->trans(
+ 'For one ore more customers',
+ [],
+ 'condition'
+ );
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getToolTip()
+ {
+ $toolTip = $this->translator->trans(
+ 'The coupon applies to some customers only',
+ [],
+ 'condition'
+ );
+
+ return $toolTip;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getSummary()
+ {
+ $i18nOperator = Operators::getI18n(
+ $this->translator, $this->operators[self::CUSTOMERS_LIST]
+ );
+
+ $custStrList = '';
+
+ $custIds = $this->values[self::CUSTOMERS_LIST];
+
+ if (null !== $custList = CustomerQuery::create()->findPks($custIds)) {
+
+ /** @var Customer $cust */
+ foreach($custList as $cust) {
+ $custStrList .= $cust->getLastname() . ' ' . $cust->getFirstname() . ' ('.$cust->getRef().'), ';
+ }
+
+ $custStrList = rtrim($custStrList, ', ');
+ }
+
+ $toolTip = $this->translator->trans(
+ 'Customer is %op% %customer_list%', [
+ '%customer_list%' => $custStrList,
+ '%op%' => $i18nOperator
+ ], 'condition'
+ );
+
+ return $toolTip;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ protected function generateInputs()
+ {
+ return array(
+ self::CUSTOMERS_LIST => array(
+ 'availableOperators' => $this->availableOperators[self::CUSTOMERS_LIST],
+ 'value' => '',
+ 'selectedOperator' => Operators::IN
+ )
+ );
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function drawBackOfficeInputs()
+ {
+ return $this->facade->getParser()->render('coupon/condition-fragments/customers-condition.html', [
+ 'operatorSelectHtml' => $this->drawBackOfficeInputOperators(self::CUSTOMERS_LIST),
+ 'customers_field_name' => self::CUSTOMERS_LIST,
+ 'values' => isset($this->values[self::CUSTOMERS_LIST]) ? $this->values[self::CUSTOMERS_LIST] : array()
+ ]
+ );
+ }
+}
diff --git a/core/lib/Thelia/Config/Resources/coupon.xml b/core/lib/Thelia/Config/Resources/coupon.xml
index 654d1d67c..68de33c37 100644
--- a/core/lib/Thelia/Config/Resources/coupon.xml
+++ b/core/lib/Thelia/Config/Resources/coupon.xml
@@ -77,6 +77,11 @@