diff --git a/binding-cpp/runtime/CMakeLists.txt b/binding-cpp/runtime/CMakeLists.txt
index 0a94792..02dc989 100644
--- a/binding-cpp/runtime/CMakeLists.txt
+++ b/binding-cpp/runtime/CMakeLists.txt
@@ -41,12 +41,12 @@
 #VLD
 SET(VLD ${ETCH_EXTERNAL_DEPENDS}/vld/1.9h)
 
-# GTest
-SET(GTEST ${ETCH_EXTERNAL_DEPENDS}/gtest/1.6.0)
-
 # GMock
 SET(GMOCK ${ETCH_EXTERNAL_DEPENDS}/gmock/1.6.0)
 
+# GTest
+SET(GTEST ${GMOCK}/gtest)
+
 #Build external CAPU project (OS Abstraction)
 set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR})
 find_package(Capu)
diff --git a/binding-cpp/runtime/include/support/EtchRuntime.h b/binding-cpp/runtime/include/support/EtchRuntime.h
index f8ca116..96a1537 100644
--- a/binding-cpp/runtime/include/support/EtchRuntime.h
+++ b/binding-cpp/runtime/include/support/EtchRuntime.h
@@ -43,10 +43,18 @@
 
   /**
    * Create a new instance of the EtchRuntime class
+   * It uses the default Console Log Appender for logging.
    */
   EtchRuntime();
 
   /**
+   * Create a new instance of the EtchRuntime class
+   * @param logAppender the log appender
+   * @param logLevel the log level
+   */
+  EtchRuntime(IEtchLogAppender& logAppender, EtchLogLevel logLevel);
+
+  /**
    * Destructor
    */
   virtual ~EtchRuntime();
@@ -94,12 +102,18 @@
 private:
   capu::bool_t mIsClosed;
   EtchLogger mLogger;
-  EtchConsoleLogAppender mLogAppender;
+  EtchConsoleLogAppender mDefaultLogAppender;
   static capu::uint64_t sId;
   capu::uint64_t mId;
   capu::Mutex mMutex;
   capu::List<EtchRuntimeListener*> mListeners;
 
+
+  /**
+   * Assigns an unique id to the runtime
+   */
+  void generateRuntimeId();
+
   /**
    * Return the next id
    */
diff --git a/binding-cpp/runtime/include/util/EtchLogger.h b/binding-cpp/runtime/include/util/EtchLogger.h
index df528e4..fe78251 100644
--- a/binding-cpp/runtime/include/util/EtchLogger.h
+++ b/binding-cpp/runtime/include/util/EtchLogger.h
@@ -25,6 +25,7 @@
 #include "capu/util/ILogAppender.h"
 
 typedef capu::ILogAppender IEtchLogAppender;
+typedef capu::ELogLevel EtchLogLevel;
 typedef capu::ConsoleLogAppender EtchConsoleLogAppender;
 typedef capu::LogContext EtchLogContext;
 
@@ -82,14 +83,14 @@
     return mRuntimeContext;
   }
 private:
-  EtchLogContext mSerializerContext;
-  EtchLogContext mDeliveryServiceContext;
-  EtchLogContext mTransportContext;
-  EtchLogContext mPacketizerContext;
-  EtchLogContext mMessagizerContext;
-  EtchLogContext mValidatorContext;
-  EtchLogContext mMailboxContext;
-  EtchLogContext mRuntimeContext;
+  EtchLogContext& mSerializerContext;
+  EtchLogContext& mDeliveryServiceContext;
+  EtchLogContext& mTransportContext;
+  EtchLogContext& mPacketizerContext;
+  EtchLogContext& mMessagizerContext;
+  EtchLogContext& mValidatorContext;
+  EtchLogContext& mMailboxContext;
+  EtchLogContext& mRuntimeContext;
 
 };
 
diff --git a/binding-cpp/runtime/src/main/support/EtchRuntime.cpp b/binding-cpp/runtime/src/main/support/EtchRuntime.cpp
index 95f619c..d75a0fe 100644
--- a/binding-cpp/runtime/src/main/support/EtchRuntime.cpp
+++ b/binding-cpp/runtime/src/main/support/EtchRuntime.cpp
@@ -23,13 +23,24 @@
 
 EtchRuntime::EtchRuntime()
   :   mIsClosed(false)
-    , mLogger(mLogAppender)
+    , mLogger(mDefaultLogAppender)
 {
-  mMutex.lock();
-  mId = getNextId();
-  mMutex.unlock();
+  //Default log level is WARN
+  mLogger.setLogLevel(capu::LL_WARN);
 
-  mLogger.setLogLevel(capu::LL_ALL);
+  //assign a unique id to this runtime
+  generateRuntimeId();
+}
+
+EtchRuntime::EtchRuntime(IEtchLogAppender& logAppender, EtchLogLevel logLevel)
+  :   mIsClosed(false)
+    , mLogger(logAppender)
+{
+  //Default log level is WARN
+  mLogger.setLogLevel(logLevel);
+
+  //assign a unique id to this runtime
+  generateRuntimeId();
 }
 
 EtchRuntime::~EtchRuntime() {
@@ -94,6 +105,12 @@
   return ETCH_OK;
 }
 
+void EtchRuntime::generateRuntimeId() {
+  mMutex.lock();
+  mId = getNextId();
+  mMutex.unlock();
+}
+
 capu::uint64_t EtchRuntime::getNextId() {
   static capu::uint64_t sId = 0;
   return sId++;
diff --git a/binding-cpp/runtime/src/test/support/EtchRuntimeTest.cpp b/binding-cpp/runtime/src/test/support/EtchRuntimeTest.cpp
index d4fb730..f37abf9 100644
--- a/binding-cpp/runtime/src/test/support/EtchRuntimeTest.cpp
+++ b/binding-cpp/runtime/src/test/support/EtchRuntimeTest.cpp
@@ -18,6 +18,12 @@
 #include "gtest/gtest.h"
 #include "gmock/gmock.h"
 #include "support/EtchRuntime.h"
+#include "capu/util/LogMessage.h"
+
+class MockLogAppender : public IEtchLogAppender {
+public:
+  MOCK_METHOD1(log, void(const capu::LogMessage& message));
+};
 
 capu::uint64_t currentIdCount;
 
@@ -27,13 +33,30 @@
   delete runtime;
 }
 
-TEST(EtchRuntime, getId) {
-  EtchRuntime* runtime = new EtchRuntime(); //ID = 1
-  EXPECT_EQ(currentIdCount + 1, runtime->getId());
+TEST(EtchRuntime, Logging) {
+  MockLogAppender* logAppender = new MockLogAppender();
+
+  EtchRuntime* runtime = new EtchRuntime(*logAppender, capu::LL_ALL); //ID = 2
+
+  EXPECT_CALL(*logAppender, log(::testing::_)).Times(2);
+
+  EtchLogContext testContext = runtime->getLogger().createContext("testcontext");
+  testContext.setLogLevel(capu::LL_ALL);
+
+  ETCH_LOG_DEBUG(runtime->getLogger(), testContext, "test log message for runtime " << runtime->getId());
+  ETCH_LOG_DEBUG(runtime->getLogger(), runtime->getLogger().getMessagizerContext(), "test log message for runtime " << runtime->getId());
+
   delete runtime;
-  runtime = new EtchRuntime(); //ID = 2
+  delete logAppender;
+}
+
+TEST(EtchRuntime, getId) {
+  EtchRuntime* runtime = new EtchRuntime(); //ID = 3
   EXPECT_EQ(currentIdCount + 2, runtime->getId());
   delete runtime;
+  runtime = new EtchRuntime(); //ID = 4
+  EXPECT_EQ(currentIdCount + 3, runtime->getId());
+  delete runtime;
 }
 
 TEST(EtchRuntime, isClosed) {
