diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetQScript.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetQScript.scala
index 9dd433ab5ae8454b194390b8fb7b0dc8e94f8070..062d725bafb7050258aaf07e0a0a0444e02aafdc 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetQScript.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetQScript.scala
@@ -32,7 +32,7 @@ trait BiopetQScript extends Configurable with GatkLogging {
   val configfiles: List[File] = Nil
 
   var outputDir: String = {
-    val temp = Config.getValueFromMap(Config.global.map, ConfigValueIndex(this.configName, configPath, "output_dir"))
+    val temp = Config.getValueFromMap(globalConfig.map, ConfigValueIndex(this.configName, configPath, "output_dir"))
     if (temp.isEmpty) ""
     else {
       val t = temp.get.value.toString
@@ -71,7 +71,7 @@ trait BiopetQScript extends Configurable with GatkLogging {
       case _ =>
     }
 
-    if (new File(outputDir).canWrite) Config.global.writeReport(qSettings.runName, outputDir + ".log/" + qSettings.runName)
+    if (new File(outputDir).canWrite) globalConfig.writeReport(qSettings.runName, outputDir + ".log/" + qSettings.runName)
     else BiopetQScript.addError("Output dir: '" + outputDir + "' is not writeable")
 
     BiopetQScript.checkErrors
diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/MultiSampleQScript.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/MultiSampleQScript.scala
index eb76502c8593a9e970ea2c95b9152569dfffb389..4184f29afacc7f6afcf6dc9d0eb45f9eddfc1993 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/MultiSampleQScript.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/MultiSampleQScript.scala
@@ -28,7 +28,7 @@ trait MultiSampleQScript extends BiopetQScript {
   @Argument(doc = "Only Sample", shortName = "sample", required = false)
   private val onlySamples: List[String] = Nil
 
-  require(Config.global.map.contains("samples"), "No Samples found in config")
+  require(globalConfig.map.contains("samples"), "No Samples found in config")
 
   /**
    * Sample class with basic functions build in
@@ -80,7 +80,7 @@ trait MultiSampleQScript extends BiopetQScript {
 
     /** returns a set with library names */
     protected def libIds: Set[String] = {
-      ConfigUtils.getMapFromPath(Config.global.map, List("samples", sampleId, "libraries")).getOrElse(Map()).keySet
+      ConfigUtils.getMapFromPath(globalConfig.map, List("samples", sampleId, "libraries")).getOrElse(Map()).keySet
     }
 
     /** Adds sample jobs */
@@ -125,7 +125,7 @@ trait MultiSampleQScript extends BiopetQScript {
   val samples: Map[String, Sample] = sampleIds.map(id => id -> makeSample(id)).toMap
 
   /** Returns a list of all sampleIDs */
-  protected def sampleIds: Set[String] = ConfigUtils.any2map(Config.global.map("samples")).keySet
+  protected def sampleIds: Set[String] = ConfigUtils.any2map(globalConfig.map("samples")).keySet
 
   /** Runs addAndTrackJobs method for each sample */
   final def addSamplesJobs() {
diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala
index 0e404dd5c460e643262b43acd70766d6a91c3a7d..e25e8ef508188adbd5f767b20ca1f688c4eed922 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala
@@ -138,7 +138,6 @@ class Config(var map: Map[String, Any]) extends Logging {
       defaultCache += (requestedIndex -> ConfigValue(requestedIndex, null, default, freeVar))
       defaultCache(requestedIndex)
     } else ConfigValue(requestedIndex, null, null, freeVar)
-    //else throw new IllegalStateException("Value in config could not be found but it seems required, index: " + requestedIndex)
   }
 
   def writeReport(id: String, directory: String): Unit = {
@@ -175,7 +174,7 @@ class Config(var map: Map[String, Any]) extends Logging {
     val fullEffective = ConfigUtils.mergeMaps(effectiveFound, effectiveDefaultFound)
     val fullEffectiveWithNotFound = ConfigUtils.mergeMaps(fullEffective, notFound)
 
-    writeMapToJsonFile(Config.global.map, "input")
+    writeMapToJsonFile(this.map, "input")
     writeMapToJsonFile(found, "found")
     writeMapToJsonFile(effectiveFound, "effective.found")
     writeMapToJsonFile(effectiveDefaultFound, "effective.defaults")
diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala
index 774b15d2dd97192a1c6fc8614938bb725571099c..51997ccb8a12fb5c3a234e5e7d95c001dd704b4f 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala
@@ -21,6 +21,7 @@ import nl.lumc.sasc.biopet.utils.ConfigUtils.ImplicitConversions
 trait Configurable extends ImplicitConversions {
   /** Should be object of parant object */
   val root: Configurable
+  val globalConfig: Config = if (root != null) root.globalConfig else Config.global
 
   /** subfix to the path */
   def subPath: List[String] = Nil
@@ -98,8 +99,8 @@ trait Configurable extends ImplicitConversions {
         val value = Config.getValueFromMap(defaults.toMap, ConfigValueIndex(m, p, key, freeVar))
         if (value.isDefined) value.get.value else default
       }
-      if (d == null) Config.global(m, p, key, freeVar = freeVar)
-      else Config.global(m, p, key, d, freeVar)
+      if (d == null) globalConfig(m, p, key, freeVar = freeVar)
+      else globalConfig(m, p, key, d, freeVar)
     }
 
     /**
@@ -121,7 +122,7 @@ trait Configurable extends ImplicitConversions {
       val m = if (submodule != null) submodule else configName
       val p = path(s, l, submodule)
 
-      Config.global.contains(m, p, key, freeVar) || !(Config.getValueFromMap(defaults.toMap, ConfigValueIndex(m, p, key, freeVar)) == None)
+      globalConfig.contains(m, p, key, freeVar) || !(Config.getValueFromMap(defaults.toMap, ConfigValueIndex(m, p, key, freeVar)) == None)
     }
   }
 }
diff --git a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigurableTest.scala b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigurableTest.scala
index 55f672cc1dad99011d0fdd38bec9abd4f49c1e82..ba0429fd31e7e23880184872d2581b0e885ebc8b 100644
--- a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigurableTest.scala
+++ b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigurableTest.scala
@@ -11,10 +11,10 @@ import org.testng.annotations.Test
  */
 class ConfigurableTest extends TestNGSuite with Matchers {
   @Test def testConfigurable: Unit = {
-    Config.global.map = Map()
-    Config.global.loadConfigFile(ConfigurableTest.file)
-
-    val classC = new ClassC
+    val classC = new ClassC {
+      override def configName = "classc"
+      override val globalConfig = new Config(ConfigurableTest.map)
+    }
 
     classC.configPath shouldBe Nil
     classC.configFullPath shouldBe List("classc")
@@ -53,12 +53,12 @@ abstract class Cfg extends Configurable {
 class ClassA(val root: Configurable) extends Cfg
 
 class ClassB(val root: Configurable) extends Cfg {
-  val classA = new ClassA(this)
+  lazy val classA = new ClassA(this)
 }
 
 class ClassC(val root: Configurable) extends Cfg {
   def this() = this(null)
-  val classB = new ClassB(this)
+  lazy val classB = new ClassB(this)
 }
 
 object ConfigurableTest {
@@ -80,6 +80,4 @@ object ConfigurableTest {
       )
     )
   )
-
-  val file = ConfigUtilsTest.writeTemp(ConfigUtils.mapToJson(map).spaces2)
 }