diff --git a/src/Aggregation/Bucketing/CompositeAggregation.php b/src/Aggregation/Bucketing/CompositeAggregation.php
index d36c9007b805d9ef70bc4d67962258a3dad266c5..7d42d4fc18b4d6b0a45bd3d3c0a2e1bb6aaa9d3c 100644
--- a/src/Aggregation/Bucketing/CompositeAggregation.php
+++ b/src/Aggregation/Bucketing/CompositeAggregation.php
@@ -33,7 +33,7 @@ class CompositeAggregation extends AbstractAggregation
      * Inner aggregations container init.
      *
      * @param string             $name
-     * @param BuilderInterface[] $sources
+     * @param AbstractAggregation[] $sources
      */
     public function __construct($name, $sources = [])
     {
@@ -45,16 +45,20 @@ class CompositeAggregation extends AbstractAggregation
     }
 
     /**
-     * @param BuilderInterface $agg
+     * @param AbstractAggregation $agg
      *
      * @throws \LogicException
      *
      * @return self
      */
-    public function addSource(BuilderInterface $agg)
+    public function addSource(AbstractAggregation $agg)
     {
+        $array = $agg->getArray();
+
+        $array = is_array($array) ? array_merge($array, $agg->getParameters()) : $array;
+
         $this->sources[] = [
-            $agg->getName() => [ $agg->getType() => $agg->getArray() ]
+            $agg->getName() => [ $agg->getType() => $array ]
         ];
 
         return $this;
diff --git a/tests/Unit/Aggregation/Bucketing/CompositeAggregationTest.php b/tests/Unit/Aggregation/Bucketing/CompositeAggregationTest.php
index d10953206ec4b4070f4b4e60450eec1d6e89e72d..70e9c62f8d798dfc467fbce85ca69e4a22a81310 100644
--- a/tests/Unit/Aggregation/Bucketing/CompositeAggregationTest.php
+++ b/tests/Unit/Aggregation/Bucketing/CompositeAggregationTest.php
@@ -47,4 +47,76 @@ class CompositeAggregationTest extends \PHPUnit\Framework\TestCase
         $result = $aggregation->getType();
         $this->assertEquals('composite', $result);
     }
+
+    public function testTermsSourceWithOrderParameter()
+    {
+        $compositeAgg = new CompositeAggregation('composite_with_order');
+        $termsAgg = new TermsAggregation('test_term_agg', 'test_field');
+        $termsAgg->addParameter('order', 'asc');
+        $compositeAgg->addSource($termsAgg);
+
+        $expectedResult = [
+            'composite' => [
+                'sources' =>  [
+                    [
+                        'test_term_agg' => [ 'terms' => ['field' => 'test_field', 'order' => 'asc'] ],
+                    ]
+                ]
+            ],
+        ];
+
+        $this->assertEquals($expectedResult, $compositeAgg->toArray());
+    }
+
+
+    public function testTermsSourceWithDescOrderParameter()
+    {
+        $compositeAgg = new CompositeAggregation('composite_with_order');
+        $termsAgg = new TermsAggregation('test_term_agg', 'test_field');
+        $termsAgg->addParameter('order', 'desc');
+        $compositeAgg->addSource($termsAgg);
+
+        $expectedResult = [
+            'composite' => [
+                'sources' =>  [
+                    [
+                        'test_term_agg' => [ 'terms' => ['field' => 'test_field', 'order' => 'desc'] ],
+                    ]
+                ]
+            ],
+        ];
+
+        $this->assertEquals($expectedResult, $compositeAgg->toArray());
+    }
+
+
+    public function testMultipleSourcesWithDifferentOrders()
+    {
+        $compositeAgg = new CompositeAggregation('composite_with_order');
+
+        $termsAgg = new TermsAggregation('test_term_agg_1', 'test_field');
+        $termsAgg->addParameter('order', 'desc');
+        $compositeAgg->addSource($termsAgg);
+
+        $termsAgg = new TermsAggregation('test_term_agg_2', 'test_field');
+        $termsAgg->addParameter('order', 'asc');
+        $compositeAgg->addSource($termsAgg);
+
+        $expectedResult = [
+            'composite' => [
+                'sources' =>  [
+                    [
+                        'test_term_agg_1' => [ 'terms' => ['field' => 'test_field', 'order' => 'desc'] ],
+                    ],
+                    [
+                        'test_term_agg_2' => [ 'terms' => ['field' => 'test_field', 'order' => 'asc'] ],
+                    ]
+                ]
+            ],
+        ];
+
+        $this->assertEquals($expectedResult, $compositeAgg->toArray());
+    }
+
+
 }