diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp
index f58a115..92433d1 100644
--- a/src/armnn/LoadedNetwork.cpp
+++ b/src/armnn/LoadedNetwork.cpp
@@ -132,12 +132,6 @@
 
     // Set up memory.
     m_OptimizedNetwork->GetGraph().AllocateDynamicBuffers();
-
-    // Finalize the workload factories before execution.
-    for (auto&& workloadFactory : m_WorkloadFactories)
-    {
-        workloadFactory.second->Finalize();
-    }
 }
 
 TensorInfo LoadedNetwork::GetInputTensorInfo(LayerBindingId layerId) const
diff --git a/src/backends/aclCommon/BaseMemoryManager.cpp b/src/backends/aclCommon/BaseMemoryManager.cpp
new file mode 100644
index 0000000..4e0d14c
--- /dev/null
+++ b/src/backends/aclCommon/BaseMemoryManager.cpp
@@ -0,0 +1,98 @@
+﻿//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#include "BaseMemoryManager.hpp"
+
+#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED)
+#include "arm_compute/runtime/BlobLifetimeManager.h"
+#include "arm_compute/runtime/PoolManager.h"
+#include "arm_compute/runtime/OffsetLifetimeManager.h"
+#endif
+
+#include <boost/polymorphic_cast.hpp>
+
+namespace armnn
+{
+
+#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED)
+BaseMemoryManager::BaseMemoryManager(std::unique_ptr<arm_compute::IAllocator> alloc,
+                                     MemoryAffinity memoryAffinity)
+{
+    BOOST_ASSERT(alloc);
+    m_Allocator = std::move(alloc);
+
+    m_IntraLayerMemoryMgr = CreateArmComputeMemoryManager(memoryAffinity);
+    m_InterLayerMemoryMgr = CreateArmComputeMemoryManager(memoryAffinity);
+}
+
+std::shared_ptr<arm_compute::MemoryManagerOnDemand>
+BaseMemoryManager::CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity)
+{
+    std::shared_ptr<arm_compute::ILifetimeManager> lifetimeManager = nullptr;
+
+    if (memoryAffinity == MemoryAffinity::Buffer)
+    {
+        lifetimeManager = std::make_shared<arm_compute::BlobLifetimeManager>();
+    }
+    else
+    {
+        lifetimeManager = std::make_shared<arm_compute::OffsetLifetimeManager>();
+    }
+
+    auto poolManager   = std::make_shared<arm_compute::PoolManager>();
+    auto memoryManager = std::make_shared<arm_compute::MemoryManagerOnDemand>(lifetimeManager, poolManager);
+
+    return memoryManager;
+}
+
+void BaseMemoryManager::Acquire()
+{
+    static const size_t s_NumPools = 1;
+
+    // Allocate memory pools for intra-layer memory manager
+    BOOST_ASSERT(m_IntraLayerMemoryMgr);
+    m_IntraLayerMemoryMgr->populate(*m_Allocator, s_NumPools);
+
+    // Allocate memory pools for inter-layer memory manager
+    BOOST_ASSERT(m_InterLayerMemoryMgr);
+    m_InterLayerMemoryMgr->populate(*m_Allocator, s_NumPools);
+
+    // Acquire inter-layer memory group. NOTE: This has to come after allocating the pools
+    BOOST_ASSERT(m_InterLayerMemoryGroup);
+    m_InterLayerMemoryGroup->acquire();
+}
+
+void BaseMemoryManager::Release()
+{
+    // Release inter-layer memory group. NOTE: This has to come before releasing the pools
+    BOOST_ASSERT(m_InterLayerMemoryGroup);
+    m_InterLayerMemoryGroup->release();
+
+    // Release memory pools managed by intra-layer memory manager
+    BOOST_ASSERT(m_IntraLayerMemoryMgr);
+    m_IntraLayerMemoryMgr->clear();
+
+    // Release memory pools managed by inter-layer memory manager
+    BOOST_ASSERT(m_InterLayerMemoryMgr);
+    m_InterLayerMemoryMgr->clear();
+}
+#endif
+
+#ifdef ARMCOMPUTENEON_ENABLED
+std::shared_ptr<arm_compute::IMemoryGroup>
+NeonMemoryManager::CreateMemoryGroup(const std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager)
+{
+    return std::make_shared<arm_compute::MemoryGroup>(memoryManager);
+}
+#endif
+
+#ifdef ARMCOMPUTECL_ENABLED
+std::shared_ptr<arm_compute::IMemoryGroup>
+ClMemoryManager::CreateMemoryGroup(const std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager)
+{
+    return std::make_shared<arm_compute::CLMemoryGroup>(memoryManager);
+}
+#endif
+
+}
diff --git a/src/backends/aclCommon/memory/BaseMemoryManager.hpp b/src/backends/aclCommon/BaseMemoryManager.hpp
similarity index 96%
rename from src/backends/aclCommon/memory/BaseMemoryManager.hpp
rename to src/backends/aclCommon/BaseMemoryManager.hpp
index a6ffff7..ffa440b 100644
--- a/src/backends/aclCommon/memory/BaseMemoryManager.hpp
+++ b/src/backends/aclCommon/BaseMemoryManager.hpp
@@ -43,12 +43,10 @@
     std::shared_ptr<arm_compute::MemoryManagerOnDemand>& GetInterLayerManager() { return m_InterLayerMemoryMgr; }
     std::shared_ptr<arm_compute::IMemoryGroup>& GetInterLayerMemoryGroup()      { return m_InterLayerMemoryGroup; }
 
-    void Finalize();
     void Acquire();
     void Release();
 
 protected:
-
     std::unique_ptr<arm_compute::IAllocator>            m_Allocator;
     std::shared_ptr<arm_compute::MemoryManagerOnDemand> m_IntraLayerMemoryMgr;
     std::shared_ptr<arm_compute::MemoryManagerOnDemand> m_InterLayerMemoryMgr;
@@ -59,7 +57,6 @@
     virtual std::shared_ptr<arm_compute::IMemoryGroup>
     CreateMemoryGroup(const std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager) = 0;
 
-    void FinalizeMemoryManager(arm_compute::MemoryManagerOnDemand& memoryManager);
 #endif
 };
 
diff --git a/src/backends/aclCommon/CMakeLists.txt b/src/backends/aclCommon/CMakeLists.txt
index 83c7c87..933d7ab 100644
--- a/src/backends/aclCommon/CMakeLists.txt
+++ b/src/backends/aclCommon/CMakeLists.txt
@@ -7,20 +7,8 @@
     ArmComputeTensorUtils.hpp
     ArmComputeTensorUtils.cpp
     ArmComputeUtils.hpp
-    memory/BaseMemoryManager.cpp
-    memory/BaseMemoryManager.hpp
-    memory/BlobLifetimeManager.cpp
-    memory/BlobLifetimeManager.hpp
-    memory/BlobMemoryPool.cpp
-    memory/BlobMemoryPool.hpp
-    memory/IMemoryPool.hpp
-    memory/IPoolManager.hpp
-    memory/OffsetLifetimeManager.cpp
-    memory/OffsetLifetimeManager.hpp
-    memory/OffsetMemoryPool.cpp
-    memory/OffsetMemoryPool.hpp
-    memory/PoolManager.cpp
-    memory/PoolManager.hpp
+    BaseMemoryManager.cpp
+    BaseMemoryManager.hpp
 )
 
 if(BUILD_UNIT_TESTS)
diff --git a/src/backends/aclCommon/common.mk b/src/backends/aclCommon/common.mk
index 67ba01b..cebceaf 100644
--- a/src/backends/aclCommon/common.mk
+++ b/src/backends/aclCommon/common.mk
@@ -9,12 +9,7 @@
 
 COMMON_SOURCES := \
     ArmComputeTensorUtils.cpp \
-    memory/BaseMemoryManager.cpp \
-    memory/BlobLifetimeManager.cpp \
-    memory/BlobMemoryPool.cpp \
-    memory/OffsetLifetimeManager.cpp \
-    memory/OffsetMemoryPool.cpp \
-    memory/PoolManager.cpp
+    BaseMemoryManager.cpp
 
 # COMMON_TEST_SOURCES contains the list of files to be included
 # in the Android unit test build (armnn-tests) and it is picked
diff --git a/src/backends/aclCommon/memory/BaseMemoryManager.cpp b/src/backends/aclCommon/memory/BaseMemoryManager.cpp
deleted file mode 100644
index 532692b..0000000
--- a/src/backends/aclCommon/memory/BaseMemoryManager.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-﻿//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#include "BaseMemoryManager.hpp"
-
-#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED)
-#include "BlobLifetimeManager.hpp"
-#include "PoolManager.hpp"
-#include "OffsetLifetimeManager.hpp"
-#endif
-
-#include <boost/polymorphic_cast.hpp>
-
-namespace armnn
-{
-
-#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED)
-BaseMemoryManager::BaseMemoryManager(std::unique_ptr<arm_compute::IAllocator> alloc,
-                                     MemoryAffinity memoryAffinity)
-{
-    // (Re)create the memory manager components.
-    m_Allocator = std::move(alloc);
-
-    m_IntraLayerMemoryMgr = CreateArmComputeMemoryManager(memoryAffinity);
-    m_InterLayerMemoryMgr = CreateArmComputeMemoryManager(memoryAffinity);
-}
-
-std::shared_ptr<arm_compute::MemoryManagerOnDemand>
-BaseMemoryManager::CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity)
-{
-    std::shared_ptr<arm_compute::ILifetimeManager> lifetimeManager = nullptr;
-
-    if (memoryAffinity == MemoryAffinity::Buffer)
-    {
-        lifetimeManager = std::make_shared<BlobLifetimeManager>();
-    }
-    else
-    {
-        lifetimeManager = std::make_shared<OffsetLifetimeManager>();
-    }
-
-    auto poolManager   = std::make_shared<PoolManager>();
-    auto memoryManager = std::make_shared<arm_compute::MemoryManagerOnDemand>(lifetimeManager, poolManager);
-
-    // Set allocator that the memory manager will use
-    memoryManager->set_allocator(m_Allocator.get());
-
-    return memoryManager;
-}
-
-void BaseMemoryManager::FinalizeMemoryManager(arm_compute::MemoryManagerOnDemand& memoryManager)
-{
-    // Number of pools that the manager will create. This specifies how many layers you want to run in parallel
-    memoryManager.set_num_pools(1);
-
-    // Finalize the memory manager. (Validity checks, memory allocations, etc)
-    memoryManager.finalize();
-}
-
-void BaseMemoryManager::Finalize()
-{
-    BOOST_ASSERT(m_IntraLayerMemoryMgr);
-    FinalizeMemoryManager(*m_IntraLayerMemoryMgr.get());
-
-    BOOST_ASSERT(m_InterLayerMemoryMgr);
-    FinalizeMemoryManager(*m_InterLayerMemoryMgr.get());
-}
-
-void BaseMemoryManager::Acquire()
-{
-    // Allocate memory pools for intra-layer memory manager
-    BOOST_ASSERT(m_IntraLayerMemoryMgr);
-    IPoolManager* poolManager = boost::polymorphic_downcast<IPoolManager*>(m_IntraLayerMemoryMgr->pool_manager());
-    BOOST_ASSERT(poolManager);
-    poolManager->AllocatePools();
-
-    // Allocate memory pools for inter-layer memory manager
-    BOOST_ASSERT(m_InterLayerMemoryMgr);
-    poolManager = boost::polymorphic_downcast<IPoolManager*>(m_InterLayerMemoryMgr->pool_manager());
-    BOOST_ASSERT(poolManager);
-    poolManager->AllocatePools();
-
-    // Acquire inter-layer memory group. NOTE: This has to come after allocating the pools
-    BOOST_ASSERT(m_InterLayerMemoryGroup);
-    m_InterLayerMemoryGroup->acquire();
-}
-
-void BaseMemoryManager::Release()
-{
-    // Release inter-layer memory group. NOTE: This has to come before releasing the pools
-    BOOST_ASSERT(m_InterLayerMemoryGroup);
-    m_InterLayerMemoryGroup->release();
-
-    // Release memory pools managed by intra-layer memory manager
-    BOOST_ASSERT(m_IntraLayerMemoryMgr);
-    IPoolManager* poolManager = boost::polymorphic_downcast<IPoolManager*>(m_IntraLayerMemoryMgr->pool_manager());
-    BOOST_ASSERT(poolManager);
-    poolManager->ReleasePools();
-
-    // Release memory pools managed by inter-layer memory manager
-    BOOST_ASSERT(m_InterLayerMemoryMgr);
-    poolManager = boost::polymorphic_downcast<IPoolManager*>(m_InterLayerMemoryMgr->pool_manager());
-    BOOST_ASSERT(poolManager);
-    poolManager->ReleasePools();
-}
-#endif
-
-#ifdef ARMCOMPUTENEON_ENABLED
-std::shared_ptr<arm_compute::IMemoryGroup>
-NeonMemoryManager::CreateMemoryGroup(const std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager)
-{
-    return std::make_shared<arm_compute::MemoryGroup>(memoryManager);
-}
-#endif
-
-#ifdef ARMCOMPUTECL_ENABLED
-std::shared_ptr<arm_compute::IMemoryGroup>
-ClMemoryManager::CreateMemoryGroup(const std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager)
-{
-    return std::make_shared<arm_compute::CLMemoryGroup>(memoryManager);
-}
-#endif
-
-}
diff --git a/src/backends/aclCommon/memory/BlobLifetimeManager.cpp b/src/backends/aclCommon/memory/BlobLifetimeManager.cpp
deleted file mode 100644
index 41100e9..0000000
--- a/src/backends/aclCommon/memory/BlobLifetimeManager.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#include "BlobLifetimeManager.hpp"
-#include "BlobMemoryPool.hpp"
-
-#include <arm_compute/runtime/IMemoryGroup.h>
-
-#include "boost/assert.hpp"
-
-#include <algorithm>
-
-namespace armnn
-{
-
-BlobLifetimeManager::BlobLifetimeManager()
-    : m_BlobSizes()
-{
-}
-
-arm_compute::MappingType BlobLifetimeManager::mapping_type() const
-{
-    return arm_compute::MappingType::BLOBS;
-}
-
-void BlobLifetimeManager::update_blobs_and_mappings()
-{
-    using namespace arm_compute;
-
-    BOOST_ASSERT(are_all_finalized());
-    BOOST_ASSERT(_active_group);
-
-    // Sort free blobs requirements in descending order.
-    _free_blobs.sort([](const Blob & ba, const Blob & bb)
-                     {
-                         return ba.max_size > bb.max_size;
-                     });
-    std::vector<size_t> groupSizes;
-    std::transform(std::begin(_free_blobs), std::end(_free_blobs), std::back_inserter(groupSizes), [](const Blob & b)
-    {
-        return b.max_size;
-    });
-
-    // Update blob sizes
-    size_t max_size = std::max(m_BlobSizes.size(), groupSizes.size());
-    m_BlobSizes.resize(max_size, 0);
-    groupSizes.resize(max_size, 0);
-    std::transform(std::begin(m_BlobSizes), std::end(m_BlobSizes), std::begin(groupSizes),
-        std::begin(m_BlobSizes), [](size_t lhs, size_t rhs)
-    {
-        return std::max(lhs, rhs);
-    });
-
-    // Calculate group mappings
-    auto& groupMappings  = _active_group->mappings();
-    unsigned int blobIdx = 0;
-
-    for(auto& freeBlob : _free_blobs)
-    {
-        for(auto& boundElementId : freeBlob.bound_elements)
-        {
-            BOOST_ASSERT(_active_elements.find(boundElementId) != std::end(_active_elements));
-
-            Element& boundElement = _active_elements[boundElementId];
-            groupMappings[boundElement.handle] = blobIdx;
-        }
-
-        ++blobIdx;
-    }
-}
-
-std::unique_ptr<arm_compute::IMemoryPool> BlobLifetimeManager::create_pool(arm_compute::IAllocator* allocator)
-{
-    BOOST_ASSERT(allocator);
-    return std::make_unique<BlobMemoryPool>(allocator, m_BlobSizes);
-}
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/BlobLifetimeManager.hpp b/src/backends/aclCommon/memory/BlobLifetimeManager.hpp
deleted file mode 100644
index d777ba5..0000000
--- a/src/backends/aclCommon/memory/BlobLifetimeManager.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include <arm_compute/runtime/ISimpleLifetimeManager.h>
-
-namespace armnn
-{
-
-class BlobLifetimeManager : public arm_compute::ISimpleLifetimeManager
-{
-public:
-    BlobLifetimeManager();
-
-    BlobLifetimeManager(const BlobLifetimeManager&) = delete;
-
-    BlobLifetimeManager& operator=(const BlobLifetimeManager&) = delete;
-
-    BlobLifetimeManager(BlobLifetimeManager&&) = default;
-
-    BlobLifetimeManager& operator=(BlobLifetimeManager&&) = default;
-
-    std::unique_ptr<arm_compute::IMemoryPool> create_pool(arm_compute::IAllocator* allocator) override;
-
-    arm_compute::MappingType mapping_type() const override;
-
-private:
-    void update_blobs_and_mappings() override;
-
-    std::vector<size_t> m_BlobSizes;
-};
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/BlobMemoryPool.cpp b/src/backends/aclCommon/memory/BlobMemoryPool.cpp
deleted file mode 100644
index 8b0a957..0000000
--- a/src/backends/aclCommon/memory/BlobMemoryPool.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#include "BlobMemoryPool.hpp"
-
-#include <boost/assert.hpp>
-
-namespace armnn
-{
-
-BlobMemoryPool::BlobMemoryPool(arm_compute::IAllocator* allocator, std::vector<size_t> blobSizes)
-        : m_Allocator(allocator)
-        , m_Blobs()
-        , m_BlobSizes(std::move(blobSizes))
-        , m_MemoryAllocated(false)
-{
-    AllocatePool();
-}
-
-BlobMemoryPool::~BlobMemoryPool()
-{
-    ReleasePool();
-}
-
-void BlobMemoryPool::acquire(arm_compute::MemoryMappings& handles)
-{
-    // Set memory to handlers
-    for (auto& handle : handles)
-    {
-        BOOST_ASSERT(handle.first);
-        *handle.first = m_Blobs[handle.second];
-    }
-}
-
-void BlobMemoryPool::release(arm_compute::MemoryMappings &handles)
-{
-    for (auto& handle : handles)
-    {
-        BOOST_ASSERT(handle.first);
-        *handle.first = nullptr;
-    }
-}
-
-arm_compute::MappingType BlobMemoryPool::mapping_type() const
-{
-    return arm_compute::MappingType::BLOBS;
-}
-
-std::unique_ptr<arm_compute::IMemoryPool> BlobMemoryPool::duplicate()
-{
-    BOOST_ASSERT(m_Allocator);
-    return std::make_unique<BlobMemoryPool>(m_Allocator, m_BlobSizes);
-}
-
-void BlobMemoryPool::AllocatePool()
-{
-    if (!m_MemoryAllocated)
-    {
-        BOOST_ASSERT(m_Allocator);
-
-        for (const auto& blobSize : m_BlobSizes)
-        {
-            m_Blobs.push_back(m_Allocator->allocate(blobSize, 0));
-        }
-
-        m_MemoryAllocated = true;
-    }
-}
-
-void BlobMemoryPool::ReleasePool()
-{
-    if (m_MemoryAllocated)
-    {
-        BOOST_ASSERT(m_Allocator);
-
-        for (auto& blob : m_Blobs)
-        {
-            m_Allocator->free(blob);
-        }
-
-        m_Blobs.clear();
-
-        m_MemoryAllocated = false;
-    }
-}
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/BlobMemoryPool.hpp b/src/backends/aclCommon/memory/BlobMemoryPool.hpp
deleted file mode 100644
index 4d42e6e..0000000
--- a/src/backends/aclCommon/memory/BlobMemoryPool.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include "IMemoryPool.hpp"
-
-#include <arm_compute/runtime/IAllocator.h>
-#include <arm_compute/runtime/Types.h>
-
-namespace armnn
-{
-
-/** Blob memory pool */
-class BlobMemoryPool : public IMemoryPool
-{
-public:
-    BlobMemoryPool(arm_compute::IAllocator* allocator, std::vector<size_t> blobSizes);
-
-    ~BlobMemoryPool();
-
-    BlobMemoryPool(const BlobMemoryPool&) = delete;
-
-    BlobMemoryPool& operator=(const BlobMemoryPool&) = delete;
-
-    BlobMemoryPool(BlobMemoryPool&&) = default;
-
-    BlobMemoryPool& operator=(BlobMemoryPool&&) = default;
-
-    void acquire(arm_compute::MemoryMappings &handles) override;
-    void release(arm_compute::MemoryMappings &handles) override;
-
-    arm_compute::MappingType mapping_type() const override;
-
-    std::unique_ptr<arm_compute::IMemoryPool> duplicate() override;
-
-    void AllocatePool() override;
-    void ReleasePool() override;
-
-private:
-    /// Allocator to use for internal allocation
-    arm_compute::IAllocator* m_Allocator;
-
-    /// Vector holding all the memory blobs
-    std::vector<void*> m_Blobs;
-
-    /// Sizes of each memory blob
-    std::vector<size_t> m_BlobSizes;
-
-    /// Flag indicating whether memory has been allocated for the pool
-    bool m_MemoryAllocated;
-};
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/IMemoryPool.hpp b/src/backends/aclCommon/memory/IMemoryPool.hpp
deleted file mode 100644
index 9913069..0000000
--- a/src/backends/aclCommon/memory/IMemoryPool.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include <arm_compute/runtime/IMemoryPool.h>
-
-namespace armnn
-{
-
-class IMemoryPool : public arm_compute::IMemoryPool
-{
-public:
-    /// Allocates memory for the entire pool
-    virtual void AllocatePool() = 0;
-
-    /// Releases all memory associated with the pool
-    virtual void ReleasePool() = 0;
-};
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/IPoolManager.hpp b/src/backends/aclCommon/memory/IPoolManager.hpp
deleted file mode 100644
index be15fdd..0000000
--- a/src/backends/aclCommon/memory/IPoolManager.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include <arm_compute/runtime/IPoolManager.h>
-
-namespace armnn
-{
-
-class IPoolManager : public arm_compute::IPoolManager {
-public:
-    // Allocates all pools within the pool manager
-    virtual void AllocatePools() = 0;
-
-    // Releases all pools within the pool manager
-    virtual void ReleasePools() = 0;
-};
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/OffsetLifetimeManager.cpp b/src/backends/aclCommon/memory/OffsetLifetimeManager.cpp
deleted file mode 100644
index d0174f8..0000000
--- a/src/backends/aclCommon/memory/OffsetLifetimeManager.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#include "OffsetLifetimeManager.hpp"
-#include "OffsetMemoryPool.hpp"
-
-#include <arm_compute/runtime/IMemoryGroup.h>
-
-#include <numeric>
-
-#include <boost/assert.hpp>
-
-namespace armnn
-{
-
-OffsetLifetimeManager::OffsetLifetimeManager()
-    : m_BlobSize(0)
-{
-}
-
-std::unique_ptr<arm_compute::IMemoryPool> OffsetLifetimeManager::create_pool(arm_compute::IAllocator* allocator)
-{
-    BOOST_ASSERT(allocator);
-    return std::make_unique<OffsetMemoryPool>(allocator, m_BlobSize);
-}
-
-arm_compute::MappingType OffsetLifetimeManager::mapping_type() const
-{
-    return arm_compute::MappingType::OFFSETS;
-}
-
-void OffsetLifetimeManager::update_blobs_and_mappings()
-{
-    BOOST_ASSERT(are_all_finalized());
-    BOOST_ASSERT(_active_group);
-
-    // Update blob size
-    size_t maxGroupSize = std::accumulate(std::begin(_free_blobs), std::end(_free_blobs),
-        static_cast<size_t>(0), [](size_t s, const Blob& b)
-    {
-        return s + b.max_size;
-    });
-    m_BlobSize = std::max(m_BlobSize, maxGroupSize);
-
-    // Calculate group mappings
-    auto& groupMappings = _active_group->mappings();
-    size_t offset = 0;
-    for(auto& freeBlob : _free_blobs)
-    {
-        for(auto& boundElementId : freeBlob.bound_elements)
-        {
-            BOOST_ASSERT(_active_elements.find(boundElementId) != std::end(_active_elements));
-            Element& boundElement = _active_elements[boundElementId];
-            groupMappings[boundElement.handle] = offset;
-        }
-        offset += freeBlob.max_size;
-        BOOST_ASSERT(offset <= m_BlobSize);
-    }
-}
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/OffsetLifetimeManager.hpp b/src/backends/aclCommon/memory/OffsetLifetimeManager.hpp
deleted file mode 100644
index 1283193..0000000
--- a/src/backends/aclCommon/memory/OffsetLifetimeManager.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include <arm_compute/runtime/ISimpleLifetimeManager.h>
-
-namespace armnn
-{
-
-class OffsetLifetimeManager : public arm_compute::ISimpleLifetimeManager
-{
-public:
-    OffsetLifetimeManager();
-
-    OffsetLifetimeManager(const OffsetLifetimeManager&) = delete;
-
-    OffsetLifetimeManager& operator=(const OffsetLifetimeManager&) = delete;
-
-    OffsetLifetimeManager(OffsetLifetimeManager&&) = default;
-
-    OffsetLifetimeManager& operator=(OffsetLifetimeManager&&) = default;
-
-    std::unique_ptr<arm_compute::IMemoryPool> create_pool(arm_compute::IAllocator* allocator) override;
-
-    arm_compute::MappingType mapping_type() const override;
-
-private:
-    void update_blobs_and_mappings() override;
-
-private:
-    /// Memory blob size
-    size_t m_BlobSize;
-};
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/OffsetMemoryPool.cpp b/src/backends/aclCommon/memory/OffsetMemoryPool.cpp
deleted file mode 100644
index 48bea5e..0000000
--- a/src/backends/aclCommon/memory/OffsetMemoryPool.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#include "OffsetMemoryPool.hpp"
-
-#include <boost/assert.hpp>
-
-#include <algorithm>
-
-namespace armnn
-{
-
-OffsetMemoryPool::OffsetMemoryPool(arm_compute::IAllocator* allocator, size_t blobSize)
-    : m_Allocator(allocator)
-    , m_Blob()
-    , m_BlobSize(blobSize)
-    , m_MemoryAllocated(false)
-{
-    AllocatePool();
-}
-
-OffsetMemoryPool::~OffsetMemoryPool()
-{
-    ReleasePool();
-}
-
-void OffsetMemoryPool::acquire(arm_compute::MemoryMappings& handles)
-{
-    BOOST_ASSERT(m_Blob);
-
-    // Set memory to handlers
-    for(auto& handle : handles)
-    {
-        BOOST_ASSERT(handle.first);
-        *handle.first = reinterpret_cast<uint8_t*>(m_Blob) + handle.second;
-    }
-}
-
-void OffsetMemoryPool::release(arm_compute::MemoryMappings &handles)
-{
-    for(auto& handle : handles)
-    {
-        BOOST_ASSERT(handle.first);
-        *handle.first = nullptr;
-    }
-}
-
-arm_compute::MappingType OffsetMemoryPool::mapping_type() const
-{
-    return arm_compute::MappingType::OFFSETS;
-}
-
-std::unique_ptr<arm_compute::IMemoryPool> OffsetMemoryPool::duplicate()
-{
-    BOOST_ASSERT(m_Allocator);
-    return std::make_unique<OffsetMemoryPool>(m_Allocator, m_BlobSize);
-}
-
-void OffsetMemoryPool::AllocatePool()
-{
-    if (!m_MemoryAllocated)
-    {
-        BOOST_ASSERT(m_Allocator);
-        m_Blob = m_Allocator->allocate(m_BlobSize, 0);
-
-        m_MemoryAllocated = true;
-    }
-}
-
-void OffsetMemoryPool::ReleasePool()
-{
-    if (m_MemoryAllocated)
-    {
-        BOOST_ASSERT(m_Allocator);
-
-        m_Allocator->free(m_Blob);
-        m_Blob = nullptr;
-
-        m_MemoryAllocated = false;
-    }
-}
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/OffsetMemoryPool.hpp b/src/backends/aclCommon/memory/OffsetMemoryPool.hpp
deleted file mode 100644
index 25cf8cd..0000000
--- a/src/backends/aclCommon/memory/OffsetMemoryPool.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include "IMemoryPool.hpp"
-
-#include <arm_compute/runtime/IAllocator.h>
-#include <arm_compute/runtime/Types.h>
-
-namespace armnn
-{
-
-class OffsetMemoryPool : public IMemoryPool
-{
-public:
-    OffsetMemoryPool(arm_compute::IAllocator* allocator, size_t blobSize);
-
-    ~OffsetMemoryPool();
-
-    OffsetMemoryPool(const OffsetMemoryPool&) = delete;
-
-    OffsetMemoryPool& operator=(const OffsetMemoryPool&) = delete;
-
-    OffsetMemoryPool(OffsetMemoryPool&&) = default;
-
-    OffsetMemoryPool& operator=(OffsetMemoryPool &&) = default;
-
-    void acquire(arm_compute::MemoryMappings& handles) override;
-    void release(arm_compute::MemoryMappings& handles) override;
-
-    arm_compute::MappingType mapping_type() const override;
-
-    std::unique_ptr<arm_compute::IMemoryPool> duplicate() override;
-
-    void AllocatePool() override;
-    void ReleasePool() override;
-
-private:
-    /// Allocator to use for internal allocation
-    arm_compute::IAllocator* m_Allocator;
-
-    /// Memory blob
-    void* m_Blob;
-
-    /// Size of the allocated memory blob
-    size_t m_BlobSize;
-
-    /// Flag indicating whether memory has been allocated for the pool
-    bool m_MemoryAllocated;
-};
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/PoolManager.cpp b/src/backends/aclCommon/memory/PoolManager.cpp
deleted file mode 100644
index 363b459..0000000
--- a/src/backends/aclCommon/memory/PoolManager.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#include "IMemoryPool.hpp"
-#include "PoolManager.hpp"
-
-#include <boost/assert.hpp>
-#include <boost/polymorphic_cast.hpp>
-
-#include <algorithm>
-
-namespace armnn
-{
-
-PoolManager::PoolManager()
-        : m_FreePools()
-        , m_OccupiedPools()
-        , m_Semaphore()
-        , m_Mutex()
-{}
-
-arm_compute::IMemoryPool *PoolManager::lock_pool()
-{
-    BOOST_ASSERT_MSG(!(m_FreePools.empty() && m_OccupiedPools.empty()), "Haven't setup any pools");
-
-    m_Semaphore->wait();
-    std::lock_guard<arm_compute::Mutex> lock(m_Mutex);
-
-    BOOST_ASSERT_MSG(!m_FreePools.empty(), "Empty pool must exist as semaphore has been signalled");
-    m_OccupiedPools.splice(std::begin(m_OccupiedPools), m_FreePools, std::begin(m_FreePools));
-
-    return m_OccupiedPools.front().get();
-}
-
-void PoolManager::unlock_pool(arm_compute::IMemoryPool *pool)
-{
-    BOOST_ASSERT_MSG(!(m_FreePools.empty() && m_OccupiedPools.empty()), "Haven't setup any pools!");
-
-    std::lock_guard<arm_compute::Mutex> lock(m_Mutex);
-
-    auto it = std::find_if(
-            std::begin(m_OccupiedPools),
-            std::end(m_OccupiedPools),
-            [pool](const std::unique_ptr<arm_compute::IMemoryPool> &poolIterator)
-            {
-                return poolIterator.get() == pool;
-            }
-    );
-
-    BOOST_ASSERT_MSG(it != std::end(m_OccupiedPools), "Pool to be unlocked couldn't be found");
-    m_FreePools.splice(std::begin(m_FreePools), m_OccupiedPools, it);
-    m_Semaphore->signal();
-}
-
-void PoolManager::register_pool(std::unique_ptr<arm_compute::IMemoryPool> pool)
-{
-    std::lock_guard<arm_compute::Mutex> lock(m_Mutex);
-    BOOST_ASSERT_MSG(m_OccupiedPools.empty(), "All pools should be free in order to register a new one");
-
-    // Set pool
-    m_FreePools.push_front(std::move(pool));
-
-    // Update semaphore
-    m_Semaphore = std::make_unique<arm_compute::Semaphore>(m_FreePools.size());
-}
-
-size_t PoolManager::num_pools() const
-{
-    std::lock_guard<arm_compute::Mutex> lock(m_Mutex);
-
-    return m_FreePools.size() + m_OccupiedPools.size();
-}
-
-void PoolManager::AllocatePools()
-{
-    std::lock_guard<arm_compute::Mutex> lock(m_Mutex);
-
-    for (auto& pool : m_FreePools)
-    {
-        boost::polymorphic_downcast<IMemoryPool*>(pool.get())->AllocatePool();
-    }
-
-    for (auto& pool : m_OccupiedPools)
-    {
-        boost::polymorphic_downcast<IMemoryPool*>(pool.get())->AllocatePool();
-    }
-}
-
-void PoolManager::ReleasePools()
-{
-    std::lock_guard<arm_compute::Mutex> lock(m_Mutex);
-
-    for (auto& pool : m_FreePools)
-    {
-        boost::polymorphic_downcast<IMemoryPool*>(pool.get())->ReleasePool();
-    }
-
-    for (auto& pool : m_OccupiedPools)
-    {
-        boost::polymorphic_downcast<IMemoryPool*>(pool.get())->ReleasePool();
-    }
-}
-
-} //namespace armnn
\ No newline at end of file
diff --git a/src/backends/aclCommon/memory/PoolManager.hpp b/src/backends/aclCommon/memory/PoolManager.hpp
deleted file mode 100644
index 39bc665..0000000
--- a/src/backends/aclCommon/memory/PoolManager.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include "IPoolManager.hpp"
-
-#include <arm_compute/runtime/IMemoryPool.h>
-#include <arm_compute/core/Error.h>
-
-#include <support/Mutex.h>
-#include <support/Semaphore.h>
-
-#include <cstddef>
-#include <list>
-#include <memory>
-
-namespace armnn
-{
-
-class PoolManager : public IPoolManager
-{
-public:
-    PoolManager();
-
-    PoolManager(const PoolManager &) = delete;
-
-    PoolManager &operator=(const PoolManager &) = delete;
-
-    PoolManager(PoolManager &&) = default;
-
-    PoolManager &operator=(PoolManager &&) = default;
-
-    arm_compute::IMemoryPool *lock_pool() override;
-    void unlock_pool(arm_compute::IMemoryPool *pool) override;
-    void register_pool(std::unique_ptr<arm_compute::IMemoryPool> pool) override;
-    size_t num_pools() const override;
-
-    void AllocatePools() override;
-    void ReleasePools() override;
-
-private:
-    /// List of free pools
-    std::list<std::unique_ptr<arm_compute::IMemoryPool>> m_FreePools;
-
-    /// List of occupied pools
-    std::list<std::unique_ptr<arm_compute::IMemoryPool>> m_OccupiedPools;
-
-    /// Semaphore to control the queues
-    std::unique_ptr<arm_compute::Semaphore> m_Semaphore;
-
-    /// Mutex to control access to the queues
-    mutable arm_compute::Mutex m_Mutex;
-};
-
-} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/backendsCommon/WorkloadFactory.hpp b/src/backends/backendsCommon/WorkloadFactory.hpp
index 34c1349..67876e1 100644
--- a/src/backends/backendsCommon/WorkloadFactory.hpp
+++ b/src/backends/backendsCommon/WorkloadFactory.hpp
@@ -25,9 +25,6 @@
 
     virtual const BackendId& GetBackendId() const = 0;
 
-    /// Informs the memory manager that the network is finalized and ready for execution.
-    virtual void Finalize() { }
-
     /// Inform the memory manager to release the memory
     virtual void Release() { }
 
diff --git a/src/backends/backendsCommon/test/BatchNormTestImpl.hpp b/src/backends/backendsCommon/test/BatchNormTestImpl.hpp
index 2360fd5..67282ed 100644
--- a/src/backends/backendsCommon/test/BatchNormTestImpl.hpp
+++ b/src/backends/backendsCommon/test/BatchNormTestImpl.hpp
@@ -87,7 +87,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -177,7 +176,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
diff --git a/src/backends/backendsCommon/test/Conv2dTestImpl.hpp b/src/backends/backendsCommon/test/Conv2dTestImpl.hpp
index aa3a44d..03becab 100755
--- a/src/backends/backendsCommon/test/Conv2dTestImpl.hpp
+++ b/src/backends/backendsCommon/test/Conv2dTestImpl.hpp
@@ -213,8 +213,9 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
+    workloadFactory.Release();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
 
@@ -304,8 +305,9 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
+    workloadFactory.Release();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
 
@@ -445,7 +447,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -589,7 +590,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -791,7 +791,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -891,7 +890,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1007,8 +1005,9 @@
 
     CopyDataToITensorHandle(inputHandle.get(), inputData.data());
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
+    workloadFactory.Release();
 
     // Output
     LayerTestResult<T,4> ret(outputInfo);
@@ -1105,9 +1104,10 @@
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
     CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
-    refWorkloadFactory.Finalize();
+    workloadFactory.Release();
+
     workloadRef->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1228,9 +1228,7 @@
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
     CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
-    refWorkloadFactory.Finalize();
     workloadRef->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
diff --git a/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp b/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp
index 125b7e6..298901e 100644
--- a/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp
+++ b/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp
@@ -41,8 +41,9 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
+    workloadFactory.Release();
 
     CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
 
diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp
index 12a7063..6b5fa72 100755
--- a/src/backends/backendsCommon/test/LayerTests.cpp
+++ b/src/backends/backendsCommon/test/LayerTests.cpp
@@ -931,7 +931,6 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
@@ -1021,7 +1020,6 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1098,7 +1096,6 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1170,7 +1167,6 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1255,9 +1251,7 @@
     CopyDataToITensorHandle(inputHandle1Ref.get(), &input1[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle2Ref.get(), &input2[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
-    refWorkloadFactory.Finalize();
     workloadRef->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1324,7 +1318,6 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -1527,7 +1520,6 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -1670,9 +1662,7 @@
     CopyDataToITensorHandle(inputHandle0Ref.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1Ref.get(), &input1[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
-    refWorkloadFactory.Finalize();
     workloadRef->Execute();
 
     CopyDataFromITensorHandle(&comparisonResult.output[0][0][0][0], outputHandle.get());
@@ -1751,9 +1741,7 @@
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
     CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
-    refWorkloadFactory.Finalize();
     workloadRef->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
@@ -2106,7 +2094,6 @@
         ++nextInputId;
     }
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     if (needPermuteForConcat)
@@ -3087,7 +3074,6 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -3152,7 +3138,6 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -3217,7 +3202,6 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -3280,7 +3264,6 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -3345,7 +3328,6 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -3394,7 +3376,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get());
@@ -3441,8 +3422,9 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
+    workloadFactory.Release();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
 
@@ -3515,7 +3497,6 @@
 
   CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
 
-  workloadFactory.Finalize();
   workload->Execute();
 
   CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
@@ -3596,7 +3577,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
@@ -3830,8 +3810,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
 
-    workloadFactory.Finalize();
-
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -4530,7 +4508,6 @@
 
     outputHandle->Allocate();
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -4673,7 +4650,6 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
@@ -4748,7 +4724,6 @@
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -4810,7 +4785,6 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -4984,7 +4958,6 @@
     CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]);
     CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5129,7 +5102,6 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5187,7 +5159,6 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5243,7 +5214,6 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5297,7 +5267,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5353,7 +5322,6 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
@@ -5875,7 +5843,6 @@
 
     CopyDataToITensorHandle(inputHandle.get(), input.origin());
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
@@ -6119,7 +6086,5 @@
 
     CopyDataFromITensorHandle(&addRet.output[0][0][0][0], addOutputHandle.get());
 
-    workloadFactory.Finalize();
-
     return addRet;
 }
diff --git a/src/backends/backendsCommon/test/LstmTestImpl.hpp b/src/backends/backendsCommon/test/LstmTestImpl.hpp
index 758f294d..bb567e7 100644
--- a/src/backends/backendsCommon/test/LstmTestImpl.hpp
+++ b/src/backends/backendsCommon/test/LstmTestImpl.hpp
@@ -210,7 +210,6 @@
     CopyDataToITensorHandle(outputStateInHandle.get(), &outputStateInTensor[0][0]);
     CopyDataToITensorHandle(cellStateInHandle.get(), &cellStateInTensor[0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get());
@@ -920,7 +919,6 @@
     CopyDataToITensorHandle(outputStateInHandle.get(), &outputStateInTensor[0][0]);
     CopyDataToITensorHandle(cellStateInHandle.get(), &cellStateInTensor[0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get());
@@ -1138,7 +1136,6 @@
     CopyDataToITensorHandle(outputStateOutHandle.get(), &outputStateOutTensor[0][0]);
     CopyDataToITensorHandle(cellStateOutHandle.get(), &cellStateOutTensor[0][0]);
 
-    workloadFactory.Finalize();
     workload->Execute();
 
     CopyDataFromITensorHandle(&ret0.output[0][0], scratchBufferHandle.get());
diff --git a/src/backends/backendsCommon/test/NormTestImpl.hpp b/src/backends/backendsCommon/test/NormTestImpl.hpp
index 0d8d434..16893eb 100644
--- a/src/backends/backendsCommon/test/NormTestImpl.hpp
+++ b/src/backends/backendsCommon/test/NormTestImpl.hpp
@@ -73,8 +73,9 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
+    workloadFactory.Release();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
 
@@ -215,8 +216,9 @@
 
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
+    workloadFactory.Release();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
 
@@ -330,9 +332,10 @@
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
     CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
-    refWorkloadFactory.Finalize();
+    workloadFactory.Release();
+
     workloadRef->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
diff --git a/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp b/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp
index 1e145a1..2a23986 100644
--- a/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp
+++ b/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp
@@ -62,8 +62,9 @@
     outputHandle->Allocate();
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
+    workloadFactory.Release();
 
     CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get());
 
@@ -141,9 +142,10 @@
     CopyDataToITensorHandle(inputHandle.get(), &input[0][0]);
     CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0]);
 
-    workloadFactory.Finalize();
+    workloadFactory.Acquire();
     workload->Execute();
-    refWorkloadFactory.Finalize();
+    workloadFactory.Release();
+
     workloadRef->Execute();
 
     CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get());
diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp
index 43c147f..eece934 100644
--- a/src/backends/cl/ClWorkloadFactory.cpp
+++ b/src/backends/cl/ClWorkloadFactory.cpp
@@ -19,8 +19,6 @@
 
 #include <backendsCommon/MemCopyWorkload.hpp>
 
-#include <aclCommon/memory/IPoolManager.hpp>
-
 #include <cl/ClTensorHandle.hpp>
 #include <cl/workloads/ClWorkloads.hpp>
 #include <cl/workloads/ClWorkloadUtils.hpp>
@@ -316,11 +314,6 @@
     return MakeWorkload<ClPadWorkload>(descriptor, info);
 }
 
-void ClWorkloadFactory::Finalize()
-{
-    m_MemoryManager.Finalize();
-}
-
 void ClWorkloadFactory::Release()
 {
     m_MemoryManager.Release();
@@ -537,10 +530,6 @@
     return nullptr;
 }
 
-void ClWorkloadFactory::Finalize()
-{
-}
-
 void ClWorkloadFactory::Release()
 {
 }
diff --git a/src/backends/cl/ClWorkloadFactory.hpp b/src/backends/cl/ClWorkloadFactory.hpp
index ff7e56c..c45bc15 100644
--- a/src/backends/cl/ClWorkloadFactory.hpp
+++ b/src/backends/cl/ClWorkloadFactory.hpp
@@ -8,7 +8,7 @@
 #include <armnn/Optional.hpp>
 
 #include <backendsCommon/OutputHandler.hpp>
-#include <aclCommon/memory/BaseMemoryManager.hpp>
+#include <aclCommon/BaseMemoryManager.hpp>
 
 namespace armnn
 {
@@ -126,8 +126,6 @@
     virtual std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& descriptor,
                                                  const WorkloadInfo& info) const override;
 
-    virtual void Finalize() override;
-
     virtual void Release() override;
 
     virtual void Acquire() override;
diff --git a/src/backends/cl/test/ClContextControlFixture.hpp b/src/backends/cl/test/ClContextControlFixture.hpp
index 52e3414..0371c69 100644
--- a/src/backends/cl/test/ClContextControlFixture.hpp
+++ b/src/backends/cl/test/ClContextControlFixture.hpp
@@ -6,26 +6,14 @@
 #pragma once
 
 #include <cl/ClContextControl.hpp>
+#include <backendsCommon/WorkloadFactory.hpp>
 
 template<bool ProfilingEnabled>
 struct ClContextControlFixtureBase
 {
-    static ClContextControlFixtureBase*& Instance()
-    {
-        static ClContextControlFixtureBase* s_Instance = nullptr;
-        return s_Instance;
-    }
-
     // Initialising ClContextControl to ensure OpenCL is loaded correctly for each test case
     ClContextControlFixtureBase()
-        : m_ClContextControl(nullptr, ProfilingEnabled)
-    {
-        Instance() = this;
-    }
-    ~ClContextControlFixtureBase()
-    {
-        Instance() = nullptr;
-    }
+        : m_ClContextControl(nullptr, ProfilingEnabled) {}
 
     armnn::ClContextControl m_ClContextControl;
 };
diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp
index 6046867..11b5634 100644
--- a/src/backends/neon/NeonWorkloadFactory.cpp
+++ b/src/backends/neon/NeonWorkloadFactory.cpp
@@ -16,7 +16,6 @@
 #include "workloads/NeonWorkloadUtils.hpp"
 #include "workloads/NeonWorkloads.hpp"
 
-#include <aclCommon/memory/IPoolManager.hpp>
 #endif
 
 #include <backendsCommon/MakeWorkloadHelper.hpp>
@@ -280,11 +279,6 @@
     return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info);
 }
 
-void NeonWorkloadFactory::Finalize()
-{
-    m_MemoryManager.Finalize();
-}
-
 void NeonWorkloadFactory::Release()
 {
     m_MemoryManager.Release();
@@ -501,9 +495,6 @@
     return nullptr;
 }
 
-void NeonWorkloadFactory::Finalize()
-{}
-
 void NeonWorkloadFactory::Release()
 {}
 
diff --git a/src/backends/neon/NeonWorkloadFactory.hpp b/src/backends/neon/NeonWorkloadFactory.hpp
index abcd033..9b574f6 100644
--- a/src/backends/neon/NeonWorkloadFactory.hpp
+++ b/src/backends/neon/NeonWorkloadFactory.hpp
@@ -5,8 +5,9 @@
 #pragma once
 
 #include <armnn/Optional.hpp>
+
 #include <backendsCommon/OutputHandler.hpp>
-#include <aclCommon/memory/BaseMemoryManager.hpp>
+#include <aclCommon/BaseMemoryManager.hpp>
 
 #include <boost/core/ignore_unused.hpp>
 
@@ -127,8 +128,6 @@
     virtual std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& descriptor,
                                                  const WorkloadInfo& info) const override;
 
-    virtual void Finalize() override;
-
     virtual void Release() override;
 
     virtual void Acquire() override;
