diff --git a/Filter/HasChildFilter.php b/Filter/HasChildFilter.php
index 6af77f1f7b08f5ba7c4675c94a1d1f22892ad250..747a82863b9f898ab01cb039f0d766005f0bf3cb 100644
--- a/Filter/HasChildFilter.php
+++ b/Filter/HasChildFilter.php
@@ -21,6 +21,9 @@ class HasChildFilter implements BuilderInterface
 {
     use ParametersTrait;
 
+    const INNER_QUERY = 'query';
+    const INNER_FILTER = 'filter';
+
     /**
      * @var string
      */
@@ -31,15 +34,34 @@ class HasChildFilter implements BuilderInterface
      */
     private $filter;
 
+    /**
+     * @var BuilderInterface
+     */
+    private $query;
+
     /**
      * @param string           $type
-     * @param BuilderInterface $filter
+     * @param BuilderInterface $block
      * @param array            $parameters
+     * @param string           $inner
+     *
+     * @throws \InvalidArgumentException
      */
-    public function __construct($type, BuilderInterface $filter, array $parameters = [])
+    public function __construct($type, BuilderInterface $block, array $parameters = [], $inner = self::INNER_FILTER)
     {
         $this->type = $type;
-        $this->filter = $filter;
+
+        switch ($inner) {
+            case 'filter':
+                $this->filter = $block;
+                break;
+            case 'query':
+                $this->query = $block;
+                break;
+            default:
+                throw new \InvalidArgumentException('Not supported argument type');
+        }
+
         $this->setParameters($parameters);
     }
 
@@ -56,12 +78,17 @@ class HasChildFilter implements BuilderInterface
      */
     public function toArray()
     {
-        $query = [
-            'type' => $this->type,
-            'filter' => [
-                $this->filter->getType() => $this->filter->toArray(),
-            ],
-        ];
+        $query = [ 'type' => $this->type ];
+
+        $queries = ['filter', 'query'];
+
+        foreach ($queries as $type) {
+            if ($this->{$type}) {
+                $query[$type] = [
+                    $this->{$type}->getType() => $this->{$type}->toArray(),
+                ];
+            }
+        }
 
         $output = $this->processArray($query);
 
diff --git a/Filter/HasParentFilter.php b/Filter/HasParentFilter.php
index 50ee8e54aeee6d6798da9fcf597f410601626f3c..d81dce27febf8f834bf4e4ffd7d138dab9824abe 100644
--- a/Filter/HasParentFilter.php
+++ b/Filter/HasParentFilter.php
@@ -21,6 +21,9 @@ class HasParentFilter implements BuilderInterface
 {
     use ParametersTrait;
 
+    const INNER_QUERY = 'query';
+    const INNER_FILTER = 'filter';
+
     /**
      * @var string
      */
@@ -31,15 +34,38 @@ class HasParentFilter implements BuilderInterface
      */
     private $filter;
 
+    /**
+     * @var BuilderInterface
+     */
+    private $query;
+
     /**
      * @param string           $parentType
-     * @param BuilderInterface $filter
+     * @param BuilderInterface $block
      * @param array            $parameters
+     * @param string           $inner
+     *
+     * @throws \InvalidArgumentException
      */
-    public function __construct($parentType, BuilderInterface $filter, array $parameters = [])
-    {
+    public function __construct(
+        $parentType,
+        BuilderInterface $block,
+        array $parameters = [],
+        $inner = self::INNER_FILTER
+    ) {
         $this->parentType = $parentType;
-        $this->filter = $filter;
+
+        switch ($inner) {
+            case 'filter':
+                $this->filter = $block;
+                break;
+            case 'query':
+                $this->query = $block;
+                break;
+            default:
+                throw new \InvalidArgumentException('Not supported argument type');
+        }
+
         $this->setParameters($parameters);
     }
 
@@ -56,12 +82,17 @@ class HasParentFilter implements BuilderInterface
      */
     public function toArray()
     {
-        $query = [
-            'parent_type' => $this->parentType,
-            'filter' => [
-                $this->filter->getType() => $this->filter->toArray(),
-            ],
-        ];
+        $query = [ 'parent_type' => $this->parentType ];
+
+        $queries = ['filter', 'query'];
+
+        foreach ($queries as $type) {
+            if ($this->{$type}) {
+                $query[$type] = [
+                    $this->{$type}->getType() => $this->{$type}->toArray(),
+                ];
+            }
+        }
 
         $output = $this->processArray($query);