Index: /issm/trunk-jpl/src/m/classes/clusters/acenet.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/acenet.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/acenet.m	(revision 19328)
@@ -118,5 +118,5 @@
 		 end
 		 %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 %compress the files into one zip.
@@ -129,4 +129,7 @@
 			 disp('uploading input file and queueing script');
 			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+
+		 end %}}}
+		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 disp('launching solution sequence on remote cluster');
Index: /issm/trunk-jpl/src/m/classes/clusters/castor.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/castor.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/castor.m	(revision 19328)
@@ -70,5 +70,5 @@
 		 end
 		 %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 %compress the files into one zip.
@@ -84,4 +84,7 @@
 			 disp('uploading input file and queueing script');
 			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+
+		 end %}}}
+		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 disp('launching solution sequence on remote cluster');
Index: /issm/trunk-jpl/src/m/classes/clusters/cloud.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/cloud.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/cloud.m	(revision 19328)
@@ -65,5 +65,5 @@
 		end
 		%}}}
-		function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			%compress the files into one zip.
@@ -79,4 +79,7 @@
 			disp('uploading input file and queueing script');
 			issmstscpout(cluster.name,cluster.executionpath,cluster.login,{[dirname '.tar.gz']});
+
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			if cluster.interactive, 
Index: /issm/trunk-jpl/src/m/classes/clusters/cosmos.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/cosmos.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/cosmos.m	(revision 19328)
@@ -70,5 +70,5 @@
 		 end
 		 %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 %compress the files into one zip.
@@ -84,4 +84,7 @@
 			 disp('uploading input file and queueing script');
 			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+
+		 end %}}}
+		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 disp('launching solution sequence on remote cluster');
Index: /issm/trunk-jpl/src/m/classes/clusters/discover.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/discover.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/discover.m	(revision 19328)
@@ -136,5 +136,5 @@
 			 end
 		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 %compress the files into one zip.
@@ -161,5 +161,8 @@
 			 end
 
-			 %lauch command, to be executed via ssh
+		 end
+		 %}}}
+		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+
 			 if ~cluster.interactive, 
 				 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
Index: /issm/trunk-jpl/src/m/classes/clusters/gemini.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/gemini.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/gemini.m	(revision 19328)
@@ -71,5 +71,5 @@
 		 end
 		 %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 %compress the files into one zip.
@@ -85,4 +85,7 @@
 			 disp('uploading input file and queueing script');
 			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+
+		 end %}}}
+		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 disp('launching solution sequence on remote cluster');
Index: /issm/trunk-jpl/src/m/classes/clusters/generic.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic.m	(revision 19328)
@@ -208,14 +208,7 @@
 		end
 		%}}}
-		function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			if ~ispc,
-
-				%figure out what shell extension we will use:
-				if isempty(strfind(cluster.shell,'csh')),
-					shellext='sh';
-				else
-					shellext='csh';
-				end
 
 				%compress the files into one zip.
@@ -231,4 +224,16 @@
 				if cluster.verbose, disp('uploading input file and queueing script'); end
 				issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+			end
+		end %}}}
+		function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+
+			if ~ispc,
+
+				%figure out what shell extension we will use:
+				if isempty(strfind(cluster.shell,'csh')),
+					shellext='sh';
+				else
+					shellext='csh';
+				end
 
 				if cluster.verbose, disp('launching solution sequence on remote cluster'); end
Index: /issm/trunk-jpl/src/m/classes/clusters/generic.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic.py	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic.py	(revision 19328)
@@ -162,5 +162,5 @@
 			fid.close()
 	# }}}
-	def LaunchQueueJob(self,modelname,dirname,filelist):    # {{{
+	def UploadQueueJob(self,modelname,dirname,filelist):    # {{{
 
 		#compress the files into one zip.
@@ -174,4 +174,7 @@
 		print 'uploading input file and queueing script'
 		issmscpout(self.name,self.executionpath,self.login,self.port,[dirname+'.tar.gz'])
+
+	# }}}
+	def LaunchQueueJob(self,modelname,dirname,filelist):    # {{{
 
 		print 'launching solution sequence on remote cluster'
Index: /issm/trunk-jpl/src/m/classes/clusters/generic_static.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/generic_static.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/generic_static.m	(revision 19328)
@@ -62,4 +62,8 @@
 		end
 		%}}}
+		function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+
+			%do nothing
+		end %}}}
 		function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
 
Index: /issm/trunk-jpl/src/m/classes/clusters/greenplanet.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/greenplanet.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/greenplanet.m	(revision 19328)
@@ -141,5 +141,5 @@
 			 end
 		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 %compress the files into one zip.
@@ -155,4 +155,7 @@
 			 disp('uploading input file and queueing script');
 			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+
+		 end %}}}
+		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 disp('launching solution sequence on remote cluster');
Index: /issm/trunk-jpl/src/m/classes/clusters/hpc.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/hpc.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/hpc.m	(revision 19328)
@@ -132,5 +132,5 @@
 			 end
 		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 %compress the files into one zip.
@@ -146,4 +146,7 @@
 			 disp('uploading input file and queueing script');
 			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
+
+		 end %}}}
+		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 disp('launching solution sequence on remote cluster');
Index: /issm/trunk-jpl/src/m/classes/clusters/pfe.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/pfe.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/pfe.m	(revision 19328)
@@ -242,5 +242,5 @@
 
 		 end %}}}
-		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
 
 			 %compress the files into one zip.
@@ -267,4 +267,8 @@
 			 end
 
+		 end
+		 %}}}
+		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
+
 			 %lauch command, to be executed via ssh
 			 if ~cluster.interactive, 
Index: /issm/trunk-jpl/src/m/classes/clusters/pfe.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/pfe.py	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/pfe.py	(revision 19328)
@@ -156,6 +156,6 @@
 
 	# }}}
-	def LaunchQueueJob(self,modelname,dirname,filelist):
-		# {{{
+	def UploadhQueueJob(self,modelname,dirname,filelist):
+			# {{{
 
 		#compress the files into one zip.
@@ -167,4 +167,8 @@
 		print 'uploading input file and queueing script'
 		issmscpout(self.name,self.executionpath,self.login,self.port,[dirname+'.tar.gz'])
+
+		# }}}
+	def LaunchQueueJob(self,modelname,dirname,filelist):
+			# {{{
 
 		print 'launching solution sequence on remote cluster'
Index: /issm/trunk-jpl/src/m/classes/clusters/pollux.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/clusters/pollux.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/classes/clusters/pollux.m	(revision 19328)
@@ -72,4 +72,11 @@
 		 function LaunchQueueJob(cluster,modelname,dirname,filelist)% {{{
 
+			 disp('launching solution sequence on remote cluster');
+			 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
+				 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && qsub ' modelname '.queue '];
+			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
+		 end %}}}
+		 function UploadQueueJob(cluster,modelname,dirname,filelist)% {{{
+
 			 %compress the files into one zip.
 			 compressstring=['tar -zcf ' dirname '.tar.gz '];
@@ -82,11 +89,4 @@
 			 system(compressstring);
 
-			 disp('uploading input file and queueing script');
-			 issmscpout(cluster.name,cluster.executionpath,cluster.login,cluster.port,{[dirname '.tar.gz']});
-
-			 disp('launching solution sequence on remote cluster');
-			 launchcommand=['cd ' cluster.executionpath ' && rm -rf ./' dirname ' && mkdir ' dirname ...
-				 ' && cd ' dirname ' && mv ../' dirname '.tar.gz ./ && tar -zxf ' dirname '.tar.gz  && qsub ' modelname '.queue '];
-			 issmssh(cluster.name,cluster.login,cluster.port,launchcommand);
 		 end %}}}
 		 function Download(cluster,dirname,filelist)% {{{
Index: /issm/trunk-jpl/src/m/enum/SettingsRecordingFrequencyEnum.m
===================================================================
--- /issm/trunk-jpl/src/m/enum/SettingsRecordingFrequencyEnum.m	(revision 19328)
+++ /issm/trunk-jpl/src/m/enum/SettingsRecordingFrequencyEnum.m	(revision 19328)
@@ -0,0 +1,11 @@
+function macro=SettingsRecordingFrequencyEnum()
+%SETTINGSRECORDINGFREQUENCYENUM - Enum of SettingsRecordingFrequency
+%
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/shared/Enum/Synchronize.sh
+%            Please read src/c/shared/Enum/README for more information
+%
+%   Usage:
+%      macro=SettingsRecordingFrequencyEnum()
+
+macro=StringToEnum('SettingsRecordingFrequency');
Index: /issm/trunk-jpl/src/m/solve/solve.m
===================================================================
--- /issm/trunk-jpl/src/m/solve/solve.m	(revision 19327)
+++ /issm/trunk-jpl/src/m/solve/solve.m	(revision 19328)
@@ -22,4 +22,5 @@
 %      - runtimename : true or false (default is true), makes name unique
 %      - checkconsistency : 'yes' or 'no' (default is 'yes'), ensures checks on consistency of model
+%      - restart: 'directory name (relative to the execution directory) where the restart file is located.
 %
 %   Examples:
@@ -59,4 +60,10 @@
 else
 	md.private.runtimename=md.miscellaneous.name;
+end
+
+%If we are restarting, actually use the provided runtime name: 
+restart=getfieldvalue(options,'restart',''); 
+if ~isempty(restart),
+	md.private.runtimename=restart;
 end
 
@@ -99,16 +106,21 @@
 end
 
-%Launch job
-modelname = md.miscellaneous.name;
-filelist  = {[modelname '.bin '] [modelname '.toolkits ']};
-if ispc,
-	filelist{end+1}=[modelname '.bat '];
-else
-	filelist{end+1}=[modelname '.queue '];
+%Upload all required files
+if isempty(restart),
+	modelname = md.miscellaneous.name;
+	filelist  = {[modelname '.bin '] [modelname '.toolkits ']};
+	if ispc,
+		filelist{end+1}=[modelname '.bat '];
+	else
+		filelist{end+1}=[modelname '.queue '];
+	end
+
+	if md.qmu.isdakota,
+		filelist{end+1} = [modelname '.qmu.in'];
+	end
+	UploadQueueJob(cluster,md.miscellaneous.name,md.private.runtimename,filelist);
 end
 
-if md.qmu.isdakota,
-	filelist{end+1} = [modelname '.qmu.in'];
-end
+%launch queue job: 
 LaunchQueueJob(cluster,md.miscellaneous.name,md.private.runtimename,filelist);
 
Index: /issm/trunk-jpl/src/m/solve/solve.py
===================================================================
--- /issm/trunk-jpl/src/m/solve/solve.py	(revision 19327)
+++ /issm/trunk-jpl/src/m/solve/solve.py	(revision 19328)
@@ -34,4 +34,5 @@
 	      - loadonly : does not solve. only load results
 		  - checkconsistency : 'yes' or 'no' (default is 'yes'), ensures checks on consistency of model
+		  - restart: 'directory name (relative to the execution directory) where the restart file is located.
  
 	   Examples:
@@ -65,5 +66,10 @@
 		md.private.runtimename="%s-%02i-%02i-%04i-%02i-%02i-%02i-%i" % (md.miscellaneous.name,c.month,c.day,c.year,c.hour,c.minute,c.second,os.getpid())
 	else:
-		md.private.runtimename=md.miscellaneous.name
+		md.private.runtimename=md.miscellaneous.name 
+	
+	#If we are restarting, actually use the provided runtime name:
+	restart=options.getfieldvalue('restart','')
+	if restart:
+		md.private.runtimename=restart
 		
 	#if running qmu analysis, some preprocessing of dakota files using models
@@ -83,4 +89,5 @@
 		return md
 
+
 	#Write all input files
 	marshall(md)                                           # bin file
@@ -94,9 +101,13 @@
 		return md
 
+	#Upload all required files: 
+	if not restart:
+		modelname = md.miscellaneous.name
+		filelist  = [modelname+'.bin ',modelname+'.toolkits ',modelname+'.queue ']
+		if md.qmu.isdakota:
+			filelist.append(modelname+'.qmu.in')
+		cluster.UploadQueueJob(md.miscellaneous.name,md.private.runtimename,filelist)
+	
 	#Launch job
-	modelname = md.miscellaneous.name
-	filelist  = [modelname+'.bin ',modelname+'.toolkits ',modelname+'.queue ']
-	if md.qmu.isdakota:
-		filelist.append(modelname+'.qmu.in')
 	cluster.LaunchQueueJob(md.miscellaneous.name,md.private.runtimename,filelist)
 
