diff --git a/DataProcessor.pl b/DataProcessor.pl
index 61fd3f1a7573b025855e4ac739d721b73e6bba28..3e04cb9ac64dcd34e6367675a5f8741174551779 100755
--- a/DataProcessor.pl
+++ b/DataProcessor.pl
@@ -23,8 +23,8 @@ my $debugTimeString = getTimestampNow();
 my $debugOutput = 0;
 
 my $debugNoFTPDownload = 0;
-my $debugNoUpload = 1;
-my $debugNoPlot = 1;
+my $debugNoUpload = 0;
+my $debugNoPlot = 0;
 
 # read in project configuration from input argument
 my $configFilePath = shift;
@@ -35,7 +35,7 @@ my $projectName = get_project_name();
 my $projectPath = get_project_path();
 
 # workspace is in project directory
-my $workspacePath = $projectPath."/Workspace";
+my $workspacePath = $projectPath."Workspace";
 # coordinator space is generalised
 my $coordinatorPath = dirname($configFilePath);
 
@@ -243,21 +243,22 @@ unless($debugNoFTPDownload) {
 
 	if ($downloadFromWillow) {
 
-	# If file is not there, script will not die, instead it prints warning to logfile
+		# TODO: make a file check and wait 20s before downloading, in case scp is called before file is completely available
+		# If file is not there, script will not die, instead it prints warning to logfile
 		my $SCPCommand = "scp -i ".$coordinatorPath."/ssh_key_willow willow.csx.cam.ac.uk:/storage/sftp/metofficeupload/upload/".$projectName."/fromMO/daily_name/".$todayOutputFileName." ".$todayFolderPath."/";
 	
 		# system returns 1 on failure, so perl picks this up with 'and'
 		system($SCPCommand) and handleDataNotAvailableByTime($ftpServerName);
 
 	} else {
-	#credentials stored separately so they aren't in plain text and checked in to the repo:
-	my $serverCredentialsFileName = $coordinatorPath."/MO_FTP_Cred.json";
-	my $ftpCredentialsString = read_file($serverCredentialsFileName) or handleError("ERROR: Unable to read FTP credentials from credentials file: ".$serverCredentialsFileName);
-	my $ftpCredentials = decode_json($ftpCredentialsString) or handleError("ERROR: Unable to parse credentials from JSON in credentials file: ".$serverCredentialsFileName);#Obviously don't ever print the _contents_ of the credentials file to the screen...
+		#credentials stored separately so they aren't in plain text and checked in to the repo:
+		my $serverCredentialsFileName = $coordinatorPath."/MO_FTP_Cred.json";
+		my $ftpCredentialsString = read_file($serverCredentialsFileName) or handleError("ERROR: Unable to read FTP credentials from credentials file: ".$serverCredentialsFileName);
+		my $ftpCredentials = decode_json($ftpCredentialsString) or handleError("ERROR: Unable to parse credentials from JSON in credentials file: ".$serverCredentialsFileName);#Obviously don't ever print the _contents_ of the credentials file to the screen...
 
 		$ftpServerName = $ftpCredentials->{"server"};
 
-		#We handle the FTP being down, os we will keep retrying until it comes back up, but we will warn the MO if it is not up around the time the data is expected to be available
+		#We handle the FTP being down, or we will keep retrying until it comes back up, but we will warn the MO if it is not up around the time the data is expected to be available
 		my $ftp = Net::FTP->new($ftpServerName, Debug => 0) or handleDataNotAvailableServerDown($ftpServerName, $@);
 
 		$ftp->login($ftpCredentials->{"user"}, $ftpCredentials->{"pass"}) or handleError("Cannot login ", $ftp->message);#NOTE: This error would be their fault, but we need to communicate properly to fix it
@@ -313,8 +314,7 @@ foreach my $necessaryOutput (@necessaryOutputs) {
 		handleError("ERROR: output directory ".$todayOutputDir." unzipped from ".$todayOutputFileName." did not contain required file ".$necessaryOutput, \@maintainersAll);#Email the met office as well as the error is on their end - missing actual output files
 	}
 }
-
-my $plotPath = $projectPath."/Plotting/";
+my $plotPath = $todayFolderPath."/plotting/";
 
 #Bung all necessary outputs into folder named $todayString_0000 here in a nice structure
 my $localOutputFolderName = $todayString."_0000";
@@ -340,85 +340,61 @@ if($debugNoPlot) {
 	terminateRun();
 }
 
-chdir($plotPath) or handleError("ERROR: Unable to change to plotting directory ".$plotPath);
-
-system("export R_LIBS=/home/ewsmanager/R-packages-EWS-clustering/x86_64-pc-linux-gnu-library/3.5; /usr/local/R/bin/Rscript Submit_mass_Gilligan.R config/ds603/NAME_plotting.json --fastanimation --NAME; unset R_LIBS");#Note that these arguments are ordered and it will not work if they are the wrong way round... 
-
-#Plotting outputs in:
-my $plotImagePath = $plotPath."/animation_images/output/NAMEOUTPUT/".$todayString."0000/";
-
-#back to the destination for the files:
-chdir($todayFolderPath) or handleError("ERROR: Unable to change working directory to output folder path :".$todayFolderPath);
-
-mkdir($localOutputFolderName) or handleError("ERROR: Unable to create output folder path: ".$localOutputFolderName);
+# prepare for new plotting routine
+my @plottingCommands = get_dep_plotting_cmds();
 
-sub moveOutputsToResultFolder {
-	my $resultFolderName = shift;
-	my @outputFolders = @_;
+foreach my $plotCommand (@plottingCommands) {
 
-	unless(-d $resultFolderName) {
-		mkdir($resultFolderName) or handleError("ERROR: Unable to create output folder path: ".$resultFolderName);
-	}
+	# FALSE option so that hourly plots are not produced on first pass (to save time)
+	#TODO: Handle 3hourly images later if needed
+	my $plotOptions = $todayString." FALSE";
+	
+	# run the plot command
+	system($plotCommand.' '.$plotOptions);
 
-	foreach my $outputFolder (@outputFolders) {
-		dircopy($outputFolder, $resultFolderName) or handleError("ERROR: Unable to copy directory from ".$outputFolder." to ".$resultFolderName);
-	}
+	# check there is some output
+	unless(-d $plotPath) { handleError("ERROR: No plotting output produced") };
 }
 
-#Put all the outputs in a subfolder called "All" and put only the daily totals into a subfolder called "Summary"
-my @weeklyPlotOutputFolders = (
-	$plotImagePath."/deposition".$projectName."_Stem_total_normalized",
-	$plotImagePath."/deposition".$projectName."_Stripe_total_normalized",
-	$plotImagePath."/deposition".$projectName."_Stem_total",
-	$plotImagePath."/deposition".$projectName."_Stripe_total"
-);
-
-moveOutputsToResultFolder($localOutputFolderName."/Weekly", @weeklyPlotOutputFolders);
-
-my @dailyPlotOutputFolders = (
-	$plotImagePath."/deposition".$projectName."_Stem_daily_normalized",
-	$plotImagePath."/deposition".$projectName."_Stripe_daily_normalized",
-	$plotImagePath."/deposition".$projectName."_Stem_daily",
-	$plotImagePath."/deposition".$projectName."_Stripe_daily"
-);
-
-moveOutputsToResultFolder($localOutputFolderName."/Daily", @dailyPlotOutputFolders);
-
-my @hourlyPlotOutputFolders = (
-	$plotImagePath."/deposition".$projectName."_Stem_normalized",
-	$plotImagePath."/deposition".$projectName."_Stripe_normalized",
-	$plotImagePath."/deposition".$projectName."_Stem",
-	$plotImagePath."/deposition".$projectName."_Stripe"
-);
-
-moveOutputsToResultFolder($localOutputFolderName."/Hourly", @hourlyPlotOutputFolders);
+#Plotting outputs in:
+my @plotPaths = glob($plotPath."{bangladesh,nepal}/images/{Daily,Weekly}");
+#my @plotPaths = glob($plotPath."{bangladesh,nepal}/images/{Daily,Weekly,Hourly}");
 
+#Transfer the output to public server for others to be able to pull it down:
 unless($debugNoUpload) {
-	#Transfer the output to public server for others to be able to pull it down:
-	system("scp -i ".$coordinatorPath."/ssh_key_willow"." -r ".$localOutputFolderName." willow.csx.cam.ac.uk:/var/www/html/".$projectName."/");
+	
+	# command to make remote directory
+	my $willowDir1 = "/var/www/html/".$projectName."/".$localOutputFolderName;
+	my $mkdir_cmd = "ssh -i ".$coordinatorPath."/ssh_key_willow willow.csx.cam.ac.uk \"mkdir -p ".$willowDir1."\"";
+	print($mkdir_cmd."\n");
+	system($mkdir_cmd) and handleError("ERROR: Failed to create output directory on willow");
+
+	# command to copy to remote directory
+	foreach my $plotPathi (@plotPaths) {
+		my $scp_cmd = "scp -i ".$coordinatorPath."/ssh_key_willow -r ".$plotPathi." willow.csx.cam.ac.uk:".$willowDir1."/";
+		print($scp_cmd."\n");
+		system($scp_cmd) and handleError("ERROR: Failed to copy plotting output to willow");
+	}
 
 	# Also transfer to sftp directory for others to automatically pull it down
-	system("scp -i ".$coordinatorPath."/ssh_key_willow"." -r ".$localOutputFolderName." willow.csx.cam.ac.uk:/storage/sftp/ewsguest/from-cam/".$projectName."/");
-}
-
-#Gather parsed output csvs to be used by the EPI model:
-my $epiFolderName = $todayFolderPath."/EPI";
-unless(-d $epiFolderName) {
-	mkdir($epiFolderName) or handleError("ERROR: Unable to create EPI model folder path: ".$epiFolderName);
-}
-
-my $epiDepFolderName = $epiFolderName."/".$jobIDString;
-unless(-d $epiDepFolderName) {
-	mkdir($epiDepFolderName) or handleError("ERROR: Unable to create EPI folder for epi inputs: ".$epiDepFolderName);
+	my $willowDir2 = "/storage/sftp/ewsguest/from-cam/".$projectName."/".$localOutputFolderName;
+	$mkdir_cmd = "ssh -i ".$coordinatorPath."/ssh_key_willow willow.csx.cam.ac.uk \"mkdir -p ".$willowDir2."\"";
+	print($mkdir_cmd."\n");
+	system($mkdir_cmd) and handleError("ERROR: Failed to create output directory on willow");
+
+	# command to copy to remote directory
+	foreach my $plotPathi (@plotPaths) {
+		my $scp_cmd = "scp -i ".$coordinatorPath."/ssh_key_willow -r ".$plotPathi." willow.csx.cam.ac.uk:".$willowDir2."/";
+		print($scp_cmd."\n");
+		system($scp_cmd) and handleError("ERROR: Failed to copy plotting output to willow");
+	}
 }
 
-my $sourceFolder = $plotPath."/output/NAMEOUTPUT/".$todayString."0000/";
-my $destFolder = $epiDepFolderName;
-dircopy($sourceFolder, $destFolder) or handleError("ERROR: Unable to copy directory from ".$sourceFolder." to ".$destFolder);
+#No longer a need to gather parsed output csvs to be used by the EPI model, because EWS-plotting does this
+# look in $plotPath/plotting/*/input_csvs/
 
 #TODO: Bung todays workspace folder onto the RCS
 
-
 #Flag overall success of operation:
 open(my $successFH, ">", $doneFilePath) or handleError("ERROR: Unable to open confirmation file for writing: ".$doneFilePath);
 print $successFH "Completed: ".getTimestampNow()."\n";
diff --git a/ENVDataProcessor.pl b/ENVDataProcessor.pl
index e8087bc7228022dd71e12cc1134d8594deb23e25..275a9db7933bfb18d545c9ff5d41c5c21afb8f60 100755
--- a/ENVDataProcessor.pl
+++ b/ENVDataProcessor.pl
@@ -23,8 +23,8 @@ my $debugTimeString = getTimestampNow();
 my $debugOutput = 0;
 
 my $debugNoFTPDownload = 0;
-my $debugNoUpload = 1;
-my $debugNoPlot = 1;
+my $debugNoUpload = 0;
+my $debugNoPlot = 0;
 
 # read in project configuration from input argument
 my $configFilePath = shift;
@@ -243,6 +243,7 @@ unless($debugNoFTPDownload) {
 	if ($downloadFromWillow) {
 		# get from willow sftp
 
+		# TODO: make a file check and wait 20s before downloading, in case scp is called before file is completely available
 		# If file is not there, script will not die, instead it prints warning to logfile
 		my $SCPCommand = "scp -i ".$coordinatorPath."/ssh_key_willow willow.csx.cam.ac.uk:/storage/sftp/metofficeupload/upload/".$projectName."/fromMO/daily_name/".$todayOutputFileName." ".$todayFolderPath."/";
 		
@@ -316,7 +317,7 @@ foreach my $necessaryOutput (@necessaryOutputs) {
 	}
 }
 
-my $plotPath = $projectPath."/Plotting/";
+my $plotPath = $todayFolderPath."/plotting/";
 
 if($debugNoPlot) {
 	#handleError("No plotting taking place", \@maintainersCam, $severityStringWARNING);
@@ -338,120 +339,68 @@ if($debugNoPlot) {
 	terminateRun();
 }
 
-#Move data to plotting inputs area:
-system("cp -r ".$todayOutputDir."/StripeRustOutput ".$plotPath."/output/");
-system("cp -r ".$todayOutputDir."/WheatStemRustOutput ".$plotPath."/output/");
+# prepare for new plotting routine
+my @plottingCommands = get_env_plotting_cmds();
 
+foreach my $plotCommand (@plottingCommands) {
 
-#Plotting:
-chdir($plotPath) or handleError("ERROR: Unable to change to plotting directory ".$plotPath);
-
-system("export R_LIBS=/home/ewsmanager/R-packages-EWS-clustering/x86_64-pc-linux-gnu-library/3.5; /usr/local/R/bin/Rscript Submit_mass_Gilligan.R config/ca500/StripeRustOutputs.json --fastanimation; unset R_LIBS");#Note that these arguments are ordered and it will not work if they are the wrong way round... 
-
-system("export R_LIBS=/home/ewsmanager/R-packages-EWS-clustering/x86_64-pc-linux-gnu-library/3.5; /usr/local/R/bin/Rscript Submit_mass_Gilligan.R config/ca500/StripeRustDrivers.json --fastanimation; unset R_LIBS");#Note that these arguments are ordered and it will not work if they are the wrong way round... 
-
-system("export R_LIBS=/home/ewsmanager/R-packages-EWS-clustering/x86_64-pc-linux-gnu-library/3.5; /usr/local/R/bin/Rscript Submit_mass_Gilligan.R config/ca500/StemRust.json --fastanimation; unset R_LIBS");#Note that these arguments are ordered and it will not work if they are the wrong way round... 
-
-
-#back to the destination for the files:
-chdir($todayFolderPath) or handleError("ERROR: Unable to change working directory to output folder path :".$todayFolderPath);
-
-#ENV outputs:
-my $PublishServerPath = "willow.csx.cam.ac.uk:/var/www/html/".$projectName."/";
-
-my $localOutputFolderName = $todayString."_0000";
-
-mkdir($localOutputFolderName) or handleError("ERROR: Unable to create output folder path: ".$localOutputFolderName);
-
-sub moveOutputFilesToResultFolder {
-	my $resultFolderName = shift;
-	my @outputFileGlobs = @_;
-
-	unless(-d $resultFolderName) {
-		make_path($resultFolderName) or handleError("ERROR: Unable to create output folder path: ".$resultFolderName);
-	}
-	#TODO: Should count as error if there are no files matching the glob - i.e. the script has produced no output
-	foreach my $outputFileGlob (@outputFileGlobs) {
+	# FALSE option so that hourly plots are not produced on first pass (to save time)
+	#TODO: Handle 3hourly images later if needed
+	my $plotOptions = $todayString." FALSE";
+	
+	# run the plot command
+	system($plotCommand.' '.$plotOptions);
 
-		my @globbedFiles = glob($outputFileGlob);
-		foreach my $globbedFile (@globbedFiles) {
-			fcopy($globbedFile, $resultFolderName) or handleError("ERROR: Unable to copy file ".$globbedFile." to ".$resultFolderName);
-		}
+	# check there is some output
+	unless(-d $plotPath) {
+		handleError("ERROR: No plotting output produced");
 	}
 }
 
+#Plotting outputs in:
+my @plotPaths = glob($plotPath."{bangladesh,nepal}/images/{Daily,Weekly}");
+#my @plotPaths = glob($plotPath."{bangladesh,nepal}/images/{Daily,Weekly,Hourly}");
 
-#Stripe rust:
-my $stripePlotsPath = $plotPath."/animation_images/output/StripeRustOutput/All_parts/".$todayString."0000/";
-
-#Images:
-moveOutputFilesToResultFolder($localOutputFolderName."/Hourly", $stripePlotsPath."RIE_value/*");
-
-moveOutputFilesToResultFolder($localOutputFolderName."/Daily", $stripePlotsPath."RIE_value_daily/*");
-
-moveOutputFilesToResultFolder($localOutputFolderName."/Weekly", $stripePlotsPath."RIE_value_total/*");
-
-
-
-
-#Raw data:
-#TODO: Confirm subset
-
-#EPI:
-# #Gather parsed output csvs to be used by the EPI model:
-my $epiFolderName = $todayFolderPath."/EPI";
-unless(-d $epiFolderName) {
-	mkdir($epiFolderName) or handleError("ERROR: Unable to create EPI model folder path: ".$epiFolderName);
-}
-
-my $epiTodayFolderName = $epiFolderName."/".$jobIDString;
-unless(-d $epiTodayFolderName) {
-	mkdir($epiTodayFolderName) or handleError("ERROR: Unable to create EPI folder for epi inputs: ".$epiTodayFolderName);
-}
-
-my $epiStripeFolderName = $epiTodayFolderName."/Stripe/";
-unless(-d $epiStripeFolderName) {
-	mkdir($epiStripeFolderName) or handleError("ERROR: Unable to create EPI folder for epi inputs: ".$epiStripeFolderName);
-}
-
-my $sourceFolderStripe = $plotPath."/output/StripeRustOutput/All_parts/".$todayString."0000/";
-my $destFolderStripe = $epiStripeFolderName;
-dircopy($sourceFolderStripe, $destFolderStripe) or handleError("ERROR: Unable to copy directory from ".$sourceFolderStripe." to ".$destFolderStripe);
-
-
-#Stem rust:
-my $stemPlotsPath = $plotPath."/animation_images/output/WheatStemRustOutput/".$todayString."0000/";
-
-#Images:
-moveOutputFilesToResultFolder($localOutputFolderName."/Hourly", $stemPlotsPath."stem_rust_stage_4/*");
-
-moveOutputFilesToResultFolder($localOutputFolderName."/Daily", $stemPlotsPath."stem_rust_stage_4_daily/*");
-
-moveOutputFilesToResultFolder($localOutputFolderName."/Weekly", $stemPlotsPath."stem_rust_stage_4_total/*");
-
+#ENV outputs:
+my $localOutputFolderName = $todayString."_0000";
 
 #Raw data:
 #TODO: Confirm subset
 
+#Transfer the output to public server for others to be able to pull it down:
 unless($debugNoUpload) {
-	#Publish ENV plots:
-	system("scp -i ".$coordinatorPath."/ssh_key_willow"." -r ".$localOutputFolderName." ".$PublishServerPath);
+	
+	# command to make remote directory
+	my $willowDir1 = "/var/www/html/".$projectName."/".$localOutputFolderName;
+	my $mkdir_cmd = "ssh -i ".$coordinatorPath."/ssh_key_willow willow.csx.cam.ac.uk \"mkdir -p ".$willowDir1."\"";
+	print($mkdir_cmd);
+	system($mkdir_cmd) and handleError("ERROR: Failed to create output directory on willow");
+
+	# command to copy to remote directory
+	foreach my $plotPathi (@plotPaths) {
+		my $scp_cmd = "scp -i ".$coordinatorPath."/ssh_key_willow -r ".$plotPathi." willow.csx.cam.ac.uk:".$willowDir1."/";
+		print($scp_cmd."\n");
+		system($scp_cmd) and handleError("ERROR: Failed to copy plotting output to willow");
+	}
 
 	# Also transfer to sftp directory for others to automatically pull it down
-	system("scp -i ".$coordinatorPath."/ssh_key_willow"." -r ".$localOutputFolderName." willow.csx.cam.ac.uk:/storage/sftp/ewsguest/from-cam/".$projectName."/");
-}
-#EPI:
-my $epiStemFolderName = $epiTodayFolderName."/Stem/";
-unless(-d $epiStemFolderName) {
-	mkdir($epiStemFolderName) or handleError("ERROR: Unable to create EPI folder for epi inputs: ".$epiStemFolderName);
+	my $willowDir2 = "/storage/sftp/ewsguest/from-cam/".$projectName."/".$localOutputFolderName;
+	$mkdir_cmd = "ssh -i ".$coordinatorPath."/ssh_key_willow willow.csx.cam.ac.uk \"mkdir -p ".$willowDir2."\"";
+	print($mkdir_cmd);
+	system($mkdir_cmd) and handleError("ERROR: Failed to create output directory on willow");
+
+	# command to copy to remote directory
+	foreach my $plotPathi (@plotPaths) {
+		my $scp_cmd = "scp -i ".$coordinatorPath."/ssh_key_willow -r ".$plotPathi." willow.csx.cam.ac.uk:".$willowDir2."/";
+		print($scp_cmd."\n");
+		system($scp_cmd) and handleError("ERROR: Failed to copy plotting output to willow");
+	}
 }
 
-my $sourceFolderStem = $plotPath."/output/WheatStemRustOutput/".$todayString."0000/";
-my $destFolderStem = $epiStemFolderName;
-dircopy($sourceFolderStem, $destFolderStem) or handleError("ERROR: Unable to copy directory from ".$sourceFolderStem." to ".$destFolderStem);
-
 #TODO: Bung todays workspace folder onto the RCS
 
+#No longer a need to gather parsed output csvs to be used by the EPI model, because EWS-plotting does this
+# look in $plotPath/plotting/*/input_csvs/
 
 #Flag overall success of operation:
 open(my $successFH, ">", $doneFilePath) or handleError("ERROR: Unable to open confirmation file for writing: ".$doneFilePath);
diff --git a/ProjectConfig_SouthAsia.pl b/ProjectConfig_SouthAsia.pl
index 1fd9a72db5cb5897e7941e3009b1127af213642c..58be8c616eb9a96934c8f559cc797d3d6cde715f 100644
--- a/ProjectConfig_SouthAsia.pl
+++ b/ProjectConfig_SouthAsia.pl
@@ -25,7 +25,16 @@ sub get_NAME_directory_prefix { return "WR_NAME_SouthAsia_" };
 sub get_NAME_file_prefixes { return ("deposition_srcs_allregions_") };
 sub get_expected_available_hour { return 8 };
 sub get_expected_available_minute { return 0 };
+sub get_dep_plotting_cmds { return (
+        "/storage/app/EWS/General/EWS-Plotting/python/nepal/run_nepal_depo_plotting_pine.sh",
+        "/storage/app/EWS/General/EWS-Plotting/python/bangladesh/run_bang_depo_plotting_pine.sh") };
 
 # ENV processing
 sub get_ENV_directory_prefix { return "WR_EnvSuit_SouthAsia_" };
+sub get_env_plotting_cmds { return (
+        "/storage/app/EWS/General/EWS-Plotting/python/nepal/run_nepal_env_plotting_pine.sh",
+        "/storage/app/EWS/General/EWS-Plotting/python/bangladesh/run_bang_env_plotting_pine.sh") };
+
+# visualisation
+
 1;