diff --git a/CMakeLists.txt b/CMakeLists.txt
index 096d46310f2a724e4ac5bca2bc82a37c86ec9ecb..0096c312d27616859be17d96f377ec0aa0143f8b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -24,11 +24,21 @@ IF (NOT CMAKE_BUILD_TYPE)
  SET(CMAKE_BUILD_TYPE "DEBUG") 
 ENDIF (NOT CMAKE_BUILD_TYPE)
 
-SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall")
-SET(CMAKE_CXX_FLAGS_RELEASE "-O3")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -D_REENTRANT")
+SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -D_REENTRANT -O0 --coverage -fprofile-arcs")
+SET(CMAKE_LINK_FLAGS_DEBUG "--coverage -fprofile-arcs")
+
+#
+# Add ctest
+#
+INCLUDE(CTest)
 
 ADD_SUBDIRECTORY(src)
 
+ADD_SUBDIRECTORY(test/gtest)
+
+ADD_SUBDIRECTORY(test)
+
 FIND_PACKAGE(Doxygen)
 
 FIND_PATH(IRI_DOC_DIR doxygen.conf ${CMAKE_SOURCE_DIR}/doc/iri_doc/)
diff --git a/src/mutex/mutex.cpp b/src/mutex/mutex.cpp
index 88e7f3fbcc553bcac860a607843caf0680f721eb..f4dbee4d07306f4895b747a0d6946f7a4e4ee5d3 100644
--- a/src/mutex/mutex.cpp
+++ b/src/mutex/mutex.cpp
@@ -76,6 +76,8 @@ CMutex::~CMutex()
 {
   int error=0;
 
+  this->try_enter();
+  this->exit();
   if((error=pthread_mutex_destroy(&this->access))!=0)
   {
     /* handle exception */
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9147fd59f90adae46a607d3e2e9e3b8c32edaf9a
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,16 @@
+include_directories(${GTEST_INCLUDE_DIRS})
+include_directories(${GMOCK_INCLUDE_DIRS})
+
+include_directories(${PROJECT_SOURCE_DIR}/src/mutex)
+
+set(CTEST_CUSTOM_COVERAGE_EXCLUDE *)
+
+add_executable(mutex_tests mutex/mutex_test.cpp)
+add_dependencies(mutex_tests googletest)
+
+target_link_libraries(mutex_tests ${PROJECT_SOURCE_DIR}/lib/libiriutils.so)
+target_link_libraries(mutex_tests ${GTEST_LIBS_DIR}/libgtest.a ${GTEST_LIBS_DIR}/libgtest_main.a)
+target_link_libraries(mutex_tests ${GMOCK_LIBS_DIR}/libgmock.a ${GMOCK_LIBS_DIR}/libgmock_main.a)
+target_link_libraries(mutex_tests pthread)
+
+add_test(NAME Mutex_Test COMMAND mutex_tests)
diff --git a/test/gtest/CMakeLists.txt b/test/gtest/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3b7d7826b235fd3c362e72a871d6fd45a77d22c6
--- /dev/null
+++ b/test/gtest/CMakeLists.txt
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 2.8.8)
+project(gtest_builder C CXX)
+include(ExternalProject)
+
+ExternalProject_Add(googletest
+    GIT_REPOSITORY https://github.com/google/googletest.git
+    CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
+               -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
+               -DCMAKE_CXX_FLAGS=${MSVC_COMPILER_DEFS}
+               -Dgtest_force_shared_crt=ON
+               -DBUILD_GTEST=ON
+     PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
+# Disable install step
+    INSTALL_COMMAND ""
+)
+
+# Specify include dir
+ExternalProject_Get_Property(googletest source_dir)
+set(GTEST_INCLUDE_DIRS ${source_dir}/googletest/include PARENT_SCOPE)
+set(GMOCK_INCLUDE_DIRS  ${source_dir}/googlemock/include PARENT_SCOPE)
+
+# Specify MainTest's link libraries
+ExternalProject_Get_Property(googletest binary_dir)
+set(GTEST_LIBS_DIR ${binary_dir}/googlemock/gtest PARENT_SCOPE)
+set(GMOCK_LIBS_DIR ${binary_dir}/googlemock PARENT_SCOPE)
+
+
+
diff --git a/test/mutex/mutex_test.cpp b/test/mutex/mutex_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3398c9707fe6a4048432f69d4ad40305a0963fd1
--- /dev/null
+++ b/test/mutex/mutex_test.cpp
@@ -0,0 +1,21 @@
+// tests.cpp
+#include "mutex.h"
+#include <gtest/gtest.h>
+ 
+TEST(mutexTest, try_enterSuccess) { 
+    CMutex mutex;
+    ASSERT_TRUE(mutex.try_enter());
+    mutex.exit();
+    ASSERT_TRUE(mutex.try_enter());
+}
+ 
+TEST(mutexTest, try_enterFailure) { 
+    CMutex mutex;
+    mutex.enter();
+    ASSERT_FALSE(mutex.try_enter());
+}
+ 
+int main(int argc, char **argv) {
+    testing::InitGoogleTest(&argc, argv);
+    return RUN_ALL_TESTS();
+}