Index: /issm/trunk/src/m/classes/public/geography.m
===================================================================
--- /issm/trunk/src/m/classes/public/geography.m	(revision 2967)
+++ /issm/trunk/src/m/classes/public/geography.m	(revision 2968)
@@ -19,11 +19,4 @@
 	error('geography error message');
 end
-if ((~ischar(iceshelfname)) | (~ischar(icesheetname))  )
-	help geography
-	error('geography error message');
-end
-if strcmpi(icesheetname,'all'),
-	error('geography error message: islands can not be everywhere, to set an icesheet, use geography(md,'','')');
-end
 
 if md.counter>=2,
@@ -39,37 +32,15 @@
 elements=md.elements;
 
-%Fist recover arrays of ice shelf grids and elements, and ice sheet grids and elements.
-invert=0;
-if strcmp(iceshelfname,''), %no iceshelf contour file, we are dealing with a pure ice sheet.
-	gridoniceshelf=zeros(md.numberofgrids,1);
-	elementoniceshelf=zeros(md.numberofelements,1);
-elseif strcmp(iceshelfname,'all'), %we are dealing with a pure ice shelf.
-	gridoniceshelf=ones(md.numberofgrids,1);
-	elementoniceshelf=ones(md.numberofelements,1);
-else
-	if strcmpi(iceshelfname(1),'~'),
-		iceshelfname=iceshelfname(2:length(iceshelfname));
-		invert=1;
-	end
-	[gridoniceshelf,elementoniceshelf]=ContourToMesh(elements,x,y,expread(iceshelfname,1),'element and node',2);
-end
-if invert,
-	gridoniceshelf=1-gridoniceshelf;
-	elementoniceshelf=1-elementoniceshelf;
-end
-
-if strcmp(icesheetname,''), %no icesheet contour file, we are dealing with a pure ice shelf.
-	gridonicesheet=zeros(md.numberofgrids,1);
-	elementonicesheet=zeros(md.numberofelements,1);
-else
-	[gridonicesheet,elementonicesheet]=ContourToMesh(elements,x,y,expread(icesheetname,1),'element and node',2);
-end
+elementoniceshelf=FlagElements(md,iceshelfname);
+elementonicesheet=FlagElements(md,icesheetname);
 
 %Because icesheet grids and elements can be included into an iceshelf, we need to update. Remember, all the previous 
 %arrays come from domain outlines that can intersect one another: 
-gridoniceshelf=double((gridoniceshelf & ~gridonicesheet));
+gridoniceshelf=zeros(md.numberofgrids,1);
+gridonicesheet=zeros(md.numberofgrids,1);
 elementoniceshelf=double((elementoniceshelf & ~elementonicesheet));
-gridonicesheet=double(~gridoniceshelf);
 elementonicesheet=double(~elementoniceshelf);
+gridoniceshelf(md.elements(find(elementoniceshelf),:))=1;
+gridonicesheet(md.elements(find(elementonicesheet),:))=1;
 
 %Return: 
Index: /issm/trunk/src/m/classes/public/recover_areas.m
===================================================================
--- /issm/trunk/src/m/classes/public/recover_areas.m	(revision 2967)
+++ /issm/trunk/src/m/classes/public/recover_areas.m	(revision 2968)
@@ -12,9 +12,9 @@
 
 	%recover elements distribution
-	hutterflag  =BuildFlag(md,getfieldvalue(options,'hutter',''));
-	macayealflag=BuildFlag(md,getfieldvalue(options,'macayeal',''));
-	pattynflag  =BuildFlag(md,getfieldvalue(options,'pattyn',''));
-	stokesflag  =BuildFlag(md,getfieldvalue(options,'stokes',''));
-	hutterflag  =BuildFlag(md,getfieldvalue(options,'hutter',''));
+	hutterflag  =FlagElements(md,getfieldvalue(options,'hutter',''));
+	macayealflag=FlagElements(md,getfieldvalue(options,'macayeal',''));
+	pattynflag  =FlagElements(md,getfieldvalue(options,'pattyn',''));
+	stokesflag  =FlagElements(md,getfieldvalue(options,'stokes',''));
+	hutterflag  =FlagElements(md,getfieldvalue(options,'hutter',''));
 	filltype    =getfieldvalue(options,'fill','none');
 
@@ -22,34 +22,2 @@
 
 
-function flag=BuildFlag(md,area),
-	if ischar(area),
-		if isempty(area),
-			flag=zeros(md.numberofelements,1);
-			invert=0;
-		elseif strcmpi(area,'all')
-			flag=ones(md.numberofelements,1);
-			invert=0;
-		else
-			%make sure that we actually don't want the elements outside the domain outline!
-			if strcmpi(area(1),'~'),
-				area=area(2:length(area));
-				invert=1;
-			else
-				invert=0;
-			end
-			%ok, flag elements
-			flag=ContourToMesh(md.elements(:,1:3),md.x,md.y,expread(area,1),'element',1);
-		end
-		if invert,
-			flag=~flag;
-		end
-	elseif isfloat(area),
-		if size(area,1)~=md.numberofelements,
-			setelementstypeusage();
-			error('Flags for elements_type must be of same size as number of elements in model');
-		end
-		flag=area;
-	else
-		error('Invalide elements_type option');
-	end
-end
