diff --git a/Filter/AndFilter.php b/Filter/AndFilter.php
index b8d1154f276802a0f8894be460358787aac42b0e..a3bfb168b746a68e02c6c2380e85b7b2ee715cd1 100644
--- a/Filter/AndFilter.php
+++ b/Filter/AndFilter.php
@@ -16,32 +16,60 @@ use ONGR\ElasticsearchBundle\DSL\ParametersTrait;
 
 /**
  * Represents Elasticsearch "and" filter.
+ *
+ * @link http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-and-filter.html
  */
 class AndFilter implements BuilderInterface
 {
     use ParametersTrait;
 
     /**
-     * @var BuilderInterface[]
+     * @var array
      */
-    private $filters;
-
+    private $filters = [];
+    
     /**
-     * @param BuilderInterface[] $filters    Array.
+     * @param BuilderInterface[] $filters    Filter array.
      * @param array              $parameters Optional parameters.
      */
-    public function __construct($filters, array $parameters = [])
+    public function __construct(array $filters = [], array $parameters = [])
     {
-        $this->filters = $filters;
+        $this->set($filters);
         $this->setParameters($parameters);
     }
 
     /**
-     * {@inheritdoc}
+     * Sets filters.
+     *
+     * @param BuilderInterface[] $filters Filter array.
      */
-    public function getType()
+    public function set(array $filters)
     {
-        return 'and';
+        foreach ($filters as $filter) {
+            $this->add($filter);
+        }
+    }
+    
+    /**
+     * Adds filter.
+     *
+     * @param BuilderInterface $filter
+     *
+     * @return AndFilter
+     */
+    public function add(BuilderInterface $filter)
+    {
+        $this->filters[] = [$filter->getType() => $filter->toArray()];
+        
+        return $this;
+    }
+
+    /**
+     * Clears filters.
+     */
+    public function clear()
+    {
+        $this->filters = [];
     }
 
     /**
@@ -49,14 +77,22 @@ class AndFilter implements BuilderInterface
      */
     public function toArray()
     {
-        $query = [];
+        $query = $this->processArray();
 
-        foreach ($this->filters as $filter) {
-            $query['filters'][] = [$filter->getType() => $filter->toArray()];
+        if (count($query) > 0) {
+            $query['filters'] = $this->filters;
+        } else {
+            $query = $this->filters;
         }
 
-        $output = $this->processArray($query);
+        return $query;
+    }
 
-        return $output;
+    /**
+     * {@inheritdoc}
+     */
+    public function getType()
+    {
+        return 'and';
     }
 }