Index: /issm/trunk-jpl/src/m/classes/flaim.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/flaim.m	(revision 11179)
+++ /issm/trunk-jpl/src/m/classes/flaim.m	(revision 11180)
@@ -15,4 +15,8 @@
 		solution           = modelfield('default','','marshall',false);
 		quality            = modelfield('default',0,'marshall',false);
+		path_optimize      = modelfield('default',false,'marshall',false);
+		opt_ndir           = modelfield('default',1,'marshall',false);
+		opt_dist           = modelfield('default',25,'marshall',false);
+		opt_niter          = modelfield('default',30000,'marshall',false);
 	end
 	methods
@@ -60,8 +64,8 @@
 
 			disp(sprintf('\n      Input:'));
-			fielddisplay(obj,'targets'            ,'name of kml targets file');
-			fielddisplay(obj,'tracks'             ,'name of kml tracks file');
-			fielddisplay(obj,'flightreqs'         ,'structure of kml flight requirements');
-			fielddisplay(obj,'criterion'          ,'element or nodal criterion for flight path evaluation');
+			fielddisplay(obj,'targets'            ,'name of kml output targets file ');
+			fielddisplay(obj,'tracks'             ,'name of kml input tracks file ');
+			fielddisplay(obj,'flightreqs'         ,'structure of kml flight requirements (not used yet)');
+			fielddisplay(obj,'criterion'          ,'element or nodal criterion for flight path evaluation (metric)');
 
 			disp(sprintf('\n      Arguments:'));
@@ -69,4 +73,13 @@
 			fielddisplay(obj,'usevalueordering'   ,'flag to consider target values for flight path evaluation');
 			fielddisplay(obj,'split_antimeridian' ,'flag to split polygons on the antimeridian');
+			
+			disp(sprintf('\n      Optimization:'));
+			fielddisplay(obj,'path_optimize'     ,'optimize? (default false)');
+			fielddisplay(obj,'opt_ndir'     ,{'number of directions to test when moving a point.  If this value = 1, a random direction is tested.',...
+											  'A value > 1 results in directions equally spaced from [0, 2*PI] being tested.',...
+											  'For example, 4 would result in directions [0, PI/2, PI, 3PI/2].'});
+			fielddisplay(obj,'opt_dist'     ,'specifies the distance in km (default 25) to move a randomly selected path point on each iteration');
+			fielddisplay(obj,'opt_niter'     ,{'number of iterations (default 30,000) to run for flightplan optimization',...
+											   'i.e. the number of times to randomly select a point and move it.'});
 
 			disp(sprintf('\n      Output:'));
Index: /issm/trunk-jpl/src/m/model/display/fielddisplay.m
===================================================================
--- /issm/trunk-jpl/src/m/model/display/fielddisplay.m	(revision 11179)
+++ /issm/trunk-jpl/src/m/model/display/fielddisplay.m	(revision 11180)
@@ -13,5 +13,5 @@
 end %function
 
-function parsedisplay(offset,name,field,comment);
+function parsedisplay(offset,name,field,comment); %{{{
 
 	%string
@@ -73,5 +73,5 @@
 
 	end
-end
+end%}}}
 
 function struct_display(structure,offset) % {{{
@@ -141,5 +141,14 @@
 		disp(sprintf('%s%-23s: %-15s',offset,name,characterization));
 	else
-		disp(sprintf('%s%-23s: %-15s -- %s',offset,name,characterization,comment));
+		if ischar(comment),
+			disp(sprintf('%s%-23s: %-15s -- %s',offset,name,characterization,comment));
+		elseif iscell(comment),
+			disp(sprintf('%s%-23s: %-15s -- %s',offset,name,characterization,comment{1}));
+			for i=2:length(comment),
+				disp(sprintf('%s%-23s  %-15s    %s',offset,'','',comment{i}));
+			end
+		else
+			error('fielddisplay error message: format for comment not supportet yet');
+		end
 	end
 end% }}}
Index: /issm/trunk-jpl/src/m/solutions/flaim_sol.m
===================================================================
--- /issm/trunk-jpl/src/m/solutions/flaim_sol.m	(revision 11179)
+++ /issm/trunk-jpl/src/m/solutions/flaim_sol.m	(revision 11180)
@@ -108,5 +108,9 @@
 FLAIM_DIR=flaimdir();
 %system([FLAIM_DIR '/clasp/swathModule/models/issm/issm.exe -kml ' fm_tracks ' -kml ' fm_targets ' -gridsatequator 200000 -opt 1 -hst 2017-276T02:57:00 -hdur 4d -sparsepoints -usevalueordering -split-antimeridian >& ' filelog]);
+%$(MODELDIR)$(PATHSEP)$(MODELEXEC) -kml kml_inputs$(PATHSEP)$(KMLNAME) -gridsatequator 200000 \
+%		-opt 1 -hst 2017-276T02:57:00 -hdur 4d -sparsepoints -usevalueordering \
+%		-split-antimeridian -pathoptimize 1 25km 30000
 flaim_cmd=[FLAIM_DIR '/clasp/swathModule/models/issm/issm.exe -kml ' fm_tracks ' -kml ' fm_targets ' -gridsatequator ' int2str(md.flaim.gridsatequator) ' -opt 1 -hst 2017-276T02:57:00 -hdur 4d -sparsepoints'];
+
 if (md.flaim.usevalueordering)
 	flaim_cmd=[flaim_cmd ' -usevalueordering'];
@@ -115,4 +119,8 @@
 	flaim_cmd=[flaim_cmd ' -split-antimeridian'];
 end
+if (md.flaim.path_optimize)
+	flaim_cmd=[flaim_cmd ' -pathoptimize ' num2str(md.flaim.opt_ndir) ' ' num2str(md.flaim.opt_dist) 'km ' num2str(md.flaim.opt_niter)];
+end
+
 flaim_cmd=[flaim_cmd ' >& ' filelog];
 system(flaim_cmd);
@@ -137,7 +145,8 @@
 if exist(filelog,'file')
 	[status,fline]=system(['grep -i quality ' filelog]);
+
 	if ~isempty(fline)
 		strings=textscan(fline,'%s','delimiter',' =,','MultipleDelimsAsOne',1);
-		md.results.FlaimSolution.quality =sscanf(strings{1}{2},'%f');
+		md.results.FlaimSolution.quality =sscanf(strings{1}{end},'%f');
 	else
 		warning('Could not find ''quality'' in the ''%s/%s'' flaim log file.',options.fmdir,filelog);
Index: /issm/trunk-jpl/src/m/utils/Shell/flaimdir.m
===================================================================
--- /issm/trunk-jpl/src/m/utils/Shell/flaimdir.m	(revision 11179)
+++ /issm/trunk-jpl/src/m/utils/Shell/flaimdir.m	(revision 11180)
@@ -5,3 +5,3 @@
 %      FLAIM_DIR=flaimdir()
 
-FLAIM_DIR=[issmdir '/trunk/externalpackages/flaim/install'];
+FLAIM_DIR=[issmtier '/externalpackages/flaim/install'];
