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/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/start/prepare_and_run.R b/scripts/start/prepare_and_run.R
index 62e2ce5f70df88dd36021758341389e72e49ecf0..6539f01e16730c6d1bbf83e5e73fb9406bcbbb63 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)
@@ -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..abf4cb31f3d8152566441c84019ce871090b26e1 100644
--- a/scripts/start/submit.R
+++ b/scripts/start/submit.R
@@ -13,40 +13,42 @@
 
 ############## 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")
+    .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/start.R b/start.R
index 8f15d27a407511d2cccbc174ed14475dcf63f890..8419ebb4ab23d21a7de99ee0d37bf476070e6033 100755
--- a/start.R
+++ b/start.R
@@ -4,6 +4,70 @@ library(lucode)
 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 +151,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"))
+# define arguments that are accepted
+accepted <- c('--restart','--testOneRegi')
 
-  # 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")
+# 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..2875c4182d0bdb6fd59ca484671eb94dbb6e86b6 100644
--- a/tutorials/2_RunningREMIND.md
+++ b/tutorials/2_RunningREMIND.md
@@ -104,7 +104,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 +113,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
@@ -125,6 +125,16 @@ NOTE: A few words on the scripts that we currently use to start runs. The script
 - 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?