diff --git a/src/armnn/ISubgraphViewConverter.hpp b/src/armnn/ISubgraphViewConverter.hpp
index 1f4b4e5..4b2c102 100644
--- a/src/armnn/ISubgraphViewConverter.hpp
+++ b/src/armnn/ISubgraphViewConverter.hpp
@@ -20,7 +20,7 @@
 public:
     virtual ~ISubgraphViewConverter() {}
 
-    virtual std::vector<CompiledBlobPtr> GetOutput() = 0;
+    virtual std::vector<CompiledBlobPtr> CompileNetwork() = 0;
 };
 
 } // namespace armnn
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index 1eb40d5..c3f29d4 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -365,25 +365,26 @@
         for (auto& subgraph : subgraphs)
         {
             // Try to optimize the current sub-graph
-            OptimizationViews optViews = backendObjPtr->OptimizeSubgraphView(*subgraph);
-            BOOST_ASSERT(optViews.Validate(*subgraph));
+            OptimizationViews optimizationViews = backendObjPtr->OptimizeSubgraphView(*subgraph);
+            BOOST_ASSERT(optimizationViews.Validate(*subgraph));
 
             // Optimization attempted, check the resulting optimized sub-graph
-            for (auto& substitution : optViews.GetSubstitutions())
+            for (auto& substitution : optimizationViews.GetSubstitutions())
             {
                 // Sub-graph optimized, substitute the sub-graph with the new optimized one in the main optimized graph
-                SubgraphView& optSubgraph = substitution.m_ReplacementSubgraph;
-                optGraph.SubstituteSubgraph(substitution.m_SubstitutableSubgraph, optSubgraph);
+                SubgraphView& replacementSubgraph   = substitution.m_ReplacementSubgraph;
+                SubgraphView& substitutableSubgraph = substitution.m_SubstitutableSubgraph;
+                optGraph.SubstituteSubgraph(substitutableSubgraph, replacementSubgraph);
 
                 // Assign the current backend to the optimized sub-graph
-                std::for_each(optSubgraph.begin(), optSubgraph.end(), [&selectedBackend](Layer* l)
+                std::for_each(replacementSubgraph.begin(), replacementSubgraph.end(), [&selectedBackend](Layer* l)
                     {
                         BOOST_ASSERT(l);
                         l->SetBackendId(selectedBackend);
                     });
             }
 
-            if (!optViews.GetFailedSubgraphs().empty())
+            if (!optimizationViews.GetFailedSubgraphs().empty())
             {
                 std::stringstream warningMsg;
                 warningMsg << "Some sub-graph(s) failed to optimized on " << backendObjPtr->GetId() << " backend.";
@@ -398,7 +399,7 @@
                 }
 
                 int count=0;
-                for (auto& failedSubgraph : optViews.GetFailedSubgraphs())
+                for (auto& failedSubgraph : optimizationViews.GetFailedSubgraphs())
                 {
                     // An error occurred: the optimization was attempted but not performed, try different backends
                     std::stringstream subgraphMsg;
diff --git a/src/backends/backendsCommon/IBackendInternal.hpp b/src/backends/backendsCommon/IBackendInternal.hpp
index 5316f68..3d94d6e 100644
--- a/src/backends/backendsCommon/IBackendInternal.hpp
+++ b/src/backends/backendsCommon/IBackendInternal.hpp
@@ -59,7 +59,7 @@
     // @deprecated Use "OptimizationViews OptimizeSubgraphView(const SubgraphView&);" instead.
     virtual SubgraphViewUniquePtr OptimizeSubgraphView(const SubgraphView& subgraph, bool& optimizationAttempted) const
     {
-        optimizationAttempted=false;
+        optimizationAttempted = false;
         return nullptr;
     }
 
@@ -67,11 +67,11 @@
     // Override this method with a custom optimization implementation.
     virtual OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const
     {
-        bool attempted=false;
-        SubgraphViewUniquePtr optSubgraph = OptimizeSubgraphView(subgraph, attempted);
+        bool optimizationAttempted = false;
+        SubgraphViewUniquePtr optSubgraph = OptimizeSubgraphView(subgraph, optimizationAttempted);
 
         OptimizationViews result;
-        if (!attempted)
+        if (!optimizationAttempted)
         {
             result.AddUntouchedSubgraph(SubgraphView(subgraph));
         }
@@ -79,7 +79,7 @@
         {
             if (optSubgraph)
             {
-                result.AddSubstituion({*optSubgraph.get(), subgraph});
+                result.AddSubstituion({subgraph, SubgraphView(*optSubgraph.get())});
             }
             else
             {
diff --git a/src/backends/backendsCommon/OptimizationViews.hpp b/src/backends/backendsCommon/OptimizationViews.hpp
index 14296f0..e96c11a 100644
--- a/src/backends/backendsCommon/OptimizationViews.hpp
+++ b/src/backends/backendsCommon/OptimizationViews.hpp
@@ -8,6 +8,7 @@
 
 namespace armnn
 {
+
 class OptimizationViews
 {
 public:
@@ -44,18 +45,25 @@
         m_UntouchedSubgraphs.emplace_back(subgraph);
     }
 
-    Substitutions GetSubstitutions() const { return m_SuccesfulOptimizations; }
-    Subgraphs GetFailedSubgraphs() const { return m_FailedOptimizations; }
-    Subgraphs GetUntouchedSubgraphs() const { return m_UntouchedSubgraphs; }
+    const Substitutions& GetSubstitutions() const { return m_SuccesfulOptimizations; }
+    const Subgraphs& GetFailedSubgraphs() const { return m_FailedOptimizations; }
+    const Subgraphs& GetUntouchedSubgraphs() const { return m_UntouchedSubgraphs; }
+
+    Substitutions& GetSubstitutions() { return m_SuccesfulOptimizations; }
+    Subgraphs& GetFailedSubgraphs() { return m_FailedOptimizations; }
+    Subgraphs& GetUntouchedSubgraphs() { return m_UntouchedSubgraphs; }
+
     bool Validate(const SubgraphView& originalSubgraph) const;
 
-    Graph& GetGraph() { return m_Graph; };
+    Graph& GetGraph() { return m_Graph; }
 
 private:
     Substitutions m_SuccesfulOptimizations;     ///< Proposed substitutions from successful optimizations
     Subgraphs m_FailedOptimizations;            ///< Subgraphs from the original subgraph which cannot be supported
     Subgraphs m_UntouchedSubgraphs;             ///< Subgraphs from the original subgraph which remain unmodified
 
+    /// Graph object used only as a container for any layer generated by the optimization process
     Graph m_Graph;
 };
+
 } //namespace armnn
