diff --git a/.Rprofile b/.Rprofile
index e2ebaa48ea0d1751a0a22a8ccca1e466a2375c81..a8fc8ab9864a29b5dd2764c3d34a6bb39d63edb9 100644
--- a/.Rprofile
+++ b/.Rprofile
@@ -2,6 +2,26 @@
 # DO NOT EDIT THIS LINE!
 if(file.exists("~/.Rprofile")) source("~/.Rprofile")
 
+# Check if the library folder is currently being updated and if so use lattest snapshot.
+if (any(grepl("^00LOCK.*", system(paste0("ls ", .libPaths()[1]), intern = TRUE)))) {
+    lock_folders <- grep("^00LOCK.*", system(paste0("ls ", .libPaths()[1]), intern = TRUE), value=TRUE)
+    bad_pacakges <- gsub("^00LOCK-","", lock_folders)
+
+    snapshot_folder <- "/p/projects/rd3mod/R/libraries/snapshots/"
+    snapshot_dates <- system(paste0("ls ", snapshot_folder), intern = TRUE)
+    lattest_snapshot <- paste0(snapshot_folder, snapshot_dates[length(snapshot_dates)])
+
+    # Give user diagnosis
+    cat("\nThe following lock folders were found at", .libPaths()[1],":\n\t", lock_folders,"\n")
+    cat("That means that the ",bad_pacakges,"package(s) is(are) currently being updated.\n") 
+    cat("Packages will be loaded from the library's lattest snapshot instead:\n",lattest_snapshot,"\n")
+    cat("(If the lock folder isn't deleted automatically in the next couple of minutes, that means the package failed to update/install and that the folder has to be removed manually!)\n")
+    
+    if(file.exists(lattest_snapshot)) {
+        .libPaths(lattest_snapshot)
+    }
+}
+
 
 # This profile can be used to link the model to a specified library snapshot
 # (e.g. if your model version is from an older date and does not work with the
@@ -12,8 +32,7 @@ if(file.exists("~/.Rprofile")) source("~/.Rprofile")
 # to the model output folder. Otherwise, the run itself will again use the
 # default library set!
 
-
-# snapshot <- "/p/projects/rd3mod/R/libraries/snapshots/2019_02_26"
+# snapshot <- "/p/projects/rd3mod/R/libraries/snapshots/2020_03_10"
 # if(file.exists(snapshot)) {
 # cat("Set libPaths to",snapshot,"\n")
 # .libPaths(snapshot)
diff --git a/.zenodo.json b/.zenodo.json
new file mode 100644
index 0000000000000000000000000000000000000000..343f65fbb7def0adbeb5c8b87fdbc21d07fcf67a
--- /dev/null
+++ b/.zenodo.json
@@ -0,0 +1,161 @@
+{
+    "creators": [
+        {
+            "name": "Aboumahboub, Tino"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Auer, Cornelia"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Bauer, Nico"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Baumstark, Lavinia"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Bertram, Christoph"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Bi, Stephen"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Dietrich, Jan"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Dirnaichner, Alois",
+            "orcid": "0000-0002-3240-2608"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Giannousakis, Anastasis"
+        },
+        {
+            "name": "Haller, Markus"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Hilaire, Jerome"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Klein, David"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Koch, Johannes"
+        },
+        {
+            "name": "Körner, Alexander"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Kriegler, Elmar"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Leimbach, Marian"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Levesque, Antoine"
+        },
+        {
+            "name": "Lorenz, Alexander"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Luderer, Gunnar"
+        },
+        {
+            "name": "Ludig, Sylvie"
+        },
+        {
+            "name": "Lüken, Michael"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Malik, Aman"
+        },
+        {
+            "name": "Manger, Susanne"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Merfort, Leon"
+        },
+        {
+            "name": "Mouratiadou, Ioanna"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Pehl, Michaja"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Pietzker, Robert"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Piontek, Franziska"
+        },
+        {
+            "name": "Popin, Laura"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Rauner, Sebastian"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Rodrigues, Renato"
+        },
+        {
+            "name": "Roming, Niklas"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Rottoli, Marianna"
+        },
+        {
+            "name": "Schmidt, Eva"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Schreyer, Felix"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Schultes, Anselm"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Sörgel, Björn"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Strefler, Jessica"
+        },
+        {
+            "affiliation": "Potsdam Institute for Climate Impact Research",
+            "name": "Ueckerdt, Falko"
+        }
+    ],
+    "keywords": [
+        "energy",
+        "economy",
+        "modeling"
+    ],
+    "license": {
+        "id": "AGPL-3.0-or-later"
+    },
+    "publication_date": "2020-03-27",
+    "title": "REMIND - REgional Model of INvestments and Development",
+    "version": "2.1.0"
+}
diff --git a/CITATION.cff b/CITATION.cff
index 60fce63b18f6a584a2fb85f0cfa7dd618b33fb59..548dad6f01536b1a4e6ede5e49258f8d6a3924e2 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -2,147 +2,159 @@ cff-version: 1.0.3
 message: If you use this model, please cite it as below.
 authors:
 
-    - family-names:	Aboumahboub	    
-      given-names: 	Tino	    
-      
-    - family-names:	Auer	    
-      given-names: 	Cornelia	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Bauer	    
-      given-names: 	Nico	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Baumstark	    
-      given-names: 	Lavinia	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Bertram	    
-      given-names: 	Christoph	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Dietrich	    
-      given-names: 	Jan	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Dirnaichner	    
-      given-names: 	Alois
-      orcid: https://orcid.org/0000-0002-3240-2608
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Giannousakis	    
-      given-names: 	Anastasis	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Haller	    
-      given-names: 	Markus	    
-      
-    - family-names:	Hilaire	    
-      given-names: 	Jerome	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Klein	    
-      given-names: 	David	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Körner	    
-      given-names: 	Alexander	    
-      
-    - family-names:	Kriegler	    
-      given-names: 	Elmar	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Leimbach	    
-      given-names: 	Marian	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Levesque	    
-      given-names: 	Antoine	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Lorenz	    
-      given-names: 	Alexander	    
-      
-    - family-names:	Luderer	    
-      given-names: 	Gunnar	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Ludig	    
-      given-names: 	Sylvie	    
-      
-    - family-names:	Lüken	    
-      given-names: 	Michael	    
-      
-    - family-names:	Malik	    
-      given-names: 	Aman	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Manger	    
-      given-names: 	Susanne	    
-      
-    - family-names:	Mouratiadou	    
-      given-names: 	Ioanna	    
-      
-    - family-names:	Pehl	    
-      given-names: 	Michaja	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Pietzker	    
-      given-names: 	Robert	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Piontek	    
-      given-names: 	Franziska	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Popin	    
-      given-names: 	Laura	    
-      
-    - family-names:	Rauner	    
-      given-names: 	Sebastian	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Rodrigues	    
-      given-names: 	Renato	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Roming	    
-      given-names: 	Niklas	    
-      
-    - family-names:	Rottoli	    
-      given-names: 	Marianna	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Schmidt	    
-      given-names: 	Eva	    
-      
-    - family-names:	Schreyer	    
-      given-names: 	Felix	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Schultes	    
-      given-names: 	Anselm	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Sörgel	    
-      given-names: 	Björn	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Strefler	    
-      given-names: 	Jessica	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
-      
-    - family-names:	Ueckerdt	    
-      given-names: 	Falko	    
-      affiliation: "Potsdam Institute for Climate Impact Research"
+- family-names: Aboumahboub
+  given-names:  Tino
+
+- family-names: Auer
+  given-names:  Cornelia
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Bauer
+  given-names:  Nico
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Baumstark
+  given-names:  Lavinia
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Bertram
+  given-names:  Christoph
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Bi
+  given-names:  Stephen
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Dietrich
+  given-names:  Jan
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Dirnaichner
+  given-names:  Alois
+  orcid: https://orcid.org/0000-0002-3240-2608
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Giannousakis
+  given-names:  Anastasis
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Haller
+  given-names:  Markus
+
+- family-names: Hilaire
+  given-names:  Jerome
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Klein
+  given-names:  David
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Koch
+  given-names:  Johannes
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Körner
+  given-names:  Alexander
+
+- family-names: Kriegler
+  given-names:  Elmar
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Leimbach
+  given-names:  Marian
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Levesque
+  given-names:  Antoine
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Lorenz
+  given-names:  Alexander
+
+- family-names: Luderer
+  given-names:  Gunnar
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Ludig
+  given-names:  Sylvie
+
+- family-names: Lüken
+  given-names:  Michael
+
+- family-names: Malik
+  given-names:  Aman
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Manger
+  given-names:  Susanne
+
+- family-names: Merfort
+  given-names:  Leon
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Mouratiadou
+  given-names:  Ioanna
+
+- family-names: Pehl
+  given-names:  Michaja
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Pietzker
+  given-names:  Robert
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Piontek
+  given-names:  Franziska
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Popin
+  given-names:  Laura
+
+- family-names: Rauner
+  given-names:  Sebastian
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Rodrigues
+  given-names:  Renato
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Roming
+  given-names:  Niklas
+
+- family-names: Rottoli
+  given-names:  Marianna
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Schmidt
+  given-names:  Eva
+
+- family-names: Schreyer
+  given-names:  Felix
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Schultes
+  given-names:  Anselm
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Sörgel
+  given-names:  Björn
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Strefler
+  given-names:  Jessica
+  affiliation: "Potsdam Institute for Climate Impact Research"
+
+- family-names: Ueckerdt
+  given-names:  Falko
+  affiliation: "Potsdam Institute for Climate Impact Research"
 
 
 title: REMIND - REgional Model of INvestments and Development
-version: 4.0
-date-released: 2019-05-02
+version: "2.1.0"
+date-released: 2020-03-27
 repository-code: https://github.com/remindmodel/remind
 keywords:
-  - energy 
+  - energy
   - economy
   - modeling
 license: AGPL-3.0-or-later
diff --git a/README.md b/README.md
index 44ebcc8c0148d6f6f40ea3779bb41c3a605b1e4e..d36733e0718f387ea970b00aae168d9fd8097089 100644
--- a/README.md
+++ b/README.md
@@ -13,8 +13,7 @@ The macro-economic core of REMIND is a Ramsey-type optimal growth model
 in which intertemporal global welfare is optimized subject to equilibrium constraints.
 
 ## DOCUMENTATION
-The model documentation for version 2.1 can be found at XXX.
-
+<!-- The model documentation for version 2.1 can be found at XXX.-->
 A most recent version of the documentation can also be extracted from the
 model source code via the R package goxygen
 (https://github.com/pik-piam/goxygen). To extract the documentation, install the
@@ -27,8 +26,14 @@ Please pay attention to the REMIND Coding Etiquette when you modify the code
 The Coding Etiquette is found in the documentation section of the file main.gms.
 It explains also the used name conventions and other structural characteristics.
 
+## TUTORIALS
+
+Tutorials can be found in the form of markdown files in the repository:
+
+https://github.com/remindmodel/remind/tree/develop/tutorials
+
 ## COPYRIGHT
-Copyright 2006-2019 Potsdam Institute for Climate Impact Research (PIK)
+Copyright 2006-2020 Potsdam Institute for Climate Impact Research (PIK)
 
 ## LICENSE
 This program is free software: you can redistribute it and/or modify
@@ -178,6 +183,8 @@ Please contact remind@pik-potsdam.de
 See file CITATION.cff or the documentation of the model for information how
 to cite the model.
 
+[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3730919.svg)](https://doi.org/10.5281/zenodo.3730919)
+
 ## AUTHORS
 See list of authors in CITATION.cff
 
diff --git a/config/default.cfg b/config/default.cfg
index cc6584c8234b68dbf4b198406cbde6a5ce5c6349..bc2e377e7b5b501b553307750a1a9ea2d3c6bc22 100755
--- a/config/default.cfg
+++ b/config/default.cfg
@@ -22,7 +22,7 @@ cfg$title <- "default"
 cfg$regionmapping <- "config/regionmappingH12.csv"
 
 #### Current input data revision (<mainrevision>.<subrevision>) ####
-cfg$revision <- 5.939
+cfg$revision <- 5.941
 
 #### Force the model to download new input data ####
 cfg$force_download <- FALSE
diff --git a/config/input.gdx b/config/input.gdx
index 93c41b8f9af51dd42bfe1ba1f4dfe29f69dad341..1e6b8363841ab2882e472d2d0b3b2e67c1c5bcdb 100644
Binary files a/config/input.gdx and b/config/input.gdx differ
diff --git a/config/input_Aus.gdx b/config/input_Aus.gdx
deleted file mode 100644
index d9e68dfea0fc0d8a3363c30322501868ba625259..0000000000000000000000000000000000000000
Binary files a/config/input_Aus.gdx and /dev/null differ
diff --git a/config/input_budgetTarget.gdx b/config/input_budgetTarget.gdx
deleted file mode 100644
index 0adcf6ba09b38d7a5e36d6284f920f5f8db67d5b..0000000000000000000000000000000000000000
Binary files a/config/input_budgetTarget.gdx and /dev/null differ
diff --git a/config/input_yearTarget.gdx b/config/input_yearTarget.gdx
deleted file mode 100644
index be5d1793d729379d6e43cfe04f744851e6fb4da9..0000000000000000000000000000000000000000
Binary files a/config/input_yearTarget.gdx and /dev/null differ
diff --git a/config/multi_comparison_matrix.csv b/config/multi_comparison_matrix.csv
index a616ea10dda5d8351de61fe29a1109d827ded0cd..659e63ec72784d149af774e3b48872a0a750c309 100644
--- a/config/multi_comparison_matrix.csv
+++ b/config/multi_comparison_matrix.csv
@@ -1,21 +1,21 @@
-policy; scenario; short; coupled
-NDC; SSP5|SSP2|SSP1|SDP;;
-NDC; SSP5|SSP2|SSP1|SDP; T;
-Base; SSP5|SSP2|SSP1|SDP;;
-Base; SSP5|SSP2|SSP1|SDP; T;
-PkBudg900; SSP5|SSP2|SSP1|SDP;;
-PkBudg900; SSP5|SSP2|SSP1|SDP; T;
-PkBudg1100; SSP5|SSP2|SSP1|SDP;;
-PkBudg1100; SSP5|SSP2|SSP1|SDP; T;
-PkBudg1300; SSP5|SSP2|SSP1;;
-PkBudg1300;SSP5|SSP2|SSP1; T;
-Budg600; SSP2|SDP;;
-NDC|PkBudg900|PkBudg1300; SSP2;;
-NDC|PkBudg900|PkBudg1300; SSP1;;
-NDC|PkBudg900|PkBudg1300; SSP5;;
-NDC|PkBudg900|PkBudg1300; SDP;;
-NDC|Budg600|Budg1300; SSP2;;
-NDC|Budg600|Budg1300; SDP;;
-PkBudg1300|PkBudg1100|PkBudg1000|PkBudg950;SDP;;
-Budg1300|Budg600|PkBudg1300|PkBudg900;SSP2;;
-Budg1300|Budg600|PkBudg1300|PkBudg900;SDP;;
+policy;scenario;short;coupled
+Base;SSP5|SSP2|SSP1|SDP;;T
+Base;SSP5|SSP2|SSP1|SDP;T;T
+NDC;SSP5|SSP2|SSP1|SDP;;T
+NDC;SSP5|SSP2|SSP1|SDP;T;T
+NPi;SSP5|SSP2|SSP1|SDP;;T
+NPi;SSP5|SSP2|SSP1|SDP;T;T
+PkBudg900;SSP5|SSP2|SSP1|SDP;;T
+PkBudg900;SSP5|SSP2|SSP1|SDP;T;T
+PkBudg1100;SSP5|SSP2|SSP1|SDP;;T
+PkBudg1100;SSP5|SSP2|SSP1|SDP;T;T
+PkBudg1300;SSP5|SSP2|SSP1|SDP;;T
+PkBudg1300;SSP5|SSP2|SSP1|SDP;T;T
+NDC|NPi|PkBudg900|PkBudg1100|PkBudg1300;SSP1;;T
+NDC|NPi|PkBudg900|PkBudg1100|PkBudg1300;SSP2;;T
+NDC|NPi|PkBudg900|PkBudg1100|PkBudg1300;SSP5;;T
+NDC|NPi|PkBudg900|PkBudg1000|PkBudg1100|PkBudg1300;SDP;;T
+NDC|NPi|PkBudg900|PkBudg1100|PkBudg1300;SSP1;T;T
+NDC|NPi|PkBudg900|PkBudg1100|PkBudg1300;SSP2;T;T
+NDC|NPi|PkBudg900|PkBudg1100|PkBudg1300;SSP5;T;T
+NDC|NPi|PkBudg900|PkBudg1000|PkBudg1100|PkBudg1300;SDP;T;T
diff --git a/config/scenario_config_SSPSDP.csv b/config/scenario_config_SSPSDP.csv
index 92159777de62b614fdfc48ca765843578561dc26..09f25744f9bfb3c7993b872130255531dd340c15 100644
--- a/config/scenario_config_SSPSDP.csv
+++ b/config/scenario_config_SSPSDP.csv
@@ -2,14 +2,14 @@ title;start;CES_parameters;cm_bioenergy_tax;cm_rcp_scen;cm_iterative_target_adj;
 SSP1-calibrate;0;calibrate;1.75;none;0;1;1;0;none;-1;2100;3;2050;1;0.09;2;1.025;0;2;1;none;pop_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;2;4;2;off;SSP1;1;1;forcing_SSP1;SSP1;2005;./config/input.gdx;;
 SSP1-Base;1;load;1.75;none;0;1;1;0;none;-1;2100;3;2050;1;0.09;2;1.025;0;2;1;none;pop_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;2;4;2;off;SSP1;1;1;forcing_SSP1;SSP1;2005;./config/input.gdx;;
 SSP1-NDC;1;load;1.75;rcp45;3;1;1;0;NDC2018;1;2100;3;2050;9;0.09;2;1.025;0;2;1;NDC2018;pop_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;2;4;3;off;SSP1;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SSP1-Base
-SSP1-NPi;0;load;1.75;rcp45;3;1;1;0;NPi2018;1;2100;3;2050;9;0.09;2;1.025;0;2;1;NPi2018;pop_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;2;4;3;off;SSP1;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SSP1-Base
+SSP1-NPi;1;load;1.75;rcp45;3;1;1;0;NPi2018;1;2100;3;2050;9;0.09;2;1.025;0;2;1;NPi2018;pop_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;2;4;3;off;SSP1;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SSP1-Base
 SSP1-PkBudg900;1;load;1.75;rcp20;9;1;1;900;diffCurvPhaseIn2Lin;60;2045;3;2050;9;0.09;2;1.025;0;2;1;NDC2018;pop_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;2;4;2;on;SSP1;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SSP1-Base
 SSP1-PkBudg1100;1;load;1.75;rcp26;9;1;1;1100;diffCurvPhaseIn2Lin;100;2080;3;2050;9;0.09;2;1.025;0;2;1;NDC2018;pop_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;2;4;2;on;SSP1;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SSP1-Base
 SSP1-PkBudg1300;1;load;1.75;rcp26;9;1;1;1300;diffCurvPhaseIn2Lin;60;2100;3;2050;9;0.09;2;1.025;0;2;1;NDC2018;pop_SSP1;gdp_SSP1;lowOil;lowGas;lowCoal;2;2;4;2;on;SSP1;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SSP1-Base
 SDP-calibrate;0;calibrate;1.75;none;0;1;1;0;none;-1;2100;3;2050;1;0.12;2;1.025;4;5;1;none;pop_SDP;gdp_SDP;lowOil;lowGas;lowCoal;2;2;4;2;off;SDP;1;1;forcing_SSP1;SSP1;2005;./config/input.gdx;;
 SDP-Base;1;load;1.75;none;0;1;1;0;none;-1;2100;3;2050;1;0.12;2;1.025;4;5;1;none;pop_SDP;gdp_SDP;lowOil;lowGas;lowCoal;2;2;4;2;off;SDP;1;1;forcing_SSP1;SSP1;2005;./config/input.gdx;;
 SDP-NDC;1;load;1.75;rcp45;3;1;1;0;NDC2018;1;2100;3;2050;9;0.12;2;1.025;4;5;1;NDC2018plus;pop_SDP;gdp_SDP;lowOil;lowGas;lowCoal;2;2;4;3;off;SDP;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SDP-Base
-SDP-NPi;0;load;1.75;rcp45;3;1;1;0;NPi2018;1;2100;3;2050;9;0.12;2;1.025;4;5;1;NPi2018;pop_SDP;gdp_SDP;lowOil;lowGas;lowCoal;2;2;4;3;off;SDP;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SDP-Base
+SDP-NPi;1;load;1.75;rcp45;3;1;1;0;NPi2018;1;2100;3;2050;9;0.12;2;1.025;4;5;1;NPi2018;pop_SDP;gdp_SDP;lowOil;lowGas;lowCoal;2;2;4;3;off;SDP;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SDP-Base
 SDP-PkBudg900;1;load;1.75;rcp20;9;1;1;900;diffCurvPhaseIn2Lin;200;2045;3;2050;9;0.12;2;1.025;4;5;1;NDC2018plus;pop_SDP;gdp_SDP;lowOil;lowGas;lowCoal;2;2;4;2;on;SDP;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SDP-Base
 SDP-PkBudg1000;1;load;1.75;rcp20;9;1;1;1000;diffCurvPhaseIn2Lin;150;2045;3;2050;9;0.12;2;1.025;4;5;1;NDC2018plus;pop_SDP;gdp_SDP;lowOil;lowGas;lowCoal;2;2;4;2;on;SDP;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SDP-Base
 SDP-PkBudg1100;1;load;1.75;rcp26;9;1;1;1100;diffCurvPhaseIn2Lin;100;2080;3;2050;9;0.12;2;1.025;4;5;1;NDC2018plus;pop_SDP;gdp_SDP;lowOil;lowGas;lowCoal;2;2;4;2;on;SDP;1;1;forcing_SSP1;SSP1;2025;./config/input.gdx;SSP2-NDC;SDP-Base
@@ -17,14 +17,14 @@ SDP-PkBudg1300;1;load;1.75;rcp26;9;1;1;1300;diffCurvPhaseIn2Lin;60;2100;3;2050;9
 SSP2-calibrate;0;calibrate;1.5;none;0;1;1;0;none;-1;2100;3;2050;1;0.09;3;1.05;0;1;1;none;pop_SSP2;gdp_SSP2;medOil;medGas;medCoal;1;2;1;2;off;SSP2;2;0;forcing_SSP2;SSP2;2005;./config/input.gdx;;
 SSP2-Base;1;load;1.5;none;0;1;1;0;none;-1;2100;3;2050;1;0.09;3;1.05;0;1;1;none;pop_SSP2;gdp_SSP2;medOil;medGas;medCoal;1;2;1;2;off;SSP2;2;0;forcing_SSP2;SSP2;2005;./config/input.gdx;;
 SSP2-NDC;1;load;1.5;rcp45;3;1;1;0;NDC2018;1;2100;3;2050;9;0.09;3;1.05;0;1;1;NDC2018;pop_SSP2;gdp_SSP2;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;2015;./config/input.gdx;SSP2-Base;SSP2-Base
-SSP2-NPi;0;load;1.5;rcp45;3;1;1;0;NPi2018;1;2100;3;2050;9;0.09;3;1.05;0;1;1;NPi2018;pop_SSP2;gdp_SSP2;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;2025;./config/input.gdx;SSP2-NDC;SSP2-Base
+SSP2-NPi;1;load;1.5;rcp45;3;1;1;0;NPi2018;1;2100;3;2050;9;0.09;3;1.05;0;1;1;NPi2018;pop_SSP2;gdp_SSP2;medOil;medGas;medCoal;1;2;1;3;off;SSP2;2;0;forcing_SSP2;SSP2;2025;./config/input.gdx;SSP2-NDC;SSP2-Base
 SSP2-PkBudg900;1;load;1.5;rcp20;9;1;1;900;diffCurvPhaseIn2Lin;200;2045;3;2050;9;0.09;3;1.05;0;1;1;NDC2018;pop_SSP2;gdp_SSP2;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;2025;./config/input.gdx;SSP2-NDC;SSP2-Base
 SSP2-PkBudg1100;1;load;1.5;rcp26;9;1;1;1100;diffCurvPhaseIn2Lin;100;2080;3;2050;9;0.09;3;1.05;0;1;1;NDC2018;pop_SSP2;gdp_SSP2;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;2025;./config/input.gdx;SSP2-NDC;SSP2-Base
 SSP2-PkBudg1300;1;load;1.5;rcp26;9;1;1;1300;diffCurvPhaseIn2Lin;60;2100;3;2050;9;0.09;3;1.05;0;1;1;NDC2018;pop_SSP2;gdp_SSP2;medOil;medGas;medCoal;1;2;1;2;on;SSP2;2;0;forcing_SSP2;SSP2;2025;./config/input.gdx;SSP2-NDC;SSP2-Base
 SSP5-calibrate;0;calibrate;1.75;none;0;1;1;0;none;-1;2100;3;2050;1;0.09;1;1.05;0;3;2;none;pop_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;2;off;SSP5;1;1;forcing_SSP5;SSP5;2005;./config/input.gdx;;
 SSP5-Base;1;load;1.75;none;0;1;1;0;none;-1;2100;3;2050;1;0.09;1;1.05;0;3;2;none;pop_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;2;off;SSP5;1;1;forcing_SSP5;SSP5;2005;./config/input.gdx;;
 SSP5-NDC;1;load;1.75;rcp45;3;1;1;0;NDC2018;1;2100;3;2050;9;0.09;1;1.05;0;3;2;NDC2018;pop_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;3;off;SSP5;1;1;forcing_SSP5;SSP5;2025;./config/input.gdx;SSP2-NDC;SSP5-Base
-SSP5-NPi;0;load;1.75;rcp45;3;1;1;0;NPi2018;1;2100;3;2050;9;0.09;1;1.05;0;3;2;NPi2018;pop_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;3;off;SSP5;1;1;forcing_SSP5;SSP5;2025;./config/input.gdx;SSP2-NDC;SSP5-Base
+SSP5-NPi;1;load;1.75;rcp45;3;1;1;0;NPi2018;1;2100;3;2050;9;0.09;1;1.05;0;3;2;NPi2018;pop_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;3;off;SSP5;1;1;forcing_SSP5;SSP5;2025;./config/input.gdx;SSP2-NDC;SSP5-Base
 SSP5-PkBudg900;1;load;1.75;rcp20;9;1;1;900;diffCurvPhaseIn2Lin;300;2045;3;2050;9;0.09;1;1.05;0;3;2;NDC2018;pop_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;2;on;SSP5;1;1;forcing_SSP5;SSP5;2025;./config/input.gdx;SSP2-NDC;SSP5-Base
 SSP5-PkBudg1100;1;load;1.75;rcp26;9;1;1;1100;diffCurvPhaseIn2Lin;150;2080;3;2050;9;0.09;1;1.05;0;3;2;NDC2018;pop_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;2;on;SSP5;1;1;forcing_SSP5;SSP5;2025;./config/input.gdx;SSP2-NDC;SSP5-Base
 SSP5-PkBudg1300;1;load;1.75;rcp26;9;1;1;1300;diffCurvPhaseIn2Lin;80;2100;3;2050;9;0.09;1;1.05;0;3;2;NDC2018;pop_SSP5;gdp_SSP5;highOil;highGas;highCoal;3;6;4;2;on;SSP5;1;1;forcing_SSP5;SSP5;2025;./config/input.gdx;SSP2-NDC;SSP5-Base
diff --git a/core/bounds.gms b/core/bounds.gms
index b84c883e8065a23ce1b98317c9dc5416bef89c86..c69a62c1ef52d57b8dd845641fa0aeed5555c323 100755
--- a/core/bounds.gms
+++ b/core/bounds.gms
@@ -287,12 +287,12 @@ loop(te$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind")),
   vm_cap.lo("2015",regi,te,"1") = 0.95 * p_histCap("2015",regi,te)$(p_histCap("2015",regi,te) gt 1e-10);
   vm_cap.up("2015",regi,te,"1") = 1.05 * p_histCap("2015",regi,te)$(p_histCap("2015",regi,te) gt 1e-10);
 *additional bound on 2020 expansion: at least yearly as much as in 2016,2017 average
-  vm_deltaCap.lo("2020",regi,te,"1") = (p_histCap("2017",regi,te)-p_histCap("2015",regi,te))/2;
+  vm_deltaCap.lo("2020",regi,te,"1") = (p_histCap("2018",regi,te)-p_histCap("2015",regi,te))/3;
 );
 vm_cap.up("2015",regi,"csp",'1') = 1e-5 + 1.05 * vm_cap.lo("2015",regi,"csp","1"); !! allow offset of 10MW even for countries with no CSP installations to help the solver
 
-*RR* set lower bounds to spv installed capacity in 2020 to reflect the massive deployment in recent years to 2017 historical values plus a conservative estimation of expected additional deployment until 2020 (+10% per year).
-vm_cap.lo("2020",regi,"spv","1")$(p_histCap("2017",regi,"spv")) = p_histCap("2017",regi,"spv")*(1+0.1)**3;
+*RR* set lower bounds to spv installed capacity in 2020 to reflect the massive deployment in recent years to 2018 historical values plus a conservative estimation of expected additional deployment until 2020 (+10% per year).
+vm_cap.lo("2020",regi,"spv","1")$(p_histCap("2018",regi,"spv")) = p_histCap("2018",regi,"spv")*(1+0.1)**2;
 
 *CB* additional upper bound on 2020 deployment: doubling of historic rate plus 2 GW for solar and wind, and 500 MW for CSP
 loop(regi,
diff --git a/core/datainput.gms b/core/datainput.gms
index a46dd2bd75369275318c5dd6bf4f566d85d25867..42414615b839a3d69a876c0dfbfd03fe3307fc1b 100644
--- a/core/datainput.gms
+++ b/core/datainput.gms
@@ -753,7 +753,7 @@ loop(ttot$(ttot.val ge 2005),
   p_adj_coeff(ttot,regi,"gasftcrec")       = 0.8;
   p_adj_coeff(ttot,regi,"coalftrec")       = 0.6;
   p_adj_coeff(ttot,regi,"coalftcrec")      = 0.8;
-  p_adj_coeff(ttot,regi,"spv")             = 0.05;
+  p_adj_coeff(ttot,regi,"spv")             = 0.1;
   p_adj_coeff(ttot,regi,"wind")            = 0.1;
   p_adj_coeff(ttot,regi,"dac")             = 0.8;
   p_adj_coeff(ttot,regi,'apCarH2T')        = 1.0;
@@ -874,6 +874,10 @@ pm_data(regi,"floorcost",teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi,
 
 *** In case regionally differentiated investment costs should be used the corresponding entries are revised:
 $if %cm_techcosts% == "REG"   pm_data(regi,"inco0",teRegTechCosts) = p_inco0("2015",regi,teRegTechCosts);
+loop(teRegTechCosts$(sameas(teRegTechCosts,"spv") ),
+$if %cm_techcosts% == "REG"   pm_data(regi,"inco0",teRegTechCosts) = p_inco0("2020",regi,teRegTechCosts);
+);
+
 $if %cm_techcosts% == "REG"   pm_data(regi,"incolearn",teLearn(te)) = pm_data(regi,"inco0",te) - pm_data(regi,"floorcost",te) ;
 
 
@@ -889,12 +893,19 @@ Execute_Loadpoint 'input' p_capCum = vm_capCum.l;
 
 *** in case the technologies did not exist in the gdx, set to a non-zero value
 p_capCum(t,regi,te)$( NOT p_capCum(t,regi,te)) = sm_eps;
+display p_capCum;
+*RP overwrite p_capCum by exogenous values for 2020
+p_capCum("2020",regi,"spv")  = 0.6 / card(regi2);  !! roughly 600GW in 2020
+display p_capCum;
 
 pm_data(regi,"learnMult_woFC",teLearn(te))   = pm_data(regi,"incolearn",te)/sum(regi2,(pm_data(regi2,"ccap0",te))**(pm_data(regi,"learnExp_woFC",te)));
 *RP* adjust parameter learnMult_woFC to take floor costs into account
 $if %cm_techcosts% == "GLO"   pm_data(regi,"learnMult_wFC",teLearn(te))    = pm_data(regi,"incolearn",te)/(sum(regi2,pm_data(regi2,"ccap0",te))**pm_data(regi,"learnExp_wFC",te));
 *NB* this is the correction of the original parameter calibration
 $if %cm_techcosts% == "REG"   pm_data(regi,"learnMult_wFC",teLearn(te))    = pm_data(regi,"incolearn",te)/(sum(regi2,p_capCum("2015",regi2,te))**pm_data(regi,"learnExp_wFC",te));
+loop(teRegTechCosts$(sameas(teRegTechCosts,"spv") ),
+$if %cm_techcosts% == "REG"   pm_data(regi,"learnMult_wFC",teLearn(te))    = pm_data(regi,"incolearn",te)/(sum(regi2,p_capCum("2020",regi2,te))**pm_data(regi,"learnExp_wFC",te));
+);
 ***parameter calculation for global level, that regional values can gradually converge to
 fm_dataglob("learnMult_wFC",teLearn(te)) = fm_dataglob("incolearn",te)/(fm_dataglob("ccap0",te) **fm_dataglob("learnExp_wFC", te));
 
@@ -1035,8 +1046,9 @@ $if %carbonprice% == "NPi2018"  pm_macSwitch(emiMacMagpie) = 0;
 
 *DK* LU emissions are abated in MAgPIE in coupling mode
 *** An alternative to the approach below could be to introduce a new value for c_macswitch that only deactivates the LU MACs
-$if %cm_MAgPIE_coupling% == "on"  pm_macSwitch("co2luc") = 0;
 $if %cm_MAgPIE_coupling% == "on"  pm_macSwitch(enty)$emiMacMagpie(enty) = 0;
+*** As long as there is hardly any CO2 LUC reduction in MAgPIE we dont need MACs in REMIND
+$if %cm_MAgPIE_coupling% == "off"  pm_macSwitch("co2luc") = 0;
 
 pm_macCostSwitch(enty)=pm_macSwitch(enty);
 pm_macSwitch("co2cement_process") =0 ;
diff --git a/core/declarations.gms b/core/declarations.gms
index 6ffb720daab8ed02a7af8b89eade13bfe02405c5..29febcbcdbf63f8a615dcfc86e7c63a6fe6a92b1 100644
--- a/core/declarations.gms
+++ b/core/declarations.gms
@@ -432,6 +432,8 @@ s_macChange                                           "maximum yearly increase o
 s_tgn_2_pgc                                           "conversion factor 100-yr GWP from TgN to PgCeq"
 s_tgch4_2_pgc                                         "conversion factor 100-yr GWP from TgCH4 to PgCeq"
 
+sm_MtCH4_2_TWa                                        "Energy content of methane. MtCH4 --> TWa: 1 MtCH4 = 1.23 * 10^6 toe * 42 GJ/toe * 10^-9 EJ/GJ * 1 TWa/31.536 EJ = 0.001638 TWa (BP statistical review)"  /0.001638/
+
 sm_D2015_2_D2005                                      "Convert $2015 to $2005 by dividing by 1.2: 1/1.2 = 0.8333"      /0.8333/
 sm_DptCO2_2_TDpGtC                                    "Conversion multiplier to go from $/tCO2 to T$/GtC: 44/12/1000"     /0.00366667/ 
 
diff --git a/core/equations.gms b/core/equations.gms
index 36fb20aaaf8d4be66be469fe85d0064819b2e4b9..987f1e53d02c1f672bf4f1ff060ec1f5a0777051 100644
--- a/core/equations.gms
+++ b/core/equations.gms
@@ -120,7 +120,7 @@ q_balSe(t,regi,enty2)$( entySE(enty2) AND (NOT (sameas(enty2,"seel"))) )..
          )
 ***   add (reused gas from waste landfills) to segas to not account for CO2 
 ***   emissions - it comes from biomass
-  + ( 0.001638 
+  + ( sm_MtCH4_2_TWa
     * ( vm_macBase(t,regi,"ch4wstl")
       - vm_emiMacSector(t,regi,"ch4wstl")
       )
@@ -422,35 +422,35 @@ q_costTeCapital(t,regi,teLearn) ..
         ** fm_dataglob("learnExp_wFC",teLearn)
       )
     )$( t.val le 2005 )
-***  special treatment for 2010: start divergence of regional values by using a
-***  50/50-split global 2005 to regional 2015 in order to phase-in the observed 2015 regional 
+***  special treatment for 2010, 2015: start divergence of regional values by using a
+***  t-split of global 2005 to regional 2020 in order to phase-in the observed 2020 regional 
 ***  variation from input-data
-  + ( 0.5 * fm_dataglob("learnMult_wFC",teLearn) 
-      * ( sum(regi2, vm_capCum("2005",regi2,teLearn)) 
-        + pm_capCumForeign("2005",regi,teLearn)
+  + ( (2020 - t.val)/15 * fm_dataglob("learnMult_wFC",teLearn) 
+      * ( sum(regi2, vm_capCum(t,regi2,teLearn)) 
+        + pm_capCumForeign(t,regi,teLearn)
         )
         ** fm_dataglob("learnExp_wFC",teLearn)
   	  
-    + 0.5 * pm_data(regi,"learnMult_wFC",teLearn)
-      * ( sum(regi2, vm_capCum("2015",regi2,teLearn)) 
-        + pm_capCumForeign("2015",regi,teLearn)
+    + (t.val - 2005)/15 * pm_data(regi,"learnMult_wFC",teLearn)
+      * ( sum(regi2, vm_capCum(t,regi2,teLearn)) 
+        + pm_capCumForeign(t,regi,teLearn)
         )
   	  ** pm_data(regi,"learnExp_wFC",teLearn) 
-    )$( t.val eq 2010 )
+    )$( (t.val gt 2005) AND (t.val lt 2020) )
   
 ***  assuming linear convergence of regional learning curves to global values until 2050
-  + ( (pm_ttot_val(t) - 2015) / 35 * fm_dataglob("learnMult_wFC",teLearn) 
+  + ( (pm_ttot_val(t) - 2020) / 30 * fm_dataglob("learnMult_wFC",teLearn) 
     * ( sum(regi2, vm_capCum(t,regi2,teLearn)) 
       + pm_capCumForeign(t,regi,teLearn)
       )
       ** fm_dataglob("learnExp_wFC",teLearn)
 	  
-    + (2050 - pm_ttot_val(t)) / 35 * pm_data(regi,"learnMult_wFC",teLearn)
+    + (2050 - pm_ttot_val(t)) / 30 * pm_data(regi,"learnMult_wFC",teLearn)
     * ( sum(regi2, vm_capCum(t,regi2,teLearn)) 
       + pm_capCumForeign(t,regi,teLearn)
       )
 	  ** pm_data(regi,"learnExp_wFC",teLearn) 
-    )$( t.val ge 2015 AND t.val le 2050 )
+    )$( t.val ge 2020 AND t.val le 2050 )
 	
 *** globally harmonized costs after 2050
   + ( fm_dataglob("learnMult_wFC",teLearn) 
diff --git a/core/input/generisdata_tech.prn b/core/input/generisdata_tech.prn
index ab3f8dcbcbecb2777dea9ad0216eda1fb14763f1..8781708266fc174d9807ce1ebf894e4302c56fb8 100644
--- a/core/input/generisdata_tech.prn
+++ b/core/input/generisdata_tech.prn
@@ -70,9 +70,9 @@ inco0               3600        1200        2700        2400        5160
 constrTme            4           1           5            1           1           1          3
 mix0                
 eta                 1.00        1.00        1.00        1.00        1.00        1.00        1.00
-omf                 0.04        0.06       0.025        0.02       0.015                   0.025
+omf                 0.04        0.06       0.025        0.02       0.020                   0.025
 lifetime              30          25         130          25          30          25          30
-incolearn                                               1500        4910                    8760
+incolearn                                               2000        5060                    8760
 ccap0                                                   0.06       0.005                  0.0002
 learn                                                   0.108      0.207                   0.103
 luse                                                                0.09                   0.021
diff --git a/core/input/generisdata_tech_SSP1.prn b/core/input/generisdata_tech_SSP1.prn
index b8a137053b4f0aa7bb778c7151ac41bd686c9812..04a3d00c963181f1b5b50db0340b2980195b6cfa 100644
--- a/core/input/generisdata_tech_SSP1.prn
+++ b/core/input/generisdata_tech_SSP1.prn
@@ -70,9 +70,9 @@ inco0               3600        1200        2700        2400        5160
 constrTme            4           1           5            1           1           1          3
 mix0                
 eta                 1.00        1.00        1.00        1.00        1.00        1.00        1.00
-omf                 0.04        0.06       0.025        0.02       0.015                   0.025
+omf                 0.04        0.06       0.025        0.02       0.020                   0.025
 lifetime              30          25         130          25          30          25          30
-incolearn                                               1700        5010                    8960
+incolearn                                               2200        5110                    8960
 ccap0                                                   0.06       0.005                  0.0002
 learn                                                   0.108      0.207                   0.103
 luse                                                                0.09                   0.021
diff --git a/core/input/generisdata_tech_SSP5.prn b/core/input/generisdata_tech_SSP5.prn
index bef0dfbfd4c573cb9bb9c0287781b13ed1798c49..eed35dc9e79412994a6c5be8631189f496ae82fe 100644
--- a/core/input/generisdata_tech_SSP5.prn
+++ b/core/input/generisdata_tech_SSP5.prn
@@ -70,9 +70,9 @@ inco0               3600        1200        2700        2400        5160
 constrTme            4           1           5            1           1           1          3
 mix0                
 eta                 1.00        1.00        1.00        1.00        1.00        1.00        1.00
-omf                 0.04        0.06        0.025       0.02       0.015                   0.025
+omf                 0.04        0.06        0.025       0.02       0.020                   0.025
 lifetime              30          25         130          25          30          25          30
-incolearn                                               1300        4460                    8290
+incolearn                                               1800        4910                    8290
 ccap0                                                   0.06       0.005                  0.0002
 learn                                                   0.084       0.17                    0.08
 luse                                                                0.09                   0.021
@@ -136,12 +136,12 @@ omv                   36          76
 lifetime              40          40
 
 +                storspv    storwind     storcsp
-inco0              10800        4180        3310
+inco0              18000        7500        5400
 mix0                0.00        0.00        0.00
 eta                 0.67        0.78        0.72
 omf                 0.02        0.02        0.02
 lifetime              25          25          25
-incolearn           7490        2880        2300
+incolearn          12000        4800        3800
 ccap0            0.00005     0.00005     0.00005
 learn               0.10        0.10        0.10
 
diff --git a/core/postsolve.gms b/core/postsolve.gms
index 77de3f136beba0eb941f6c7b1bdd6926102044a0..97ce15af1d68482d680be09732349ea1ea8d5930 100644
--- a/core/postsolve.gms
+++ b/core/postsolve.gms
@@ -226,7 +226,7 @@ if(cm_iterative_target_adj eq 7,
 p_actualbudgetco2(t) =           sum(ttot$(ttot.val < t.val AND ttot.val > 2010), (sum(regi, (vm_emiTe.l(ttot,regi,"co2") + vm_emiCdr.l(ttot,regi,"co2") + vm_emiMac.l(ttot,regi,"co2"))) * sm_c_2_co2 * pm_ts(ttot)))
                               + sum(regi, (vm_emiTe.l(t,regi,"co2") + vm_emiCdr.l(t,regi,"co2") + vm_emiMac.l(t,regi,"co2")))*sm_c_2_co2 * (pm_ts(t) * 0.5 + 0.5)
                               + sum(regi, (vm_emiTe.l("2010",regi,"co2") + vm_emiCdr.l("2010",regi,"co2") + vm_emiMac.l("2010",regi,"co2")))*sm_c_2_co2 * 2;
-s_actualbudgetco2 = smax(t$(t.val le cm_peakBudgYr),p_actualbudgetco2(t));
+s_actualbudgetco2 = smax(t$(t.val le cm_peakBudgYr AND t.val le 2100),p_actualbudgetco2(t));
 							
 
   o_peakBudgYr_Itr(iteration) = cm_peakBudgYr;
diff --git a/core/presolve.gms b/core/presolve.gms
index 4629f60437462b4a5f7260a4d963197da3571245..d55cb4ace552d5412a9e3a63b1b3fe03ed09918e 100644
--- a/core/presolve.gms
+++ b/core/presolve.gms
@@ -269,9 +269,8 @@ pm_macStep(ttot,regi,enty)$(MacSector(enty))
   = min(801, ceil(p_priceCO2forMAC(ttot,regi,enty) / sm_dmac) + 1);
 
 *** If the gas price increase since 2005 is higher than the CO2 price, it will drive CH4 emission abatement.
-*** Conversion: pm_priceCO2 [$/tCeq]; T$/TWa = 1e6 M$/TWa * 0.001638 TWa/MtCH4 * 1 MtCH4/s_gwpCH4 MtCO2eq * (44/12) MtCO2eq/MtCeq
-*** conversion factor MtCH4 --> TWa: 1 MtCH4 = 1.23 * 10^6 toe * 42 GJ/toe * 10^-9 EJ/GJ * 1 TWa/31.536 EJ = 0.001638 TWa (BP statistical review)
-p_priceGas(ttot,regi)=q_balPe.m(ttot,regi,"pegas")/(qm_budget.m(ttot,regi)+sm_eps) * 1000000 * 0.001638 * (1/s_gwpCH4) * 44/12;
+*** Conversion: pm_priceCO2 [$/tCeq]; T$/TWa = 1e6 M$/TWa * sm_MtCH4_2_TWa * 1 MtCH4/s_gwpCH4 MtCO2eq * (44/12) MtCO2eq/MtCeq
+p_priceGas(ttot,regi)=q_balPe.m(ttot,regi,"pegas")/(qm_budget.m(ttot,regi)+sm_eps) * 1000000 * sm_MtCH4_2_TWa * (1/s_gwpCH4) * 44/12;
 
 pm_macStep(ttot,regi,"ch4gas")
   = min(801, ceil(max(pm_priceCO2(ttot,regi) * (25/s_gwpCH4), max(0,(p_priceGas(ttot,regi)-p_priceGas("2005",regi))) ) / sm_dmac) + 1);
@@ -403,9 +402,8 @@ pm_macCost(ttot,regi,emiMacSector(enty))
 
 *JeS* add 50% of abated CH4 from coal MACs to PEprod. CH4 from oil production is usually flared and not re-used. CH4 from gas production is mostly avoided losses from leakages.
 *** These losses are not accounted for, so neither are the avoided losses.
-*** conversion factor MtCH4 --> TWa: 1 MtCH4 = 1.23 * 10^6 toe * 42 GJ/toe * 10^-9 EJ/GJ * 1 TWa/31.536 EJ = 0.001638 (BP statistical review)
 p_macPE(ttot,regi,enty) = 0.0;
-p_macPE(ttot,regi,"pegas")$(ttot.val gt 2005) = 0.001638 * 0.5 * (vm_macBase.l(ttot,regi,"ch4coal")-vm_emiMacSector.l(ttot,regi,"ch4coal"));
+p_macPE(ttot,regi,"pegas")$(ttot.val gt 2005) = sm_MtCH4_2_TWa * 0.5 * (vm_macBase.l(ttot,regi,"ch4coal")-vm_emiMacSector.l(ttot,regi,"ch4coal"));
 
 
 ***------------ adjust adjustment costs for advanced vehicles according to CO2 price in the previous time step ----------------------
diff --git a/main.gms b/main.gms
index c9f1f342a72fba66fb57070f46f35e7bab4a2000..a3796a3ed6059f4b71a009b861a6fb5bce3fd28b 100755
--- a/main.gms
+++ b/main.gms
@@ -82,9 +82,9 @@
 * 
 * Regionscode: 690d3718e151be1b450b394c1064b1c5
 * 
-* Input data revision: 5.939
+* Input data revision: 5.94
 * 
-* Last modification (input data): Thu Mar 05 11:36:34 2020
+* Last modification (input data): Thu Mar 19 16:15:13 2020
 * 
 *###################### R SECTION END (VERSION INFO) ###########################
 
diff --git a/modules/04_PE_FE_parameters/iea2014/datainput.gms b/modules/04_PE_FE_parameters/iea2014/datainput.gms
index 93e006d1a2afd751f24d15109fa50d5f67bb6f8e..2bee361af6571d31102d4590ffe4eb091d4994ec 100644
--- a/modules/04_PE_FE_parameters/iea2014/datainput.gms
+++ b/modules/04_PE_FE_parameters/iea2014/datainput.gms
@@ -239,18 +239,6 @@ display pm_fuExtrOwnCons, p04_aux_data, pm_data;
 ***mix0sum(regi,enty2) = sum(en2en(enty,enty2,te),pm_data(regi,"mix0",te));
 ***display mix0sum;
 
-*LB* write a preliminary reporting for disgnostics
-file data_check / data_check.csv /;
-put data_check;
-put "regi;char;te;value";
-put /;
-loop((regi,char,te),
-  put regi.tl, ";" , char.tl, ";" ,te.tl, ";" ;
-  put pm_data(regi,char,te):10:3 ; 
-  put /;
-);
-putclose data_check;
-
 *LB* preliminary bug fix for all eta > 1 and all eta = 0
 loop(regi,
    loop(te,
diff --git a/modules/24_trade/standard/bounds.gms b/modules/24_trade/standard/bounds.gms
index 91f04b1313f9da1152e662de3b801282563ecd13..6aa9477702de597dce452a796aa162e86c5efa3d 100644
--- a/modules/24_trade/standard/bounds.gms
+++ b/modules/24_trade/standard/bounds.gms
@@ -92,6 +92,12 @@ vm_Xport.up("2010",regi,"peoil") = 1.05 * pm_IO_trade("2010",regi,"peoil","Xport
 vm_Xport.lo("2015",regi,"peoil") = 0.95 * pm_IO_trade("2015",regi,"peoil","Xport");
 vm_Xport.up("2015",regi,"peoil") = 1.05 * pm_IO_trade("2015",regi,"peoil","Xport");
 
+*** bounds on oil imports in 2010 and 2015
+vm_Mport.lo("2010",regi,"peoil") = 0.95 * pm_IO_trade("2010",regi,"peoil","Mport");
+vm_Mport.up("2010",regi,"peoil") = 1.05 * pm_IO_trade("2010",regi,"peoil","Mport");
+vm_Mport.lo("2015",regi,"peoil") = 0.95 * pm_IO_trade("2015",regi,"peoil","Mport");
+vm_Mport.up("2015",regi,"peoil") = 1.05 * pm_IO_trade("2015",regi,"peoil","Mport");
+
 *** bounds on gas exports in 2010 and 2015
 vm_Xport.lo("2010",regi,"pegas") = 0.95 * pm_IO_trade("2010",regi,"pegas","Xport");
 vm_Xport.up("2010",regi,"pegas") = 1.05 * pm_IO_trade("2010",regi,"pegas","Xport");
diff --git a/modules/35_transport/complex/datainput.gms b/modules/35_transport/complex/datainput.gms
index 7a4ed4d26f97dff8fbe31fc42bea1f64309f050c..073f1bc6a2f0353ad2d2cc686e25a64029d9ea17 100644
--- a/modules/35_transport/complex/datainput.gms
+++ b/modules/35_transport/complex/datainput.gms
@@ -26,7 +26,12 @@ $include "./modules/35_transport/complex/input/f35_transp_eff.cs3r"
 $offdelim
 ;
 
-p35_pass_FE_share_transp(regi)                               = f35_transp_eff(regi,"share_Pass_nonLDV");
+*** Developed regions: EU 2.6, US 3.1, CAZ 3.4
+p35_pass_FE_target_share = 0.3;
+p35_harmonizing_year = 2150;
+
+p35_pass_FE_share_transp(ttot,regi)$(ttot.val ge 2005) = (f35_transp_eff(regi, "share_Pass_nonLDV")*(p35_harmonizing_year-ttot.val)**2+p35_pass_FE_target_share*(ttot.val-2005)**2)/(p35_harmonizing_year-2005)**2;
+
 p35_pass_nonLDV_ES_efficiency(ttot,regi)$(ttot.val ge 2005)  = f35_transp_eff(regi,"Eff_Pass_nonLDV");   
 p35_passLDV_ES_efficiency(ttot,regi)$(ttot.val ge 2005)      = f35_transp_eff(regi,"Eff_Pass_LDV");
 p35_freight_ES_efficiency(ttot,regi)$(ttot.val ge 2005)      = f35_transp_eff(regi,"Eff_Freight");
@@ -34,15 +39,15 @@ p35_freight_ES_efficiency(ttot,regi)$(ttot.val ge 2005)      = f35_transp_eff(re
 
 p35_valconv = sum((regi),f35_transp_eff(regi,"Eff_Pass_nonLDV"))/ card(regi);
 
-p35_pass_nonLDV_ES_efficiency(ttot,regi)$(ttot.val ge 2005) = (p35_pass_nonLDV_ES_efficiency(ttot,regi)*(2200-ttot.val)+p35_valconv*(ttot.val-2005))/(2200-2005);
+p35_pass_nonLDV_ES_efficiency(ttot,regi)$(ttot.val ge 2005) = (p35_pass_nonLDV_ES_efficiency(ttot,regi)*(p35_harmonizing_year-ttot.val)+p35_valconv*(ttot.val-2005))/(p35_harmonizing_year-2005);
 
 p35_valconv = sum((regi),f35_transp_eff(regi,"Eff_Pass_LDV"))/ card(regi);
 
-p35_passLDV_ES_efficiency(ttot,regi)$(ttot.val ge 2005) = (p35_passLDV_ES_efficiency(ttot,regi)*(2200-ttot.val)+p35_valconv*(ttot.val-2005))/(2200-2005);
+p35_passLDV_ES_efficiency(ttot,regi)$(ttot.val ge 2005) = (p35_passLDV_ES_efficiency(ttot,regi)*(p35_harmonizing_year-ttot.val)+p35_valconv*(ttot.val-2005))/(p35_harmonizing_year-2005);
 
 p35_valconv = sum((regi),f35_transp_eff(regi,"Eff_Freight"))/ card(regi);
 
-p35_freight_ES_efficiency(ttot,regi)$(ttot.val ge 2005) = (p35_freight_ES_efficiency(ttot,regi)*(2200-ttot.val)+p35_valconv*(ttot.val-2005))/(2200-2005);
+p35_freight_ES_efficiency(ttot,regi)$(ttot.val ge 2005) = (p35_freight_ES_efficiency(ttot,regi)*(p35_harmonizing_year-ttot.val)+p35_valconv*(ttot.val-2005))/(p35_harmonizing_year-2005);
 
 
 display p35_pass_nonLDV_ES_efficiency;
diff --git a/modules/35_transport/complex/declarations.gms b/modules/35_transport/complex/declarations.gms
index 8340911eff6dd0cd276644156e6191b03c187d9d..6b00b9559771791884b664bf37d20e7c6d524f5a 100644
--- a/modules/35_transport/complex/declarations.gms
+++ b/modules/35_transport/complex/declarations.gms
@@ -16,11 +16,14 @@ q35_shUePeTbal(ttot,all_regi)                 "shares sum must be equal to 100"
 ;
 
 Parameter
-p35_pass_FE_share_transp(all_regi)            "Share of 'non-LDV passenger FE' in 'total non-LDV FE. Unit: share [0..1]"
+p35_pass_FE_share_transp(ttot,all_regi)            "Share of 'non-LDV passenger FE' in 'total non-LDV FE. Unit: share [0..1]"
 p35_pass_nonLDV_ES_efficiency(ttot,all_regi)  "Non-LDV passenger energy service per non-LDV FE. Unit: bn pkm/EJ"
 p35_passLDV_ES_efficiency(ttot,all_regi)      "LDV passenger energy service per non-LDV FE. Only correct if applied to CES-input, as BEV and H2FCV have higher efficiencies. Unit: bn pkm/EJ"
 p35_freight_ES_efficiency(ttot,all_regi)      "Freight energy service per freight FE. Unit: bn tkm/EJ"
 
+p35_pass_FE_target_share    "The target share for the harmonization of non-LDV passenger FE (p35_pass_FE_share_transp). Unit: share [0..1]"
+p35_harmonizing_year        "Year when full harmonization of shares and efficiencies would be reached."
+
 p35_share_seliq_t(ttot,all_regi)                               "share of liquids used for transport sector (fedie + fepet). Unit 0..1"
 p35_share_seh2_t(ttot,all_regi)                                "share of hydrogen used for transport sector  (feh2t). Unit 0..1"
 p35_share_seel_t(ttot,all_regi)                                "Share of electricity used for transport sector (feelt). Unit 0..1"
diff --git a/modules/37_industry/fixed_shares/postsolve.gms b/modules/37_industry/fixed_shares/postsolve.gms
index 314d19e086469f72336934b500d1e755bafb1edf..2d7a5f21726ff7857130c70f7d92324252a78da7 100644
--- a/modules/37_industry/fixed_shares/postsolve.gms
+++ b/modules/37_industry/fixed_shares/postsolve.gms
@@ -30,7 +30,7 @@ loop (enty$( sameas(enty,"co2") OR sameas(enty,"cco2") ),
               vm_prodSE.l(ttot,regi,entyPE2,entySE,te2)
             )
             !! SE CH4 from waste bypass
-          + ( 0.001638
+          + ( sm_MtCH4_2_TWa
             * ( vm_macBase.l(ttot,regi,"ch4wstl")
               - vm_emiMacSector.l(ttot,regi,"ch4wstl")
               )
diff --git a/modules/37_industry/off/not_used.txt b/modules/37_industry/off/not_used.txt
index ffee9f1da0e9c7e5a69bdc7712291b62064c610c..916bc26b0fe672f0ca750efc6d5d0ea10399f630 100644
--- a/modules/37_industry/off/not_used.txt
+++ b/modules/37_industry/off/not_used.txt
@@ -24,3 +24,4 @@ cm_startyear,input,questionnaire
 fm_dataemiglob,input,questionnaire
 pm_delta_kap,input,questionnaire
 pm_macCostSwitch,input,questionnaire
+sm_MtCH4_2_TWa,input,questionnaire
diff --git a/modules/37_industry/subsectors/not_used.txt b/modules/37_industry/subsectors/not_used.txt
index b1320a459ff89139655770c650f6b77c56eb18a2..653bb331285282f1b8a53320015b578cae78ceaf 100644
--- a/modules/37_industry/subsectors/not_used.txt
+++ b/modules/37_industry/subsectors/not_used.txt
@@ -28,3 +28,4 @@ cm_CCS_chemicals,input,questionnaire
 cm_CCS_steel,input,questionnaire
 fm_dataemiglob,input,questionnaire
 pm_macCostSwitch,input,questionnaire
+sm_MtCH4_2_TWa,input,questionnaire
diff --git a/modules/40_techpol/NPi2018/datainput.gms b/modules/40_techpol/NPi2018/datainput.gms
index 55a9b3ae55c2c9b92f5d9bb64fb93dfa1b6d038e..fd721eda1bfeead3b0529df5a81133d00659f29c 100644
--- a/modules/40_techpol/NPi2018/datainput.gms
+++ b/modules/40_techpol/NPi2018/datainput.gms
@@ -31,9 +31,9 @@ p40_noncombust_acc_eff(t,"CHN",te)$(sameas(te,"spv") OR sameas(te,"csp") OR same
 p40_noncombust_acc_eff(t,"CHA",te)$(sameas(te,"spv") OR sameas(te,"csp") OR sameas(te,"wind") OR sameas(te,"tnrs") OR sameas(te,"spv") OR sameas(te,"geohdr") OR sameas(te,"hydro")) = 0.38; !! substitution accounting for low-carbon electricity generation at coal efficiency of 38%
 *** lower bound on gas share in PE
 p40_PEgasBound("2020","CHN") = 0.1; 
-p40_PEgasBound(t,"CHN")$(t.val gt 2020) = min(0.1 ,0.1 - (t.val - 2040) * 0.005 ); !! 10% until 2040 and then declining again, to allow for high LC shares (no bound on gas after 2080)
+p40_PEgasBound(t,"CHN")$(t.val gt 2020) = min(0.1 ,0.1 - (t.val - 2050) * 0.005 ); !! 10% until 2050 and then declining again, to allow for high LC shares (no bound on gas after 2080)
 p40_PEgasBound("2020","CHA") = 0.1; 
-p40_PEgasBound(t,"CHA")$(t.val gt 2020) = min(0.1 ,0.1 - (t.val - 2040) * 0.005 ); !! 10% until 2040 and then declining again, to allow for high LC shares (no bound on gas after 2080)
+p40_PEgasBound(t,"CHA")$(t.val gt 2020) = min(0.1 ,0.1 - (t.val - 2050) * 0.005 ); !! 10% until 2050 and then declining again, to allow for high LC shares (no bound on gas after 2080)
 *** lower bound on low carbon share in PE
 p40_PElowcarbonBound("2020","CHN") = 0.15; 
 p40_PElowcarbonBound(t,"CHN")$(t.val ge 2030)=min(0.15 + (t.val -2030) * 0.00,0.75	); !!Chinas INDC plus extrapolation, is mostly non-binding beyond 2035
diff --git a/output.R b/output.R
index 22448342e613d9b5bcde3290a964cc2afcd86f67..b5cac1212a7e20dc7cb9f600f476bdcdce230ae6 100644
--- a/output.R
+++ b/output.R
@@ -241,13 +241,6 @@ if (comp==TRUE) {
     #included as source (instead of a load from command line)
     source_include <- TRUE
    
-    if (file.exists(path(outputdir,"output.RData"))) {
-      data_workspace<-path(outputdir,"output.RData")
-    } else {
-      tmp<-strsplit(outputdir,"/")[[1]]
-      data_workspace<-paste0(outputdir,"/",tmp[length(tmp)],".RData")
-    }
-    print(data_workspace)
     cat(paste("\nStarting output generation for",outputdir,"\n\n"))
     
     ###################################################################################
diff --git a/scripts/output/comparison/multiComparison.R b/scripts/output/comparison/multiComparison.R
index c8f173e759fbdcca412bce556c0598509043d923..d189f3fc2c39e2de0524d7ae61b22e98dacfa64a 100644
--- a/scripts/output/comparison/multiComparison.R
+++ b/scripts/output/comparison/multiComparison.R
@@ -4,7 +4,7 @@
 # |  AGPL-3.0, you are granted additional permissions described in the
 # |  REMIND License Exception, version 1.0 (see LICENSE file).
 # |  Contact: remind@pik-potsdam.de
-## require(remind)
+
 require(parallel)
 ## load local reporting
 ## require(devtools)
@@ -12,7 +12,54 @@ require(parallel)
 require(remind)
 require(data.table)
 
+#' Run a multi-dimensional parallel compareScenario computation.
+#'
+#' From the list of runs given by the `output.R` infrastructure,
+#' select and align runs according to a matrix defined in the SDP/SSP
+#' and mitigation scenario space, given in
+#' `config/multi_comparison_matrix.csv`.
+#'
+#' The columns in `config/multi_comparison_matrix.csv` denote:
+#'
+#' policy: the mitigation policy in place
+#' scenario: the scenario in the SSP/SDP dimension
+#' short: the run should run only on a time range up to 2060
+#' coupled: A prefix has to be added to correctly identify scenarios
+#'   in coupled runs
+#'
+#' The list of runs is compiled by this script and
+#' stored in `multi_comparison.csv` in the root folder.
+#'
+#' The columns in `multi_comparison.csv` denote:
+#' policy: the mitigation policy in place
+#' scenario: the scenario in the SSP/SDP dimension
+#' mif: the output file corresponding to the two dimensions
+#' comparison_id: id to label comparison runs, i.e., runs with the
+#'   same IDs are compared
+#' coupled: A prefix has to be added to correctly identify scenarios
+#'   in coupled runs
+#' short: the run should run only on a time range up to 2060
+#'
+#' Eventually, `scripts/utils/compareParallel.R` reads the file
+#' `multi_comparison.csv` and executes `compareScenarios` locally or on the cluster
+#' (depending on the presence of the `sbatch` slurm utils).
+#'
+#' The number of cores to be used in parallel on the cluster is
+#' determined by the variable CORES at the top of the function body.
+#'
+#' The prefix for coupled runs is also defined at the top (COUPLED_PREFIX).
+#'
+#' The scenarioComparison plots are stored in the subfolder
+#' OUTPUT_FOLDER.
+#'
+#' @param listofruns a list of output folders, as given by the
+#'     `output.R` infrastructure
+
+
 compareScenTable <- function(listofruns){
+  CORES = 12
+  COUPLED_PREFIX = "C_"
+  OUTPUT_FOLDER = "multi_comparison_plots"
 
   scendt <- fread("config/multi_comparison_matrix.csv")
   scendt[
@@ -26,7 +73,7 @@ compareScenTable <- function(listofruns){
                        scenario=unlist(scenario),
                        coupled, short), by=comparison_id]
 
-  scendt[coupled == T, scenario := paste0("remind-coupled_", scenario)]
+  scendt[coupled == T, scenario := paste0(COUPLED_PREFIX, scenario)]
 
   unique_scens <- unique(scendt[, .(policy, scenario)])
 
@@ -51,7 +98,7 @@ compareScenTable <- function(listofruns){
       warning(sprintf("No output found for scenario %s and budget %s", sc, budg))
       return(NA)
     }
-    mif <- file.path(choice, paste0("REMIND_generic_", sc, "-", budg, ".mif"))
+    mif <- file.path(choice, paste0("REMIND_generic_", basename(choice), ".mif"))
     return(mif)
   }
 
@@ -66,7 +113,8 @@ compareScenTable <- function(listofruns){
 
   if(system("hash sbatch 2>/dev/null") == 0){
     cat("Submitting comparison Jobs:\n")
-     system(paste0("sbatch --job-name=rem-compare --output=log-%j.out --mail-type=END --cpus-per-task=2 --qos=priority --wrap=\"Rscript scripts/utils/compareParallel.R \""))
+    system(sprintf("sbatch --job-name=rem-compare --output=log-%%j.out --mail-type=END --cpus-per-task=%i --qos=priority --wrap=\"Rscript scripts/utils/compareParallel.R %s\"",
+    CORES, OUTPUT_FOLDER))
   }else{
     source("scripts/utils/compareParallel.R")
   }
diff --git a/scripts/output/comparison/policyCosts.R b/scripts/output/comparison/policyCosts.R
new file mode 100644
index 0000000000000000000000000000000000000000..f31f4db6500abfc36b889019df5bb5cf1833960f
--- /dev/null
+++ b/scripts/output/comparison/policyCosts.R
@@ -0,0 +1,197 @@
+# |  (C) 2006-2019 Potsdam Institute for Climate Impact Research (PIK)
+# |  authors, and contributors see CITATION.cff file. This file is part
+# |  of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of
+# |  AGPL-3.0, you are granted additional permissions described in the
+# |  REMIND License Exception, version 1.0 (see LICENSE file).
+# |  Contact: remind@pik-potsdam.de
+
+# policyCosts.R
+#
+# This script produces a pdf in which the policy costs of policy-runs with 
+# respect to specified reference runs are displayed.
+# It can be called via the output.R script. If that is the case, the order 
+# in which the runs are selected is important:
+#   1: policy run 1
+#   2: reference run 1
+#   3: policy run 2
+#   4: reference run 2
+# and so on... 
+# 
+
+suppressPackageStartupMessages(library(tidyverse))
+
+# TODO: Loading magclass shouldn't actually be necessary... but running on the 
+# cluster without doing so throws an error...
+suppressPackageStartupMessages(library(magclass)) 
+
+# Function defintions
+get_run_names <- function(filepaths) {
+  # The run names are found between a "/" and the time-stamp of the run.
+  run_names <- str_match(filepaths, pattern = "^.*\\/(.*)(_....-..-..*)$")[,2]
+  
+  # If for some reason there isn't a time-stamp, return the name of the folder
+  if (any(is.na(run_names))) {
+    run_names <- str_match(filepaths, pattern = "^.*\\/(.*)\\/.*$")[,2]
+  }
+  return(run_names)
+}
+
+policy_costs_pdf <- function(policy_costs,  fileName="PolicyCost.pdf") {
+  
+  cat(paste0("A pdf with the name ",crayon::green(fileName)," is being created.\n"))
+  
+  template <-  c("\\documentclass[a4paper,landscape,twocolumn]{article}",
+                 "\\setlength{\\oddsidemargin}{-0.8in}",
+                 "\\setlength{\\evensidemargin}{-0.5in}",
+                 "\\setlength{\\topmargin}{-0.8in}",
+                 "\\setlength{\\parindent}{0in}",
+                 "\\setlength{\\headheight}{0in}",
+                 "\\setlength{\\topskip}{0in}",
+                 "\\setlength{\\headsep}{0in}",
+                 "\\setlength{\\footskip}{0.2in}",
+                 "\\setlength\\textheight{0.95\\paperheight}",
+                 "\\setlength\\textwidth{0.95\\paperwidth}",
+                 "\\setlength{\\parindent}{0in}",
+                 "\\usepackage{float}",
+                 "\\usepackage[bookmarksopenlevel=section,colorlinks=true,linkbordercolor={0.9882353 0.8352941 0.7098039}]{hyperref}",
+                 "\\hypersetup{bookmarks=true,pdfauthor={GES group, PIK}}",
+                 "\\usepackage{graphicx}",
+                 "\\usepackage[strings]{underscore}",
+                 "\\usepackage{Sweave}",
+                 "\\begin{document}",
+                 "<<echo=false>>=",
+                 "options(width=110)",
+                 "@")
+  
+  # Create temporaray folder in which to create the policyCost pdf
+  system("mkdir tmp_policyCost")
+  
+  # Open stream in tmp_folder
+  sw <- lusweave::swopen(fileName, folder = "tmp_policyCost", template = template)
+  
+  # Write title
+  lusweave::swlatex(sw,"\\section{Policy Costs}")
+  
+  # Loop over subsections and create plots
+  sub_section_variables <- grep("Policy Cost", names(policy_costs), value = T)
+  sub_section_titles <- str_match(sub_section_variables, "\\|(.*) \\(|\\|")[,2]
+  
+  my_ggplot <- function(data, y_var) {
+    gg1 <- ggplot(data) +
+      geom_line(aes(x=period, y=!!sym(y_var), color = `Model Output`)) +
+      geom_point(aes(x=period, y=!!sym(y_var), color = `Model Output`)) +
+      geom_vline(aes(xintercept = min(period)), linetype = 2) +
+      facet_wrap("region", ncol = 3, scales = "free_y") +
+      xlab("Year") +
+      theme_bw() +
+      theme(legend.position = "bottom", 
+            legend.direction = "vertical",
+            legend.title.align=0.5,
+            legend.title = element_text(face="bold"),
+            axis.title.x = element_text(face="bold"),
+            axis.title.y = element_text(face="bold"))
+    return(gg1)
+  }
+  
+  for(i in 1:length(sub_section_titles)){
+    lusweave::swlatex(sw, paste0("\\subsection{", sub_section_titles[i], "}"))
+    
+    p <- my_ggplot(filter(policy_costs, region=="GLO"), sub_section_variables[i])
+    lusweave::swfigure(sw,print,p,sw_option="height=8,width=8")
+    
+    p <- my_ggplot(filter(policy_costs, region!="GLO"), sub_section_variables[i])
+    lusweave::swfigure(sw,print,p,sw_option="height=9,width=8")
+  }
+  
+  # Close stream to-pdf
+  lusweave::swclose(sw)
+  
+  # Copy pdf from tmp folder to remind folder and delete tmp folder
+  system(paste0("mv tmp_policyCost/",fileName," ."))
+  system("rm -r tmp_policyCost")
+  
+}
+
+# Check for an object called "source_include". If found, that means, this script
+# is being called from another (output.R most likely), and the input variables
+# are already in the environment. If not found, the input variables are given
+# default values, and made over-writable with command line values.
+if(!exists("source_include")) {
+  # Set default value
+  outputdirs <- c("../../femulator_hq/remind_runs_lab/base_allT_lab_0point7_2020-03-12_09.36.25",
+                  "../../femulator_hq/remind_runs_lab/base_allT_lab_0point95_2020-03-16_15.35.20",
+                  "../../femulator_hq/remind_runs_lab/base_allT_lab_0point7_2020-03-12_09.36.25",
+                  "../../femulator_hq/remind_runs_lab/base_allT_lab_0point8_2020-03-12_09.36.24")   
+  # Make over-writtable from command line
+  lucode::readArgs("outputdirs")
+  
+}
+
+# Check that the input variable "outputdirs" has an even number of entries.
+if (length(outputdirs) %% 2!=0) {
+  cat(paste0(crayon::red("\nERROR: "), "The number of directories is not even!\n"))
+  cat("Remember, the order in which you choose the directories should be:\n")
+  cat("\t1: policy run 1\n\t2: reference run 1\n\t3: policy run 2\n\t4: reference run 2\nand so on...\n")
+  cat(crayon::red("\nStopping execution now.\n\n"))
+  stop("Number of directories is not even!")
+}
+
+# Get gdx paths
+pol_gdxs <- paste0(outputdirs[seq(1,length(outputdirs),2)], "/fulldata.gdx")
+ref_gdxs <- paste0(outputdirs[seq(2,length(outputdirs),2)], "/fulldata.gdx")
+
+# Get run names
+pol_names <- get_run_names(pol_gdxs)
+ref_names <- get_run_names(ref_gdxs)
+
+# Define pol-ref, policyCost pair names
+pc_pairs <- paste0(pol_names, "_w.r.t_",ref_names)
+
+# If scrpit was called from output.R, check with user if the pol-ref pairs are the 
+# ones he wanted. 
+if(exists("source_include")) {
+  cat(crayon::blue("\nPlease confirm the set-up:\n"))
+  cat("From the order with which you selected the directories, the following policy-cost curves will be created:\n")
+  cat(crayon::green(paste0("\t", pc_pairs ,"\n")))
+  cat("Is that what you intended?\n")
+  cat(paste0("Type '",crayon::green("y"),"' to continue, '",crayon::red("n"),"' to abort: "))
+  user_input <- get_line()
+  if(!user_input %in% c("y","Y","yes")) {
+    cat(crayon::red("\nShame... \n"))
+    cat("Remember, the order in which you choose the directories should be:\n")
+    cat("\t1: policy run 1\n\t2: reference run 1\n\t3: policy run 2\n\t4: reference run 2\nand so on...\n")
+    cat(crayon::red("\nStopping execution now.\n\n"))
+    stop("Wrong set up.")
+  } else cat(crayon::green("Great!\n"))
+}
+
+# Tell the user what's going on
+cat(crayon::blue("\nPolicy cost computations:\n"))
+
+# Get Policy costs for every policy-reference pair
+tmp_policy_costs <- mapply(remind::reportPolicyCosts, pol_gdxs, ref_gdxs, SIMPLIFY = FALSE) %>% 
+  lapply(quitte::as.quitte) %>% 
+  lapply(select, region, period, data, value)
+
+# Combine results in single tibble, with names like "Pol_w.r.t_Ref"
+policy_costs <- rename(tmp_policy_costs[[1]], !!sym(paste0(pol_names[1], "_w.r.t_",ref_names[1])):=value)
+if (length(tmp_policy_costs)>1){
+  for (i in 2:length(tmp_policy_costs)) {
+    policy_costs <- tmp_policy_costs[[i]] %>% 
+      rename(!!sym(paste0(pol_names[i], "_w.r.t_",ref_names[i])):=value) %>% 
+      left_join(policy_costs, tmp_policy_costs[[i]], by=c("region", "period", "data"))
+  }
+}
+# and do some pivotting
+policy_costs <- policy_costs %>% 
+  pivot_longer(cols = matches(".*w\\.r\\.t.*"), names_to = "Model Output") %>% 
+  pivot_wider(names_from = data)
+
+# Tell the user what's going on
+cat(crayon::green("Done!\n"))
+
+# Create Pdf
+cat(crayon::blue("\nPdf creation:\n"))
+time_stamp <- format(Sys.time(), "_%Y-%m-%d_%H.%M.%S")
+policy_costs_pdf(policy_costs, fileName = paste0("PolicyCost",time_stamp,".pdf"))
+cat(crayon::green("Done!\n\n"))
diff --git a/scripts/start/prepare_and_run.R b/scripts/start/prepare_and_run.R
index 62e2ce5f70df88dd36021758341389e72e49ecf0..90c64e1cfd09da0e5df76bff57e030e3cb7ec98a 100644
--- a/scripts/start/prepare_and_run.R
+++ b/scripts/start/prepare_and_run.R
@@ -2,6 +2,10 @@ library(lucode, quietly = TRUE,warn.conflicts =FALSE)
 library(dplyr, quietly = TRUE,warn.conflicts =FALSE)
 require(gdx)
 
+################################################################################################## 
+#                             function: getReportData                                            #
+##################################################################################################
+
 getReportData <- function(path_to_report,inputpath_mag="magpie",inputpath_acc="costs") {
 	require(lucode, quietly = TRUE,warn.conflicts =FALSE)
   require(magclass, quietly = TRUE,warn.conflicts =FALSE)
@@ -138,13 +142,13 @@ getReportData <- function(path_to_report,inputpath_mag="magpie",inputpath_acc="c
   #.agriculture_tradebal(mag)
 }
 
-###############################################################################
-###############################################################################
-###############################################################################
+################################################################################################## 
+#                             function: prepare                                                  #
+##################################################################################################
 
-prepare_and_run <- function() {
-  
-  start_time <- Sys.time()
+prepare <- function() {
+
+  timePrepareStart <- Sys.time()
   
   # Load libraries
   require(lucode, quietly = TRUE,warn.conflicts =FALSE)
@@ -200,10 +204,6 @@ prepare_and_run <- function() {
   if (on_cluster)
     system("find ./core/magicc/ -type f | xargs dos2unix -q")
   
-  # Set source_include so that loaded scripts know they are included as 
-  # source (instead of being executed from the command line)
-  source_include <- TRUE
-   
   ################## M O D E L   L O C K ###################################
   # Lock the directory for other instances of the start scritps
   lock_id <- model_lock(timeout1 = 1, oncluster=on_cluster)
@@ -218,7 +218,7 @@ prepare_and_run <- function() {
   # ATTENTION: modifying gms files
   if(!is.null(cfg$gms$carbonprice) && (cfg$gms$carbonprice == "NDC2018")){
     source("scripts/input/prepare_NDC2018.R")
-    prepare_NDC2018(as.character(cfg$files2export$start["input_ref.gdx"]))
+    prepare_NDC2018(as.character(cfg$files2export$start["input_bau.gdx"]))
   } 
   ## the following is outcommented because by now it has to be done by hand ( currently only one gdx is handed to the next run, so it is impossible to fix to one run and use the tax from another run)
   ## Update CO2 tax information for exogenous carbon price runs with the same CO2 price as a previous run
@@ -393,10 +393,9 @@ prepare_and_run <- function() {
   ################## M O D E L   U N L O C K ###################################
   # After full.gms was produced remind folders have to be unlocked to allow setting up the next run
   model_unlock(lock_id, oncluster=on_cluster)
-  # Prevent model_unlock from being executed again at the end
+  # Reset on.exit: Prevent model_unlock from being executed again at the end
+  # and remove "setwd(cfg$results_folder)" from on.exit, becaue we change to it in the next line
   on.exit()
-  # Repeat command since on.exit was cleared
-  on.exit(setwd(cfg$results_folder))
   ################## M O D E L   U N L O C K ###################################
   
   setwd(cfg$results_folder)
@@ -563,14 +562,6 @@ prepare_and_run <- function() {
     manipulateFile("full.gms", full_manipulateThis)
   }
 
-
-  # Set value source_include so that loaded scripts know, that they are 
-  # included as source (instead a load from command line)
-  source_include <- TRUE
-
-  # unzip all .gz files
-  system("gzip -d -f *.gz")
-
   #AJS set MAGCFG file
   magcfgFile = paste0('./magicc/MAGCFG_STORE/','MAGCFG_USER_',toupper(cfg$gms$cm_magicc_config),'.CFG')
   if(!file.exists(magcfgFile)){
@@ -582,12 +573,32 @@ prepare_and_run <- function() {
   if (  cfg$gms$cm_startyear > 2005  & (!file.exists("levs.gms.gz") | !file.exists("levs.gms"))) {
     create_fixing_files(cfg = cfg, input_ref_file = "input_ref.gdx")
   }
-   
-  # Print message
-  cat("\nStarting REMIND...\n")
+  
+  timePrepareEnd <- Sys.time()
+  # Save run statistics to local file
+  cat("Saving timePrepareStart and timePrepareEnd to runstatistics.rda\n")
+  lucode::runstatistics(file           = paste0("runstatistics.rda"),
+                      timePrepareStart = timePrepareStart,
+                      timePrepareEnd   = timePrepareEnd)
+  
+  # on.exit sets working directory to results folder
+  
+} # end of function "prepare"
+
+################################################################################################## 
+#                                function: run                                                   #
+##################################################################################################
 
+run <- function(start_subsequent_runs = TRUE) {
+  
+  load("config.Rdata")
+  on.exit(setwd(cfg$results_folder))
+  
   # Save start time
-  begin <- Sys.time()
+  timeGAMSStart <- Sys.time()
+  
+  # Print message
+  cat("\nStarting REMIND...\n")
 
   # Call GAMS
   if (cfg$gms$CES_parameters == "load") {
@@ -669,8 +680,10 @@ prepare_and_run <- function() {
     stop("unknown realisation of 29_CES_parameters")
   }
 
-  # Calculate run time
-  gams_runtime <- Sys.time() - begin
+  # Calculate run time statistics
+  timeGAMSEnd  <- Sys.time()
+  gams_runtime <- timeGAMSEnd - timeGAMSStart
+  timeOutputStart <- Sys.time() 
 
   # If REMIND actually did run
   if (cfg$action == "ce" && cfg$gms$c_skip_output != "on") {
@@ -701,111 +714,137 @@ prepare_and_run <- function() {
   if (cfg$gms$cm_startyear > 2005) 
     system("gzip -f levs.gms margs.gms fixings.gms")
 
-  # go up to the main folder, where the cfg files for subsequent runs are stored
+  # go up to the main folder, where the cfg files for subsequent runs are stored and the output scripts are executed from
   setwd(cfg$remind_folder)
 
   #====================== Subsequent runs ===========================
+  if (start_subsequent_runs) {
+    # 1. Save the path to the fulldata.gdx of the current run to the cfg files 
+    # of the runs that use it as 'input_bau.gdx'
 
-  # 1. Save the path to the fulldata.gdx of the current run to the cfg files 
-  # of the runs that use it as 'input_bau.gdx'
-
-  # Use the name to check whether it is a coupled run (TRUE if the name ends with "-rem-xx")
-  coupled_run <- grepl("-rem-[0-9]{1,2}$",cfg$title)
+    # Use the name to check whether it is a coupled run (TRUE if the name ends with "-rem-xx")
+    coupled_run <- grepl("-rem-[0-9]{1,2}$",cfg$title)
 
-  no_ref_runs <- identical(cfg$RunsUsingTHISgdxAsBAU,character(0)) | all(is.na(cfg$RunsUsingTHISgdxAsBAU)) | coupled_run
+    no_ref_runs <- identical(cfg$RunsUsingTHISgdxAsBAU,character(0)) | all(is.na(cfg$RunsUsingTHISgdxAsBAU)) | coupled_run
 
-  if(!no_ref_runs) {
-    source("scripts/start/submit.R")
-    # Save the current cfg settings into a different data object, so that they are not overwritten
-    cfg_main <- cfg
-    
-    for(run in seq(1,length(cfg_main$RunsUsingTHISgdxAsBAU))){
-      # for each of the runs that use this gdx as bau, read in the cfg, ...
-      cat("Writing the path for input_bau.gdx to ",paste0(cfg_main$RunsUsingTHISgdxAsBAU[run],".RData"),"\n")
-      load(paste0(cfg_main$RunsUsingTHISgdxAsBAU[run],".RData"))
-      # ...change the path_gdx_bau field of the subsequent run to the fulldata gdx of the current run ...
-      cfg$files2export$start['input_bau.gdx'] <- paste0(cfg_main$remind_folder,"/",cfg_main$results_folder,"/fulldata.gdx")
-      save(cfg, file = paste0(cfg_main$RunsUsingTHISgdxAsBAU[run],".RData"))
+    if(!no_ref_runs) {
+      source("scripts/start/submit.R")
+      # Save the current cfg settings into a different data object, so that they are not overwritten
+      cfg_main <- cfg
+      
+      for(run in seq(1,length(cfg_main$RunsUsingTHISgdxAsBAU))){
+        # for each of the runs that use this gdx as bau, read in the cfg, ...
+        cat("Writing the path for input_bau.gdx to ",paste0(cfg_main$RunsUsingTHISgdxAsBAU[run],".RData"),"\n")
+        load(paste0(cfg_main$RunsUsingTHISgdxAsBAU[run],".RData"))
+        # ...change the path_gdx_bau field of the subsequent run to the fulldata gdx of the current run ...
+        cfg$files2export$start['input_bau.gdx'] <- paste0(cfg_main$remind_folder,"/",cfg_main$results_folder,"/fulldata.gdx")
+        save(cfg, file = paste0(cfg_main$RunsUsingTHISgdxAsBAU[run],".RData"))
+      }
+      # Set cfg back to original
+      cfg <- cfg_main
     }
-    # Set cfg back to original
-    cfg <- cfg_main
-  }
 
-  # 2. Save the path to the fulldata.gdx of the current run to the cfg files 
-  # of the subsequent runs that use it as 'input_ref.gdx' and start these runs 
+    # 2. Save the path to the fulldata.gdx of the current run to the cfg files 
+    # of the subsequent runs that use it as 'input_ref.gdx' and start these runs 
 
-  no_subsequent_runs <- identical(cfg$subsequentruns,character(0)) | identical(cfg$subsequentruns,NULL) | coupled_run
+    no_subsequent_runs <- identical(cfg$subsequentruns,character(0)) | identical(cfg$subsequentruns,NULL) | coupled_run
 
-  if(no_subsequent_runs){
-    cat('\nNo subsequent run was set for this scenario\n')
-  } else {
-    # Save the current cfg settings into a different data object, so that they are not overwritten
-    cfg_main <- cfg
-    source("scripts/start/submit.R")
-    
-    for(run in seq(1,length(cfg_main$subsequentruns))){
-      # for each of the subsequent runs, read in the cfg, ...
-      cat("Writing the path for input_ref.gdx to ",paste0(cfg_main$subsequentruns[run],".RData"),"\n")
-      load(paste0(cfg_main$subsequentruns[run],".RData"))
-      # ...change the path_gdx_ref field of the subsequent run to the fulldata gdx of the current (preceding) run ...
-      cfg$files2export$start['input_ref.gdx'] <- paste0(cfg_main$remind_folder,"/",cfg_main$results_folder,"/fulldata.gdx")
-      save(cfg, file = paste0(cfg_main$subsequentruns[run],".RData"))
+    if(no_subsequent_runs){
+      cat('\nNo subsequent run was set for this scenario\n')
+    } else {
+      # Save the current cfg settings into a different data object, so that they are not overwritten
+      cfg_main <- cfg
+      source("scripts/start/submit.R")
       
-      # Subsequent runs will be started in submit.R using the RData files written above 
-      # after the current run has finished.
-      cat("Starting subsequent run ",cfg_main$subsequentruns[run],"\n")
-      submit(cfg)
+      for(run in seq(1,length(cfg_main$subsequentruns))){
+        # for each of the subsequent runs, read in the cfg, ...
+        cat("Writing the path for input_ref.gdx to ",paste0(cfg_main$subsequentruns[run],".RData"),"\n")
+        load(paste0(cfg_main$subsequentruns[run],".RData"))
+        # ...change the path_gdx_ref field of the subsequent run to the fulldata gdx of the current (preceding) run ...
+        cfg$files2export$start['input_ref.gdx'] <- paste0(cfg_main$remind_folder,"/",cfg_main$results_folder,"/fulldata.gdx")
+        save(cfg, file = paste0(cfg_main$subsequentruns[run],".RData"))
+        
+        # Subsequent runs will be started in submit.R using the RData files written above 
+        # after the current run has finished.
+        cat("Starting subsequent run ",cfg_main$subsequentruns[run],"\n")
+        submit(cfg)
+      }
+      # Set cfg back to original
+      cfg <- cfg_main
     }
-    # Set cfg back to original
-    cfg <- cfg_main
-  }
 
-  # 3. Create script file that can be used later to restart the subsequent runs manually.
-  # In case there are no subsequent runs (or it's coupled runs), the file contains only 
-  # a small message.
+    # 3. Create script file that can be used later to restart the subsequent runs manually.
+    # In case there are no subsequent runs (or it's coupled runs), the file contains only 
+    # a small message.
 
-  subseq_start_file  <- paste0(cfg$results_folder,"/start_subsequentruns_manually.R")
+    subseq_start_file  <- paste0(cfg$results_folder,"/start_subsequentruns_manually.R")
 
-  if(no_subsequent_runs){
-    write("cat('\nNo subsequent run was set for this scenario\n')",file=subseq_start_file)
-  } else {
-    #  go up to the main folder, where the cfg. files for subsequent runs are stored
-    filetext <- paste0("setwd('",cfg$remind_folder,"')\n")
-    filetext <- paste0(filetext,"source('scripts/start/submit.R')\n")
-    for(run in seq(1,length(cfg$subsequentruns))){
-      filetext <- paste0(filetext,"\n")
-      filetext <- paste0(filetext,"load('",cfg$subsequentruns[run],".RData')\n")
-      #filetext <- paste0(filetext,"cfg$results_folder <- 'output/:title::date:'\n")
-      filetext <- paste0(filetext,"cat('",cfg$subsequentruns[run],"')\n")
-      filetext <- paste0(filetext,"submit(cfg)\n")
+    if(no_subsequent_runs){
+      write("cat('\nNo subsequent run was set for this scenario\n')",file=subseq_start_file)
+    } else {
+      #  go up to the main folder, where the cfg. files for subsequent runs are stored
+      filetext <- paste0("setwd('",cfg$remind_folder,"')\n")
+      filetext <- paste0(filetext,"source('scripts/start/submit.R')\n")
+      for(run in seq(1,length(cfg$subsequentruns))){
+        filetext <- paste0(filetext,"\n")
+        filetext <- paste0(filetext,"load('",cfg$subsequentruns[run],".RData')\n")
+        #filetext <- paste0(filetext,"cfg$results_folder <- 'output/:title::date:'\n")
+        filetext <- paste0(filetext,"cat('",cfg$subsequentruns[run],"')\n")
+        filetext <- paste0(filetext,"submit(cfg)\n")
+      }
+      # Write the text to the file
+      write(filetext,file=subseq_start_file)
     }
-    # Write the text to the file
-    write(filetext,file=subseq_start_file)
   }
-
   #=================== END - Subsequent runs ========================
-    
+  
   # Copy important files into output_folder (after REMIND execution)
   for (file in cfg$files2export$end)
     file.copy(file, cfg$results_folder, overwrite = TRUE)
 
+  # Set source_include so that loaded scripts know they are included as 
+  # source (instead of being executed from the command line)
+  source_include <- TRUE
+   
   # Postprocessing / Output Generation
   output    <- cfg$output
   outputdir <- cfg$results_folder
   sys.source("output.R",envir=new.env())
-    
-  end_time <- Sys.time()
+  # get runtime for output
+  timeOutputEnd <- Sys.time()
+  
   # Save run statistics to local file
-  cat("Saving start_time and end_time to runstatistics.rda\n")
-  lucode::runstatistics(file      = paste0(cfg$results_folder,"/runstatistics.rda"),
-                        starttime = start_time,
-                        endtime   = end_time)
+  cat("Saving timeGAMSStart, timeGAMSEnd, timeOutputStart and timeOutputStart to runstatistics.rda\n")
+  lucode::runstatistics(file           = paste0(cfg$results_folder, "/runstatistics.rda"),
+                       timeGAMSStart   = timeGAMSStart,
+                       timeGAMSEnd     = timeGAMSEnd,
+                       timeOutputStart = timeOutputStart,
+                       timeOutputEnd   = timeOutputEnd)
   
   return(cfg$results_folder)
-  
   # on.exit sets working directory back to results folder
   
+} # end of function "run"
+
+
+################################################################################################## 
+#                                    script                                                      #
+##################################################################################################
+
+# Call prepare and run without cfg, because cfg is read from results folder, where it has been 
+# copied to by submit(cfg)
+
+if (!file.exists("fulldata.gdx")) {
+  # If no "fulldata.gdx" exists, the script assumes that REMIND did not run before and 
+  # prepares all inputs before starting the run.
+  prepare()
+  start_subsequent_runs <- TRUE
+} else {
+  # If "fulldata.gdx" exists, the script assumes that REMIND did run before and you want 
+  # to restart REMIND in the same folder using the gdx that it previously produced.
+  file.copy("fulldata.gdx", "input.gdx", overwrite = TRUE)
+  start_subsequent_runs <- FALSE
 }
 
-# call prepare and run (always without cfg, because cfg is always read from results folder, where it has been copied by submit(cfg))
-prepare_and_run()
\ No newline at end of file
+# Run REMIND, start subsequent runs (if applicable), and produce output.
+run(start_subsequent_runs)
diff --git a/scripts/start/submit.R b/scripts/start/submit.R
index ccc81c54aa367247828ef357ae059a3ec0cb8b2f..d99172798f31ee875e381b13dd21c021778e815c 100644
--- a/scripts/start/submit.R
+++ b/scripts/start/submit.R
@@ -13,40 +13,43 @@
 
 ############## Define function: runsubmit #########################
 
-submit <- function(cfg) {
+submit <- function(cfg, restart = FALSE) {
   
-  # Generate name of output folder and create the folder
-  date <- format(Sys.time(), "_%Y-%m-%d_%H.%M.%S")
-  cfg$results_folder <- gsub(":date:", date, cfg$results_folder, fixed = TRUE)
-  cfg$results_folder <- gsub(":title:", cfg$title, cfg$results_folder, fixed = TRUE)
-  # Create output folder
-  cat("   Creating results folder",cfg$results_folder,"\n")
-  if (!file.exists(cfg$results_folder)) {
-    dir.create(cfg$results_folder, recursive = TRUE, showWarnings = FALSE)
-  } else if (!cfg$force_replace) {
-    stop(paste0("Results folder ",cfg$results_folder," could not be created because it already exists."))
-  } else {
-    cat("    Deleting results folder because it alreay exists:",cfg$results_folder,"\n")
-    unlink(cfg$results_folder, recursive = TRUE)
-    dir.create(cfg$results_folder, recursive = TRUE, showWarnings = FALSE)
+  if(!restart) {
+    # Generate name of output folder and create the folder
+    date <- format(Sys.time(), "_%Y-%m-%d_%H.%M.%S")
+    cfg$results_folder <- gsub(":date:", date, cfg$results_folder, fixed = TRUE)
+    cfg$results_folder <- gsub(":title:", cfg$title, cfg$results_folder, fixed = TRUE)
+    # Create output folder
+    cat("   Creating results folder",cfg$results_folder,"\n")
+    if (!file.exists(cfg$results_folder)) {
+      dir.create(cfg$results_folder, recursive = TRUE, showWarnings = FALSE)
+    } else if (!cfg$force_replace) {
+      stop(paste0("Results folder ",cfg$results_folder," could not be created because it already exists."))
+    } else {
+      cat("    Deleting results folder because it alreay exists:",cfg$results_folder,"\n")
+      unlink(cfg$results_folder, recursive = TRUE)
+      dir.create(cfg$results_folder, recursive = TRUE, showWarnings = FALSE)
+    }
+    
+    # remember main folder
+    cfg$remind_folder <- getwd()
+    
+    # Save the cfg (with the updated name of the result folder) into the results folder. 
+    # Do not save the new name of the results folder to the .RData file in REMINDs main folder, because it 
+    # might be needed to restart subsequent runs manually and should not contain the time stamp in this case.
+    filename <- paste0(cfg$results_folder,"/config.Rdata")
+    cat("   Writing cfg to file",filename,"\n")
+    save(cfg,file=filename)
+    
+    # Copy files required to confiugre and start a run
+    filelist <- c("prepare_and_run.R" = "scripts/start/prepare_and_run.R",
+                  ".Rprofile" = ".Rprofile")
+    .copy.fromlist(filelist,cfg$results_folder)
+    
+    # Do not remove .RData files from REMIND main folder because they are needed in case you need to manually restart subsequent runs.
   }
   
-  # remember main folder
-  cfg$remind_folder <- getwd()
-  
-  # Save the cfg (with the updated name of the result folder) into the results folder. 
-  # Do not save the new name of the results folder to the .RData file in REMINDs main folder, because it 
-  # might be needed to restart subsequent runs manually and should not contain the time stamp in this case.
-  filename <- paste0(cfg$results_folder,"/config.Rdata")
-  cat("   Writing cfg to file",filename,"\n")
-  save(cfg,file=filename)
-  
-  # Copy files required to confiugre and start a run
-  filelist <- c("prepare_and_run.R" = "scripts/start/prepare_and_run.R")
-  .copy.fromlist(filelist,cfg$results_folder)
-  
-  # Do not remove .RData files from REMIND main folder because they are needed in case you need to manually restart subsequent runs.
-
   # Change to run folder
   setwd(cfg$results_folder)
   on.exit(setwd(cfg$remind_folder))
diff --git a/scripts/utils/compareParallel.R b/scripts/utils/compareParallel.R
index 749f0e9f7b582123d13a091338b9980927376804..ffcca6503af586ca602f2f6b48415f67a42b665b 100644
--- a/scripts/utils/compareParallel.R
+++ b/scripts/utils/compareParallel.R
@@ -8,18 +8,27 @@ require(data.table)
 require(parallel)
 require(remind)
 
-plotfldr <- "multi_comparison_plots/"
+args = commandArgs(trailingOnly=TRUE)
+if (length(args)==0) {
+  plotfldr <- "multi_comparison_plots"
+} else {
+  plotfldr <- args[1]
+}
+
 dir.create(plotfldr, showWarnings = F)
 
-NUM_OF_CPUS <- 2
+NUM_OF_CPUS_LOCAL <- 2
 
 run_compare <- function(scens, policies, mifs, short){
 
   RCP_MAP <- list(
     Base="Baseline",
+    NPi="Baseline",
     NDC="Baseline",
-    Budg600="26",
-    Budg950="45"
+    PkBudg900="26",
+    PkBudg1000="45",
+    PkBudg1100="45",
+    PkBudg1300="45"
   )
 
   short <- short[1]
@@ -30,8 +39,8 @@ run_compare <- function(scens, policies, mifs, short){
   short_y <- seq(2005,2060,5)
   short_ybar <- c(2010,2030,2050)
 
-  print(sprintf("Compare scenarios for scenarios %s and budgets %s, short-term: %s",
-                paste(scens, collapse=","), paste(policies, collapse=","), short))
+  print(sprintf("[%s] Compare scenarios for scenarios %s and budgets %s, short-term: %s",
+                Sys.time(), paste(scens, collapse=","), paste(policies, collapse=","), short))
 
   fname <- paste0(paste(scens, collapse="-"), "_",
                   paste(policies, collapse="-"), "_",
@@ -64,11 +73,11 @@ run_compare <- function(scens, policies, mifs, short){
 
 table <- fread("multi_comparison.csv", header = T)
 
-CORES <- as.integer(Sys.getenv("SLURM_CPUS_PER_TASK", NUM_OF_CPUS))
+CORES <- as.integer(Sys.getenv("SLURM_CPUS_PER_TASK", NUM_OF_CPUS_LOCAL))
 cat(sprintf("Using %i CPUs.\n", CORES))
 
 mclapply(1:max(table$comparison_id), function(id){
   args <- table[comparison_id == id]
   run_compare(args$scenario, args$policy, args$mif, args$short)
-})
+}, mc.cores=CORES)
 # table[, run_compare(scenario, policy, mif, short), by=comparison_id]
diff --git a/start.R b/start.R
index 8f15d27a407511d2cccbc174ed14475dcf63f890..9b95ff142a3ed5280427c2b532dc07fca9349db5 100755
--- a/start.R
+++ b/start.R
@@ -1,9 +1,93 @@
 #!/usr/bin/env Rscript
 library(lucode)
 
+#' Usage:
+#' Rscript start.R [options]
+#' Rscript start.R file
+#'
+#' Without additional arguments this starts a single REMIND runs using the settings
+#' from `config/default.cfg`.
+#'
+#' Control the script's behavior by providing additional arguments:
+#'
+#' --testOneRegi: Starting a single REMIND run in OneRegi mode using the
+#'   settings from `config/default.cfg`
+#'
+#' --restart: Restart a run.
+#'
+#' Starting a bundle of REMIND runs using the settings from a scenario_config_XYZ.csv:
+#'
+#'   Rscript start.R config/scenario_config_XYZ.csv
+#'
+
+
 source("scripts/start/submit.R")
 source("scripts/start/choose_slurmConfig.R")
 
+############## Define function: get_line ##############################
+
+get_line <- function(){
+	# gets characters (line) from the terminal of from a connection
+	# and stores it in the return object
+	if(interactive()){
+		s <- readline()
+	} else {
+		con <- file("stdin")
+		s <- readLines(con, 1, warn=FALSE)
+		on.exit(close(con))
+	}
+	return(s);
+}
+
+############## Define function: choose_folder #########################
+
+choose_folder <- function(folder,title="Please choose a folder") {
+  dirs <- NULL
+  
+  # Detect all output folders containing fulldata.gdx
+  # For coupled runs please use the outcommented text block below
+
+  dirs <- sub("/fulldata.gdx","",sub("./output/","",Sys.glob(file.path(folder,"*","fulldata.gdx"))))
+
+  # DK: The following outcommented lines are specially made for listing results of coupled runs
+  #runs <- findCoupledruns(folder)
+  #dirs <- findIterations(runs,modelpath=folder,latest=TRUE)
+  #dirs <- sub("./output/","",dirs)
+  
+  dirs <- c("all",dirs)
+  cat("\n\n",title,":\n\n")
+  cat(paste(1:length(dirs), dirs, sep=": " ),sep="\n")
+	cat(paste(length(dirs)+1, "Search by the pattern.\n", sep=": "))
+  cat("\nNumber: ")
+	identifier <- get_line()
+  identifier <- strsplit(identifier,",")[[1]]
+  tmp <- NULL
+  for (i in 1:length(identifier)) {
+    if (length(strsplit(identifier,":")[[i]]) > 1) tmp <- c(tmp,as.numeric(strsplit(identifier,":")[[i]])[1]:as.numeric(strsplit(identifier,":")[[i]])[2])
+    else tmp <- c(tmp,as.numeric(identifier[i]))
+  }
+  identifier <- tmp
+  # PATTERN
+	if(length(identifier==1) && identifier==(length(dirs)+1)){
+		cat("\nInsert the search pattern or the regular expression: ")
+		pattern <- get_line()
+		id <- grep(pattern=pattern, dirs[-1])
+		# lists all chosen directories and ask for the confirmation of the made choice
+		cat("\n\nYou have chosen the following directories:\n")
+		cat(paste(1:length(id), dirs[id+1], sep=": "), sep="\n")
+		cat("\nAre you sure these are the right directories?(y/n): ")
+		answer <- get_line()
+		if(answer=="y"){
+			return(dirs[id+1])
+		} else choose_folder(folder,title)
+	# 
+	} else if(any(dirs[identifier] == "all")){
+		identifier <- 2:length(dirs)
+		return(dirs[identifier])
+	} else return(dirs[identifier])
+}
+
+
 ############## Define function: configure_cfg #########################
 
 configure_cfg <- function(icfg, iscen, iscenarios, isettings) {
@@ -87,84 +171,110 @@ configure_cfg <- function(icfg, iscen, iscenarios, isettings) {
     return(icfg)
 }
 
-###################### Choose submission type #########################
-slurmConfig <- choose_slurmConfig()
-
-###################### Load csv if provided  ##########################
-
-# If testOneRegi was selected, set up a testOneRegi run.  IF a
-# scenario_config.csv file was provided, set cfg according to it (copy from
-# start_bundle).
 
 # check command-line arguments for testOneRegi and scenario_config file
 argv <- commandArgs(trailingOnly = TRUE)
 config.file <- argv[1]
-if ('--testOneRegi' %in% argv) {
-  testOneRegi <- TRUE
-  config.file <- NA
-} else {
-  testOneRegi <- FALSE
-}
-
-if (!is.na(config.file)) {
-  cat(paste("\nReading config file", config.file, "\n"))
 
-  # Read-in the switches table, use first column as row names
-  settings <- read.csv2(config.file, stringsAsFactors = FALSE, row.names = 1, comment.char = "#", na.strings = "")
+# define arguments that are accepted
+accepted <- c('--restart','--testOneRegi')
 
-  # Select scenarios that are flagged to start
-  scenarios  <- settings[settings$start==1,]
-  if (length(grep("\\.",rownames(scenarios))) > 0) stop("One or more titles contain dots - GAMS would not tolerate this, and quit working at a point where you least expect it. Stopping now. ")
-} else {
-  # if no csv was provided create dummy list with default as the only scenario
-  scenarios <- data.frame("default" = "default",row.names = "default")
+# check if user provided any unknown arguments or config files that do not exist
+known <-  argv %in% accepted
+if (!all(known)) {
+  file_exists <- file.exists(argv[!known])
+  if (!all(file_exists)) stop("Unknown paramter provided: ",paste(argv[!known][!file_exists]," "))
 }
 
-###################### Loop over csv ###############################
-
-# Modify and save cfg for all runs
-for (scen in rownames(scenarios)) {
-  #source cfg file for each scenario to avoid duplication of gdx entries in files2export
-  source("config/default.cfg")
+###################### Choose submission type #########################
+slurmConfig <- choose_slurmConfig()
 
-  # Have the log output written in a file (not on the screen)
-  cfg$slurmConfig <- slurmConfig
-  cfg$logoption   <- 2
-  start_now       <- TRUE
+# Restart REMIND in existing results folder (if required by user)
+if ('--restart' %in% argv) {
+  # choose results folder from list
+  outputdirs <- choose_folder("./output","Please choose the runs to be restarted")
+  for (outputdir in outputdirs) {
+    cat("Restarting",outputdir,"\n")
+    load(paste0("output/",outputdir,"/config.Rdata")) # read config.Rdata from results folder
+    submit(cfg, restart = TRUE)
+    #cat(paste0("output/",outputdir,"/config.Rdata"),"\n")
+  }
+  
+} else {
 
-  # testOneRegi settings
-  if (testOneRegi) {
-    cfg$title            <- 'testOneRegi'
-    cfg$gms$optimization <- 'testOneRegi'
-    cfg$output           <- NA
-    cfg$results_folder   <- 'output/testOneRegi'
+  # If testOneRegi was selected, set up a testOneRegi run.
 
-    # delete existing Results directory
-    cfg$force_replace    <- TRUE
+  if ('--testOneRegi' %in% argv) {
+    testOneRegi <- TRUE
+    config.file <- NA
+  } else {
+    testOneRegi <- FALSE
   }
 
-  cat("\n",scen,"\n")
+  ###################### Load csv if provided  ##########################
+
+  # If a scenario_config.csv file was provided, set cfg according to it.
 
-  # configure cfg based on settings from csv if provided
   if (!is.na(config.file)) {
-    cfg <- configure_cfg(cfg, scen, scenarios, settings)
-    # Directly start runs that have a gdx file location given as path_gdx_ref or where this field is empty
-    start_now <- (substr(scenarios[scen,"path_gdx_ref"], nchar(scenarios[scen,"path_gdx_ref"])-3, nchar(scenarios[scen,"path_gdx_ref"])) == ".gdx"
-                 | is.na(scenarios[scen,"path_gdx_ref"]))
-  }
-  
-  # save the cfg data for later start of subsequent runs (after preceding run finished)
-  filename <- paste0(scen,".RData")
-  cat("   Writing cfg to file",filename,"\n")
-  save(cfg,file=filename)
-
-  if (start_now){
-    # Create results folder and start run
-    submit(cfg)
-    } else {
-    cat("   Waiting for", scenarios[scen,'path_gdx_ref'] ,"\n")
+    cat(paste("\nReading config file", config.file, "\n"))
+
+    # Read-in the switches table, use first column as row names
+    settings <- read.csv2(config.file, stringsAsFactors = FALSE, row.names = 1, comment.char = "#", na.strings = "")
+
+    # Select scenarios that are flagged to start
+    scenarios  <- settings[settings$start==1,]
+    if (length(grep("\\.",rownames(scenarios))) > 0) stop("One or more titles contain dots - GAMS would not tolerate this, and quit working at a point where you least expect it. Stopping now. ")
+  } else {
+    # if no csv was provided create dummy list with default as the only scenario
+    scenarios <- data.frame("default" = "default",row.names = "default")
   }
 
-  if (!identical(cfg$subsequentruns,character(0))) cat("   Subsequent runs:",cfg$subsequentruns,"\n")
-  
+  ###################### Loop over scenarios ###############################
+
+  # Modify and save cfg for all runs
+  for (scen in rownames(scenarios)) {
+    #source cfg file for each scenario to avoid duplication of gdx entries in files2export
+    source("config/default.cfg")
+
+    # Have the log output written in a file (not on the screen)
+    cfg$slurmConfig <- slurmConfig
+    cfg$logoption   <- 2
+    start_now       <- TRUE
+
+    # testOneRegi settings
+    if (testOneRegi) {
+      cfg$title            <- 'testOneRegi'
+      cfg$gms$optimization <- 'testOneRegi'
+      cfg$output           <- NA
+      cfg$results_folder   <- 'output/testOneRegi'
+
+      # delete existing Results directory
+      cfg$force_replace    <- TRUE
+    }
+
+    cat("\n",scen,"\n")
+
+    # configure cfg based on settings from csv if provided
+    if (!is.na(config.file)) {
+      cfg <- configure_cfg(cfg, scen, scenarios, settings)
+      # Directly start runs that have a gdx file location given as path_gdx_ref or where this field is empty
+      start_now <- (substr(scenarios[scen,"path_gdx_ref"], nchar(scenarios[scen,"path_gdx_ref"])-3, nchar(scenarios[scen,"path_gdx_ref"])) == ".gdx"
+                   | is.na(scenarios[scen,"path_gdx_ref"]))
+    }
+    
+    # save the cfg data for later start of subsequent runs (after preceding run finished)
+    filename <- paste0(scen,".RData")
+    cat("   Writing cfg to file",filename,"\n")
+    save(cfg,file=filename)
+
+    if (start_now){
+      # Create results folder and start run
+      submit(cfg)
+      } else {
+      cat("   Waiting for", scenarios[scen,'path_gdx_ref'] ,"\n")
+    }
+
+    if (!identical(cfg$subsequentruns,character(0))) cat("   Subsequent runs:",cfg$subsequentruns,"\n")
+    
+  }
 }
diff --git a/tutorials/2_RunningREMIND.md b/tutorials/2_RunningREMIND.md
index b384fae6ce3b2066170be4767412308942255817..f0cc0b6c53cc9ccbdcdc27e0b76e3c5b4d0c93e0 100644
--- a/tutorials/2_RunningREMIND.md
+++ b/tutorials/2_RunningREMIND.md
@@ -3,27 +3,28 @@ Start running REMIND with default settings
 Felix Schreyer (<felix.schreyeru@pik-potsdam.de>), Lavinia Baumstark (<baumstark@pik-potsdam.de>), David Klein (<dklein@pik-potsdam.de>)
 30 April, 2019
 
--   [1. Your first run](#Your first run)
-    -   [Default configurations](#Default_Configurations)
-    -   [Configuration with scenario_config.csv](#configuration_with_scenario_config)
-    -   [Starting the run](#Starting the Run)
--   [2. What happens during a REMIND run?](#2. What happens during a REMIND run?)
--   [3. What happens once you start REMIND on the cluster? ](#3. What happens once you start REMIND on the cluster? )
-    -   [a) Input data preparation](#Input Data Preparation)
-    -   [b) Optimization](#Optimization)
-    -   [c) Output processing](#Output Processing)
-
-
-1. Your first run
-==================
-   
+-   [1. Your first run](#1-your-first-run)
+    -   [Default configurations](#default-configurations)
+    -   [Configuration with scenario configuration tables](#configuration-with-scenario-configuration-tables)
+	-   [Accessing the cluster](#accessing-the-cluster)
+	-   [Adjust the Rprofile](#adjust-the-rprofile)
+    -   [Starting the run](#starting-the-run)
+	-   [Restarting runs](#restarting-runs)
+-   [2. What happens during a REMIND run?](#2-what-happens-during-a-remind-run)
+-   [3. What happens once you start REMIND on the cluster? ](#3-what-happens-once-you-start-remind-on-the-cluster)
+    -   [a) Input data preparation](#a-input-data-preparation)
+    -   [b) Optimization](#b-optimization)
+    -   [c) Output processing](#c-output-processing)
+
+
+# 1. Your first run
 
 This section will explain how you start your first run in REMIND.
 
-Default Configurations (config/default.cfg)
--------------------------------------------
+## Default Configurations
 
-The **default.cfg** file is divided into four parts: MODULES, SWITCHES, FLAGS, and Explanations of switches and flags.
+The `config/default.cfg` file contains the default configuration for REMIND. 
+It is divided into four parts: MODULES, SWITCHES, FLAGS, and Explanations of switches and flags.
 
 a. The first part, MODULES, contains settings for the various modules and their realizations. The realisations within the particular module differ from each other in their features, for e.g., bounds, parametric values, different policy cases etc. For each module you choose which realization of the module will be activated for your current run 
 
@@ -33,8 +34,7 @@ cfg$gms$module_name
 
 b. The SWITCHES and FLAGS section contain settings to control, for e.g., how many iterations to run, which technologies to include, which SSP to use, start and end year of model run etc. See the fourth section, explanations of switches and flags, to learn more. 
 
-Configuration with scenario_config.csv
--------------------------------------------
+## Configuration with scenario configuration tables
 
 The folder **config** in your REMIND folder contains a number of csv files that start with **scenario_config**. Those files are used to start a set of runs each with different configurations. In your REMIND folder on the cluster, open **config/scenario_config.csv** in Excel. The scenario_config files have `;` as their delimiter. In Excel, you might need to select the first column, choose *Data* and *Text to Columns* and set the right delimiter `;` to see the csv-file spread over the columns.   
 
@@ -53,8 +53,7 @@ Save the config file as a csv file with `;` as delimiter. You can check that, fo
 
 To finally start REMIND with this config file, you need to run the R-script ***start_bundle.R*** on the cluster on this config file. For this:
 
-Accessing the cluster
-------------------
+## Accessing the cluster
 
 As normal runs with REMIND take quite a while (from a couple of hours to several days), you normally don't want to run them locally (i.e., on your own machine) but on the cluster provided by the IT-services. The first step is to access the cluster. In general, there are three ways how to access the cluster:
 	
@@ -64,8 +63,8 @@ As normal runs with REMIND take quite a while (from a couple of hours to several
 
 They all have their upsides and downsides. Don't worry! If they are new to you, you will figure out what is best for which kind of task after some time and get more famliar just by your practice. Using either Putty or the network drive in Windows Explorer, the first step is:
 
-Adjust .Rprofile
------------------
+## Adjust the Rprofile
+
 First, log onto the cluster via WinSCP and open the file `/home/username/.profile` in a text editor. Add these two lines and save the file.
 
 ``` bash
@@ -74,8 +73,7 @@ umask 0002
 ```
 This loads the piam environment once you log onto the cluster via Putty the next time. This envrionment will enable you to manage the runs that you do on the cluster. Next, you need to specify the kind of run you would like to do. 
    	
-Start the run
------------------------
+## Starting the run
 
 Open a Putty session on the cluster and create a folder on the cluster where you want to store REMIND. It is recommended not to use the `home` directory. For your first experiments you can use the /p/tmp/YourPIKName/ directory (only stored for 3 months) and create a following folder: `p/tmp/YourPIKName/REMIND`
 
@@ -104,7 +102,7 @@ Rscript start.R config/scenario_config_XYZ.csv
 
 Note: Please do not make changes to the REMIND code until the last run has stared running GAMS (including subsequent runs).
 
-A message similar to following confirms that your runs has been submitted to the cluster: `The job "cwsa.iplex.pik-potsdam.de.65539" has been submitted.`
+A message similar to following confirms that your runs has been submitted to the cluster: `Submitted batch job 15489230`
 
 You can check if the run has been accepted by the cluster just by using the command 
 
@@ -113,7 +111,7 @@ sq
 ```
 in the terminal.
 
-To see how far your run is or whether it was stopped due to some problems, go to the `Output` folder and type 
+To see how far your run is or whether it was stopped due to some problems, go to the `output` folder and type 
 
 ``` bash
 rs
@@ -124,11 +122,18 @@ NOTE: A few words on the scripts that we currently use to start runs. The script
 - they submit the run to the cluster or to your GAMS system if you work locally
 - they create the full.gms file and compile the needed files to start a run in a subfolder of the output folder
 
+## Restarting runs
+
+Sometimes you want to restart a run in its already existing results folder whithout creating a new results folder and without compiling a new full.gms., e.g. you want a nash run to perform additional nash iterations because you are not satisfied with the convergence so far. Adding the parameter `--restart` displays a list of existing runs and lets you choose the run(s) you want to restart:
+
+``` bash
+Rscript start.R --restart
+```
 
+This will use the result of the previous optimization (fulldata.gdx) as input for the restart.
 
 
-2. What happens during a REMIND run?
-=====================================
+# 2. What happens during a REMIND run?
 	
 
 This section will give some technical introduction into what happens after you have started a run. It will not be a tutorial, but rather an explanation of the different parts in the modeling routine. The whole routine is illustrated in Figure 1. The core of the model is the optimization written in GAMS. However, there is some pre-processing of the input data and some post-processing of the output data using R scripts.
@@ -139,13 +144,12 @@ REMIND modeling routine
 </p>
 ​	
 
-3. What happens once you start REMIND on the cluster? 
-=======================================================
+# 3. What happens once you start REMIND on the cluster? 
 
 First, a number of R libraries like **madrat**, **moinput** and **remind** are loaded into your cache on the cluster. These libraries were and are still developed at PIK. They contain the functions necessary for the input data preparation and the output processing. Let us go through each of the stages and briefly describe what happens:
 	
-a) Input Data Preparation
---------------------------
+## a) Input Data Preparation
+
 The optimization in REMIND requires a lot of input data. For example, the model needs to know energy production capacities per region for its initial time steps. Furthermore, it builds on GDP, population and energy demand projections that are results of other models. These kind of data are stored on the cluster in
 		
 ``` bash
@@ -163,12 +167,12 @@ cfg$revision
 ```
 the name of the needed input data is constructed. It is checked whether those input data are already available. If not they are automatically downloaded from from `/p/projects/rd3mod/inputdata/output/` and distributed. 
 
-b) Optimization
------------------
+## b) Optimization
+
 The actual REMIND is written in GAMS, a programming software to numerically solve optimization problems. The GAMS scripts are *.gms* files that you can find under the `core` (main part of the model) and the `modules` directories (subparts of the model). Fundamentally, we distinguish between two kinds of variables: variables (starting with *v_*) and parameters (starting with *p_*). Parameters are fix (exogenous data in economist's lingo), while variables are free within a certain range and can be adjusted to maximize the objective function of the optimization problem (endogenous variables in economist's lingo).  However, there are many constraints that fix relations between the variables and parameters. Within the remaining solution space, the optimization procedure tries to find the maximum of the objective function. The output file of the optimization is the **fulldata.gdx** which is under `output` in the folder of your REMIND run. You can open it, for instance, with GAMS IDE or load it into R using the command  `readGDX()` (see details below) . In the file, you can find, among other things, the optimal levels of the variables (`variable.l`) and all the predefined parameter values.   
 		 
-c) Output Processing
-----------------------
+## c) Output Processing
+
 The output processing works with a number of R functions from the **remind** package (most of them start with `report... .R`). The wrapper function **convGDX2MIF.R** writes the most relevant output into the so-called **.mif** file. Again, it is a table that you can open in Excel for example. You find under `output` in the folder of your REMIND run as 
 
 ``` bash
diff --git a/tutorials/7_Advanced_ChangeCode.md b/tutorials/7_Advanced_ChangeCode.md
index 295053c604f6d5cd19f9b26b84f7437c16be33c9..da7d1c45d1f86fad865784a202443ddd814633a7 100644
--- a/tutorials/7_Advanced_ChangeCode.md
+++ b/tutorials/7_Advanced_ChangeCode.md
@@ -35,24 +35,25 @@ Please put effort into choosing intelligible names.
 #### Prefixes:
 Use the following *prefixes*:
 
-* q_ eQuations
-* v_ Variables
-* s_ Scalars
-* f_ File parameters - these parameters contain data as it was read from file
-* o_ Output parameters - only being influenced by optimization but without effect on the optimization
-* c_ switches from the Config.gms - parameters, that are switches to choose different scenarios
-
-The prefixes are extended in some cases by a second letter:
-
-* ?m_ module-relevant object - This object is used by at least one module and the core code. Changes related to this object have to be performed carefully.
-* ?00_ (a 2-digit number) module-only object - This 2-digit number defines the module the object belongs to. The number is used here to make sure that different modules cannot have the same object.
-
-Sets are treated slightly different: Instead of adding a prefix sets should get a 2-digit number suffix giving the number of the module in which the set is exclusively used. If the set is used in more than one module no suffix should be given. For specific sets also prefixes exist:
-
-* s_FIRSTUNIT_2_SECONDUNIT unit conversion scalar - a scalar that is used to convert from FIRSTUNIT to SECONDUNIT by multiplying - example: s_GWh_2_EJ.
-* c_@ - configuration switch, must be defined and assigned in the config.gms file. It's practically the former switches we had (emiscen, climscen, etc).
-
-The **units** of varialbles and parameters are documented at the location of the variable and parameter declaration like [UNIT] (e.g. [TWa], [EJ], [GtC], [GtCO2], ...).
+* "q_" to designate equations,
+* "v_" to designate variables,
+* "s_" to designate scalars,
+* "f_" to designate file parameters (parameters that contain unaltered data read in from input files),
+* "o_" to designate output parameters (parameters that do not affect the optimization, but are affected by it),
+* "c_" to designate switches (parameters that enable different configuration choices),
+* "s_FIRSTUNIT_2_SECONDUNIT" to designate a scalar used to convert from the FIRSTUNIT to the SECONDUNIT 
+                             through multiplication, e.g. s_GWh_2_EJ.
+
+These prefixes are extended in some cases by a second letter:
+
+* "?m_" to designate objects used in the core and in at least one module.
+* "?00_" to designate objects used in a single module, exclusively, with the 2-digit number corresponding 
+         to the module number.
+
+Sets are treated differently: instead of a prefix, sets exclusively used within a module get that module's 
+number added as a suffix. If the set is used in more than one module no suffix is given. 
+ 
+The units (e.g., TWa, EJ, GtC, GtCO2, ...) of variables and parameters are documented in the declaration files.
 
 #### Commenting:
 
diff --git a/tutorials/README.txt b/tutorials/README.md
similarity index 54%
rename from tutorials/README.txt
rename to tutorials/README.md
index 7518fa690cf7308f2b85108bf664ad90e168c6ea..81f9d6019f1e01372c85f457e9b9cf3fe7f6fc43 100644
--- a/tutorials/README.txt
+++ b/tutorials/README.md
@@ -1,10 +1,5 @@
-# |  (C) 2006-2019 Potsdam Institute for Climate Impact Research (PIK)
-# |  authors, and contributors see CITATION.cff file. This file is part
-# |  of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of
-# |  AGPL-3.0, you are granted additional permissions described in the
-# |  REMIND License Exception, version 1.0 (see LICENSE file).
-# |  Contact: remind@pik-potsdam.de
-README: how to use .md or .Rmd files
+## REMIND Tutorials
+# How to use .md or .Rmd files in RStudio
 
 1. open the file in RStudio (right-click, choose "open with ..." and then RStudio)
 2. for .md files: click "Preview" (upper border of the file window, below "Session" in the Menu Bar). Or press Ctrl+Shift+k