          };
  
  ////////////////////////////////////////////////////////////////////////////////
-@@ -306,6 +318,18 @@ namespace triagens {
+@@ -241,6 +253,12 @@ namespace triagens {
+ ////////////////////////////////////////////////////////////////////////////////
+ 
+ ////////////////////////////////////////////////////////////////////////////////
++/// @brief determine which of the free contexts should be picked for the GC
++////////////////////////////////////////////////////////////////////////////////
++
++        V8Context* pickContextForGc ();
++
++////////////////////////////////////////////////////////////////////////////////
+ /// @brief prepares a V8 instance
+ ////////////////////////////////////////////////////////////////////////////////
+ 
+@@ -312,6 +330,18 @@ namespace triagens {
          uint64_t _gcInterval;
  
  ////////////////////////////////////////////////////////////////////////////////

 
     guard.broadcast();
   }
@@ -210,21 +249,40 @@ void ApplicationV8::exitContext (V8Context* context) {
 ////////////////////////////////////////////////////////////////////////////////
 
 void ApplicationV8::collectGarbage () {
+  V8GcThread* gc = dynamic_cast<V8GcThread*>(_gcThread);
+  assert(gc != 0);
+  uint64_t waitTime = (uint64_t) (_gcFrequency * 1000.0 * 1000.0);
+
   while (_stopping == 0) {
     V8Context* context = 0;

 
     if (context != 0) {
       LOGGER_TRACE << "collecting V8 garbage";
@@ -288,6 +414,7 @@ void ApplicationV8::collectGarbage () {
       delete context->_locker;
 
       context->_dirt = 0;
