diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 38e815d..4e408ae 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -331,10 +331,8 @@
 
 void SerializerVisitor::VisitGatherLayer(const armnn::IConnectableLayer* layer, const char* name)
 {
-    auto fbBaseLayer  = CreateLayerBase(layer, serializer::LayerType::LayerType_Gather);
-
-    auto flatBufferLayer = CreateGatherLayer(m_flatBufferBuilder,
-                                             fbBaseLayer);
+    auto fbGatherBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Gather);
+    auto flatBufferLayer   = serializer::CreateGatherLayer(m_flatBufferBuilder, fbGatherBaseLayer);
 
     CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_GatherLayer);
 }
@@ -342,7 +340,7 @@
 void SerializerVisitor::VisitGreaterLayer(const armnn::IConnectableLayer* layer, const char* name)
 {
     auto fbGreaterBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Greater);
-    auto fbGreaterLayer = serializer::CreateGreaterLayer(m_flatBufferBuilder, fbGreaterBaseLayer);
+    auto fbGreaterLayer     = serializer::CreateGreaterLayer(m_flatBufferBuilder, fbGreaterBaseLayer);
 
     CreateAnyLayer(fbGreaterLayer.o, serializer::Layer::Layer_GreaterLayer);
 }
diff --git a/src/armnnSerializer/Serializer.hpp b/src/armnnSerializer/Serializer.hpp
index 1b1a3e9..5244a3c 100644
--- a/src/armnnSerializer/Serializer.hpp
+++ b/src/armnnSerializer/Serializer.hpp
@@ -19,7 +19,7 @@
 class SerializerVisitor : public armnn::LayerVisitorBase<armnn::VisitorNoThrowPolicy>
 {
 public:
-    SerializerVisitor() : m_layerId(0) {};
+    SerializerVisitor() : m_layerId(0) {}
     ~SerializerVisitor() {}
 
     flatbuffers::FlatBufferBuilder& GetFlatBufferBuilder()
@@ -94,7 +94,7 @@
 
     void VisitGatherLayer(const armnn::IConnectableLayer* layer,
                           const char* name = nullptr) override;
-                          
+
     void VisitGreaterLayer(const armnn::IConnectableLayer* layer,
                            const char* name = nullptr) override;
 
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index 62fa0c6..0689114 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -66,8 +66,8 @@
                                              const armnn::INetwork& originalNetwork,
                                              const std::vector<armnn::TensorShape>& inputShapes,
                                              const std::vector<armnn::TensorShape>& outputShapes,
-                                             const std::vector<armnn::LayerBindingId>& inputBindingIds={0},
-                                             const std::vector<armnn::LayerBindingId>& outputBindingIds={0})
+                                             const std::vector<armnn::LayerBindingId>& inputBindingIds = {0},
+                                             const std::vector<armnn::LayerBindingId>& outputBindingIds = {0})
 {
     BOOST_CHECK(inputShapes.size() == inputBindingIds.size());
     BOOST_CHECK(outputShapes.size() == outputBindingIds.size());
@@ -227,12 +227,12 @@
     armnn::ConstTensor constTensor(commonTensorInfo, constantData);
 
     // Builds up the structure of the network.
-    armnn::INetworkPtr net(armnn::INetwork::Create());
+    armnn::INetworkPtr network(armnn::INetwork::Create());
 
-    armnn::IConnectableLayer* input = net->AddInputLayer(0);
-    armnn::IConnectableLayer* constant = net->AddConstantLayer(constTensor, "constant");
-    armnn::IConnectableLayer* add = net->AddAdditionLayer();
-    armnn::IConnectableLayer* output = net->AddOutputLayer(0);
+    armnn::IConnectableLayer* input = network->AddInputLayer(0);
+    armnn::IConnectableLayer* constant = network->AddConstantLayer(constTensor, "constant");
+    armnn::IConnectableLayer* add = network->AddAdditionLayer();
+    armnn::IConnectableLayer* output = network->AddOutputLayer(0);
 
     input->GetOutputSlot(0).Connect(add->GetInputSlot(0));
     constant->GetOutputSlot(0).Connect(add->GetInputSlot(1));
@@ -243,14 +243,14 @@
     constant->GetOutputSlot(0).SetTensorInfo(commonTensorInfo);
     add->GetOutputSlot(0).SetTensorInfo(commonTensorInfo);
 
-    armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*net));
+    armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network));
     BOOST_CHECK(deserializedNetwork);
 
     VerifyConstantName nameChecker;
     deserializedNetwork->Accept(nameChecker);
 
     CheckDeserializedNetworkAgainstOriginal<float>(*deserializedNetwork,
-                                                   *net,
+                                                   *network,
                                                    {commonTensorInfo.GetShape()},
                                                    {commonTensorInfo.GetShape()});
 }
@@ -542,8 +542,8 @@
     VerifyGreaterName nameChecker;
     deserializedNetwork->Accept(nameChecker);
 
-    CheckDeserializedNetworkAgainstOriginal<float>(*network,
-                                                   *deserializedNetwork,
+    CheckDeserializedNetworkAgainstOriginal<float>(*deserializedNetwork,
+                                                   *network,
                                                    {inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()},
                                                    {outputTensorInfo.GetShape()},
                                                    {0, 1});
@@ -992,8 +992,8 @@
     VerifyBatchNormalizationName nameChecker;
     deserializedNetwork->Accept(nameChecker);
 
-    CheckDeserializedNetworkAgainstOriginal<float>(*network,
-                                                   *deserializedNetwork,
+    CheckDeserializedNetworkAgainstOriginal<float>(*deserializedNetwork,
+                                                   *network,
                                                    {inputInfo.GetShape()},
                                                    {outputInfo.GetShape()});
 }
@@ -1127,10 +1127,10 @@
     deserializedNetwork->Accept(nameChecker);
 
     CheckDeserializedNetworkAgainstOriginal<float>(*deserializedNetwork,
-                                                    *network,
-                                                    {inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()},
-                                                    {outputTensorInfo.GetShape()},
-                                                    {0, 1});
+                                                   *network,
+                                                   {inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()},
+                                                   {outputTensorInfo.GetShape()},
+                                                   {0, 1});
 }
 
 BOOST_AUTO_TEST_CASE(SerializeDeserializePad)
@@ -1168,9 +1168,9 @@
     deserializedNetwork->Accept(nameChecker);
 
     CheckDeserializedNetworkAgainstOriginal<float>(*deserializedNetwork,
-                                                    *network,
-                                                    {inputTensorInfo.GetShape()},
-                                                    {outputTensorInfo.GetShape()});
+                                                   *network,
+                                                   {inputTensorInfo.GetShape()},
+                                                   {outputTensorInfo.GetShape()});
 }
 
 BOOST_AUTO_TEST_CASE(SerializeRsqrt)
