diff --git a/SDK/CPP/public/include/voltu/initialise.hpp b/SDK/CPP/public/include/voltu/initialise.hpp
index 5d34a1e691797b8c4922aa274775d7f84ef401ac..7c72189dcf669982d48abd5a797b52c9c3832e58 100644
--- a/SDK/CPP/public/include/voltu/initialise.hpp
+++ b/SDK/CPP/public/include/voltu/initialise.hpp
@@ -43,4 +43,6 @@ namespace voltu
 	 * @return Singleton VolTu runtime instance.
 	 */
 	std::shared_ptr<voltu::System> instance();
+
+	void release();
 }
diff --git a/SDK/CPP/public/include/voltu/voltu.hpp b/SDK/CPP/public/include/voltu/voltu.hpp
index c59518dcf75541a5dca78b6bc6e94dbd83c92047..2bd0ff0a07651a9b562f8921869b729ca30b9233 100644
--- a/SDK/CPP/public/include/voltu/voltu.hpp
+++ b/SDK/CPP/public/include/voltu/voltu.hpp
@@ -15,3 +15,23 @@
 
 #include <voltu/system.hpp>
 #include <voltu/initialise.hpp>
+
+namespace voltu
+{
+
+class Voltu
+{
+public:
+	inline Voltu() : instance_(voltu::instance()) {}
+	inline ~Voltu() { instance_.reset(); voltu::release(); }
+
+	inline voltu::System* operator->()
+	{
+		return instance_.get();
+	}
+
+private:
+	std::shared_ptr<voltu::System> instance_;
+};
+
+}
diff --git a/SDK/CPP/public/samples/fusion_evaluator/main.cpp b/SDK/CPP/public/samples/fusion_evaluator/main.cpp
index f9b96468c292883118559a1542ca0b833d4a0e20..40db29fe5024e1e994a02a732dea9cb9f56b4ccc 100644
--- a/SDK/CPP/public/samples/fusion_evaluator/main.cpp
+++ b/SDK/CPP/public/samples/fusion_evaluator/main.cpp
@@ -74,7 +74,7 @@ int main(int argc, char **argv)
 		}
 	}
 
-	auto vtu = voltu::instance();
+	voltu::Voltu vtu;
 
 	for (const auto &p : paths)
 	{
diff --git a/SDK/CPP/public/voltu.cpp b/SDK/CPP/public/voltu.cpp
index d558ff7b0897ab96cb58b55e115a21ebe42980d3..9c9767b306d4be7311983c65b731fbc54a5c8a7b 100644
--- a/SDK/CPP/public/voltu.cpp
+++ b/SDK/CPP/public/voltu.cpp
@@ -25,14 +25,15 @@
 #include <cstdlib>
 #include <iostream>
 
+typedef void* Library;
+
 static bool g_init = false;
+static Library handle = nullptr;
 
 #ifdef WITH_OPENCV
 voltu::GpuUtilities voltu::gpu;
 #endif
 
-typedef void* Library;
-
 static Library loadLibrary(const char *file)
 {
 #if defined(WIN32)
@@ -116,7 +117,7 @@ std::shared_ptr<voltu::System> voltu::instance()
 	
 	std::string name = locateLibrary();
 	std::cout << "Loading VolTu Runtime: " << name << std::endl;
-	Library handle = loadLibrary(name.c_str());
+	handle = loadLibrary(name.c_str());
 
 	if (handle)
 	{
@@ -166,3 +167,9 @@ std::shared_ptr<voltu::System> voltu::instance()
 
 	return nullptr;
 }
+
+void voltu::release()
+{
+	// TODO: Call a finalise function
+	if (handle) unloadLibrary(handle);
+}