diff --git a/src/armnn/test/CreateWorkload.hpp b/src/armnn/test/CreateWorkload.hpp
index f758aaa..be52ead 100644
--- a/src/armnn/test/CreateWorkload.hpp
+++ b/src/armnn/test/CreateWorkload.hpp
@@ -1069,9 +1069,9 @@
 
     std::vector<armnn::TensorShape> inputShapes{{ 2, 3, 2, 5 }, { 2, 3, 2, 5 }};
 
-    descriptor = CreateMergerDescriptorForConcatenation(inputShapes.begin(),
-                                                        inputShapes.end(),
-                                                        concatAxis);
+    descriptor = CreateDescriptorForConcatenation(inputShapes.begin(),
+                                                  inputShapes.end(),
+                                                  concatAxis);
 
     Layer* const merger = graph.AddLayer<MergerLayer>(descriptor, "merger");
     BOOST_TEST_CHECKPOINT("created merger layer");
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index 42111e6..01eae2e 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -1280,7 +1280,7 @@
     const std::vector<armnn::TensorShape> shapes({inputInfo.GetShape(), inputInfo.GetShape()});
 
     armnn::OriginsDescriptor descriptor =
-        armnn::CreateMergerDescriptorForConcatenation(shapes.begin(), shapes.end(), 0);
+        armnn::CreateDescriptorForConcatenation(shapes.begin(), shapes.end(), 0);
 
     armnn::INetworkPtr network = armnn::INetwork::Create();
     armnn::IConnectableLayer* const inputLayerOne = network->AddInputLayer(0);
@@ -1375,7 +1375,7 @@
     const std::vector<armnn::TensorShape> shapes({inputInfo.GetShape(), inputInfo.GetShape()});
 
     armnn::OriginsDescriptor descriptor =
-            armnn::CreateMergerDescriptorForConcatenation(shapes.begin(), shapes.end(), 0);
+            armnn::CreateDescriptorForConcatenation(shapes.begin(), shapes.end(), 0);
 
     MergerLayerVerifier verifier(layerName, {inputInfo, inputInfo}, {outputInfo}, descriptor);
     deserializedNetwork->Accept(verifier);
diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp
index 90aceee..5d05959 100644
--- a/src/backends/backendsCommon/test/LayerTests.cpp
+++ b/src/backends/backendsCommon/test/LayerTests.cpp
@@ -3251,7 +3251,7 @@
     inputTensorInfo = outputTensorInfo;
 }
 
-armnn::OriginsDescriptor CreateMergerDescriptorForConcatenation(
+armnn::OriginsDescriptor CreateDescriptorForConcatenation(
         const std::vector<armnn::TensorInfo> & inputTensorInfos,
         unsigned int concatDim)
 {
@@ -3262,9 +3262,9 @@
         shapes.push_back(it.GetShape());
     }
 
-    return armnn::CreateMergerDescriptorForConcatenation(shapes.begin(),
-                                                         shapes.end(),
-                                                         concatDim);
+    return armnn::CreateDescriptorForConcatenation(shapes.begin(),
+                                                   shapes.end(),
+                                                   concatDim);
 }
 
 //
@@ -3515,7 +3515,7 @@
     std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
 
     armnn::MergerQueueDescriptor queueDescriptor;
-    armnn::OriginsDescriptor viewsDescriptor = CreateMergerDescriptorForConcatenation(inputTensorInfos, concatDim);
+    armnn::OriginsDescriptor viewsDescriptor = CreateDescriptorForConcatenation(inputTensorInfos, concatDim);
     queueDescriptor.m_Parameters = viewsDescriptor;
 
     if (useSubtensor)
diff --git a/src/backends/backendsCommon/test/MergerTestImpl.hpp b/src/backends/backendsCommon/test/MergerTestImpl.hpp
index edf5e2b..8483cf0 100644
--- a/src/backends/backendsCommon/test/MergerTestImpl.hpp
+++ b/src/backends/backendsCommon/test/MergerTestImpl.hpp
@@ -30,9 +30,9 @@
 
     OriginsDescriptor descriptor;
 
-    descriptor = CreateMergerDescriptorForConcatenation(inputShapes.begin(),
-                                                        inputShapes.end(),
-                                                        concatAxis);
+    descriptor = CreateDescriptorForConcatenation(inputShapes.begin(),
+                                                  inputShapes.end(),
+                                                  concatAxis);
     ARMNN_NO_DEPRECATE_WARN_BEGIN
     IConnectableLayer* merger = net->AddMergerLayer(descriptor, "merger");
     ARMNN_NO_DEPRECATE_WARN_END
