Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 23671)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 23672)
@@ -1427,5 +1427,4 @@
 		int         numiceverts;
 		IssmDouble  s[2],x[2],y[2];
-		int        *indices = NULL;
 		this->GetLevelsetIntersection(&indices, &numiceverts,&s[0],MaskIceLevelsetEnum,0.);
 		_assert_(numiceverts); 
@@ -1466,32 +1465,34 @@
 		x1=x[0]; y1=y[0]; x2=x[1]; y2=y[1];
 		distance=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
+		
+		int numthk=numiceverts+2;
+		H=xNew<IssmDouble>(numthk);
+		for(int iv=0;iv<NUMVERTICES;iv++) Haux[iv]=-bed[indices[iv]]; //sort bed in ice/noice
+
+		switch(numiceverts){
+			case 1: // average over triangle
+				H[0]=Haux[0];
+				H[1]=Haux[0]+s[0]*(Haux[1]-Haux[0]);
+				H[2]=Haux[0]+s[1]*(Haux[2]-Haux[0]);
+				Haverage=(H[1]+H[2])/2;
+				break;
+			case 2: // average over quadrangle
+				H[0]=Haux[0];
+				H[1]=Haux[1];
+				H[2]=Haux[0]+s[0]*(Haux[2]-Haux[0]);
+				H[3]=Haux[1]+s[1]*(Haux[2]-Haux[1]);
+				Haverage=(H[2]+H[3])/2;
+				break;
+			default:
+				_error_("Number of ice covered vertices wrong in Tria::GetIceFrontArea(void)");
+				break;
+		}
+		frontarea=distance*Haverage;
 	}
 	else return 0;	
 	
-	IssmDouble s[2]; // s:fraction of intersected triangle edges, that lies inside ice
-	this->GetLevelsetIntersection(&indices, &numiceverts, s, MaskIceLevelsetEnum, 0.);	
-	int numthk=numiceverts+2;
-	H=xNew<IssmDouble>(numthk);
-	for(int iv=0;iv<NUMVERTICES;iv++) Haux[iv]=-bed[indices[iv]]; //sort bed in ice/noice
-
-	switch(numiceverts){
-		case 1: // average over triangle
-			H[0]=Haux[0];
-			H[1]=Haux[0]+s[0]*(Haux[1]-Haux[0]);
-			H[2]=Haux[0]+s[1]*(Haux[2]-Haux[0]);
-			Haverage=(H[1]+H[2])/2;
-			break;
-		case 2: // average over quadrangle
-			H[0]=Haux[0];
-			H[1]=Haux[1];
-			H[2]=Haux[0]+s[0]*(Haux[2]-Haux[0]);
-			H[3]=Haux[1]+s[1]*(Haux[2]-Haux[1]);
-			Haverage=(H[2]+H[3])/2;
-			break;
-		default:
-			_error_("Number of ice covered vertices wrong in Tria::GetIceFrontArea(void)");
-			break;
-	}
-	frontarea=distance*Haverage;
+	xDelete<int>(indices);
+	xDelete<IssmDouble>(H);
+	
 	_assert_(frontarea>0);
 	return frontarea;
@@ -3408,4 +3409,5 @@
 		if(xIsNan<IssmDouble>(meltrates[iv])) _error_("NaN found in vector");
 		if(xIsInf<IssmDouble>(meltrates[iv])) _error_("Inf found in vector");
+		
 	}
 
@@ -3414,4 +3416,5 @@
    
 	/*Cleanup and return*/
+	xDelete<IssmDouble>(basin_icefront_area);
 	delete gauss;
 }
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23671)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23672)
@@ -1527,4 +1527,5 @@
 	
 	xDelete<IssmDouble>(basin_icefront_area);
+	xDelete<IssmDouble>(BasinId);
 }/*}}}*/
 void FemModel::IceMassx(IssmDouble* pM, bool scaled){/*{{{*/
