Index: /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/AdjointBalancethicknessAnalysis.cpp	(revision 26090)
@@ -151,5 +151,5 @@
 	xDelete<IssmDouble>(basis);
 	xDelete<IssmDouble>(dbasis);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	delete gauss;
 	return pe;
Index: /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/AdjointHorizAnalysis.cpp	(revision 26090)
@@ -271,5 +271,5 @@
 	delete analysis;
 	if(incomplete_adjoint){
-		if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		return Ke;
 	}
@@ -319,5 +319,5 @@
 	xDelete<IssmDouble>(dbasis);
 	xDelete<IssmDouble>(xyz_list);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -1068,5 +1068,5 @@
 	xDelete<IssmDouble>(xyz_list);
 	xDelete<IssmDouble>(basis);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	delete gauss;
 	return pe;
@@ -1253,5 +1253,5 @@
 	xDelete<int>(vertexpidlist);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 void           AdjointHorizAnalysis::GradientJBbarL1L2(Element* element,Vector<IssmDouble>* gradient,int control_interp,int control_index){/*{{{*/
@@ -1365,5 +1365,5 @@
 	xDelete<int>(vertexpidlist);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 void           AdjointHorizAnalysis::GradientJBFS(Element* element,Vector<IssmDouble>* gradient,int control_interp,int control_index){/*{{{*/
@@ -1655,5 +1655,5 @@
 	xDelete<int>(vertexpidlist);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 void           AdjointHorizAnalysis::GradientJDragGradient(Element* element,Vector<IssmDouble>* gradient,int control_interp,int control_index){/*{{{*/
@@ -1747,5 +1747,5 @@
 	xDelete<int>(vertexpidlist);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 
 }/*}}}*/
@@ -2066,5 +2066,5 @@
 	delete gauss;
 	delete friction;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 void           AdjointHorizAnalysis::GradientJDragHydroFS(Element* element,Vector<IssmDouble>* gradient,int control_interp,int control_index){/*{{{*/
@@ -2359,5 +2359,5 @@
 	delete gauss;
 	delete friction;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 void           AdjointHorizAnalysis::GradientJDSSA(Element* element,Vector<IssmDouble>* gradient,int control_interp,int control_index){/*{{{*/
@@ -2441,5 +2441,5 @@
 	xDelete<int>(vertexpidlist);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 void           AdjointHorizAnalysis::InputUpdateFromSolution(IssmDouble* solution,Element* element){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/BalancethicknessAnalysis.cpp	(revision 26090)
@@ -149,5 +149,5 @@
 	int domaintype;
 	element->FindParam(&domaintype,DomainTypeEnum);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -337,5 +337,5 @@
 	int domaintype;
 	element->FindParam(&domaintype,DomainTypeEnum);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return pe;
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/BalancevelocityAnalysis.cpp	(revision 26090)
@@ -234,5 +234,5 @@
 	xDelete<IssmDouble>(Ny);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return pe;
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp	(revision 26090)
@@ -270,5 +270,5 @@
 	xDelete<IssmDouble>(D);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -344,5 +344,5 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return pe;
 
Index: /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/FreeSurfaceTopAnalysis.cpp	(revision 26090)
@@ -247,5 +247,5 @@
 	xDelete<IssmDouble>(D);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
+	if(topelement->IsSpawnedElement()){topelement->DeleteMaterials(); delete topelement;};
 	return Ke;
 }/*}}}*/
@@ -316,5 +316,5 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
+	if(topelement->IsSpawnedElement()){topelement->DeleteMaterials(); delete topelement;};
 	return pe;
 
Index: /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/GLheightadvectionAnalysis.cpp	(revision 26090)
@@ -178,5 +178,5 @@
 	xDelete<IssmDouble>(dbasis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCEfficientAnalysis.cpp	(revision 26090)
@@ -189,8 +189,5 @@
 	/*Check that all nodes are active, else return empty matrix*/
 	if(!active_element) {
-		if(domaintype!=Domain2DhorizontalEnum){
-			basalelement->DeleteMaterials();
-			delete basalelement;
-		}
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		return NULL;
 	}
@@ -250,5 +247,5 @@
 	xDelete<IssmDouble>(dbasis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -277,8 +274,5 @@
 	/*Check that all nodes are active, else return empty matrix*/
 	if(!active_element) {
-		if(domaintype!=Domain2DhorizontalEnum){
-			basalelement->DeleteMaterials();
-			delete basalelement;
-		}
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		return NULL;
 	}
@@ -379,5 +373,5 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return pe;
 }/*}}}*/
@@ -428,5 +422,5 @@
 	xDelete<IssmDouble>(eplHeads);
 	xDelete<int>(doflist);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 } /*}}}*/
 void HydrologyDCEfficientAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
@@ -736,8 +730,5 @@
 	element->AddBasalInput(HydrologydcEplThicknessSubstepEnum,epl_thickness,basalelement->GetElementType());
 
-	if(domaintype!=Domain2DhorizontalEnum){
-		basalelement->DeleteMaterials();
-		delete basalelement;
-	}
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	xDelete<IssmDouble>(epl_thickness);
 	xDelete<IssmDouble>(old_active);
@@ -791,5 +782,5 @@
 		/*Do not do anything: at least one node is active for this element but this element is not solved for*/
 	}
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	xDelete<IssmDouble>(active);
 }
Index: /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/HydrologyDCInefficientAnalysis.cpp	(revision 26090)
@@ -212,8 +212,5 @@
 	/*Check that all nodes are active, else return empty matrix*/
 	if(!thawed_element) {
-		if(domaintype!=Domain2DhorizontalEnum){
-			basalelement->DeleteMaterials();
-			delete basalelement;
-		}
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		return NULL;
 	}
@@ -283,8 +280,5 @@
 	xDelete<IssmDouble>(dbasis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){
-		basalelement->DeleteMaterials();
-		delete basalelement;
-	}
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -313,8 +307,5 @@
 	/*Check that all nodes are active, else return empty matrix*/
 	if(!thawed_element) {
-	if(domaintype!=Domain2DhorizontalEnum){
-			basalelement->DeleteMaterials();
-			delete basalelement;
-		}
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		return NULL;
 	}
@@ -440,8 +431,5 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){
-		basalelement->DeleteMaterials();
-		delete basalelement;
-	}
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return pe;
 }/*}}}*/
@@ -535,8 +523,5 @@
 	xDelete<IssmDouble>(pressure);
 	xDelete<int>(doflist);
-	if(domaintype!=Domain2DhorizontalEnum){
-		basalelement->DeleteMaterials();
-		delete basalelement;
-	}
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 void HydrologyDCInefficientAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
@@ -738,8 +723,5 @@
 	}
 
-	if(domaintype!=Domain2DhorizontalEnum){
-		basalelement->DeleteMaterials();
-		delete basalelement;
-	}
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	xDelete<IssmDouble>(meltingrate);
 	xDelete<IssmDouble>(groundedice);
@@ -807,5 +789,5 @@
 		/*Do not do anything: at least one node is active for this element but this element is not solved for*/
 	}
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	xDelete<IssmDouble>(active);
 }
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionBaseAnalysis.cpp	(revision 26090)
@@ -117,5 +117,5 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -193,5 +193,5 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return pe;
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/L2ProjectionEPLAnalysis.cpp	(revision 26090)
@@ -112,8 +112,5 @@
 	/* Check that all nodes are active, else return empty matrix */
 	if(!active_element){
-		if(domaintype!=Domain2DhorizontalEnum){
-			basalelement->DeleteMaterials();
-			delete basalelement;
-		}
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		return NULL;
 	}
@@ -147,5 +144,5 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -174,8 +171,5 @@
 	/*Check that all nodes are active, else return empty matrix*/
 	if(!active_element) {
-		if(domaintype!=Domain2DhorizontalEnum){
-			basalelement->DeleteMaterials();
-			delete basalelement;
-		}
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		return NULL;
 	}
@@ -218,5 +212,5 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return pe;
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp	(revision 26090)
@@ -331,5 +331,5 @@
 	xDelete<IssmDouble>(Bprime);
 	delete gauss;
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -375,5 +375,5 @@
 		xDelete<IssmDouble>(basis);
 		basalelement->FindParam(&domaintype,DomainTypeEnum);
-		if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		delete gauss;
 	}
Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 26090)
@@ -292,5 +292,5 @@
 	int domaintype;
 	element->FindParam(&domaintype,DomainTypeEnum);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -584,7 +584,5 @@
 	}
 
-	int domaintype;
-	element->FindParam(&domaintype,DomainTypeEnum);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return pe;
 }/*}}}*/
@@ -927,5 +925,5 @@
 	xDelete<IssmDouble>(bed);
 	xDelete<int>(doflist);
-	if(domaintype!=Domain2DhorizontalEnum && domaintype!=Domain3DsurfaceEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 void           MasstransportAnalysis::UpdateConstraints(FemModel* femmodel){/*{{{*/
Index: /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/MeltingAnalysis.cpp	(revision 26090)
@@ -118,5 +118,5 @@
 	xDelete<IssmDouble>(basis);
 	delete gauss;
-	basalelement->DeleteMaterials(); delete basalelement;
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 26090)
@@ -1392,5 +1392,5 @@
 
 	/*clean-up and return*/
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 
@@ -1430,5 +1430,5 @@
 
 	/*clean-up and return*/
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	delete Ke1;
 	delete Ke2;
@@ -1707,5 +1707,5 @@
 
 	/*clean-up and return*/
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	delete pe1;
 	delete pe2;
@@ -2102,5 +2102,5 @@
 	xDelete<IssmDouble>(xyz_list);
 	xDelete<int>(doflist);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 #ifdef DISCSLOPE
@@ -2408,5 +2408,5 @@
 
 	/*clean-up and return*/
-	basalelement->DeleteMaterials(); delete basalelement;
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -2468,5 +2468,5 @@
 	delete gauss;
 	delete gauss_base;
-	basalelement->DeleteMaterials(); delete basalelement;
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	xDelete<IssmDouble>(xyz_list);
 	xDelete<IssmDouble>(dbasis);
@@ -2501,5 +2501,5 @@
 
 	/*clean-up and return*/
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	delete pe1;
 	delete pe2;
@@ -2702,5 +2702,5 @@
 	xDelete<IssmDouble>(xyz_list);
 	xDelete<int>(doflist);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 
@@ -2730,5 +2730,5 @@
 
 	/*clean-up and return*/
-	basalelement->DeleteMaterials(); delete basalelement;
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	return Ke;
 }/*}}}*/
@@ -2791,5 +2791,5 @@
 	delete gauss;
 	delete gauss_base;
-	basalelement->DeleteMaterials(); delete basalelement;
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	xDelete<IssmDouble>(xyz_list);
 	xDelete<IssmDouble>(dbasis);
@@ -2825,5 +2825,5 @@
 
 	/*clean-up and return*/
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	delete pe1;
 	delete pe2;
@@ -3030,5 +3030,5 @@
 	xDelete<IssmDouble>(xyz_list);
 	xDelete<int>(doflist);
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 }/*}}}*/
 
@@ -7275,5 +7275,5 @@
 	Element* basalelement = element->SpawnBasalElement();
 	ElementMatrix* Ke=CreateKMatrixSSAFriction(basalelement);
-	basalelement->DeleteMaterials(); delete basalelement;
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 
 	/*clean-up and return*/
Index: /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Cfdragcoeffabsgrad.cpp	(revision 26090)
@@ -161,5 +161,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacelogvel.cpp	(revision 26090)
@@ -198,5 +198,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
+	if(topelement->IsSpawnedElement()){topelement->DeleteMaterials(); delete topelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
Index: /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Cfsurfacesquare.cpp	(revision 26090)
@@ -187,5 +187,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
+	if(topelement->IsSpawnedElement()){topelement->DeleteMaterials(); delete topelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 26090)
@@ -342,4 +342,5 @@
 	   virtual Element*   SpawnBasalElement(bool depthaverage_materials=false)=0;
 		virtual Element*   SpawnTopElement(void)=0;
+		virtual bool       IsSpawnedElement(void)=0;
 		virtual IssmDouble StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa)=0;
 		virtual void       StabilizationParameterAnisotropic(IssmDouble* tau_parameter_anisotropic, IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble hx, IssmDouble hy, IssmDouble hz, IssmDouble kappa)=0;
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 26090)
@@ -3623,4 +3623,10 @@
 }
 /*}}}*/
+bool       Penta::IsSpawnedElement(void){/*{{{*/
+
+	/*Penta cannot be collapsed elements*/
+	return false;
+
+}/*}}}*/
 IssmDouble Penta::StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa){/*{{{*/
 	/*Compute stabilization parameter*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 26090)
@@ -175,4 +175,5 @@
 	   Element*       SpawnBasalElement(bool depthaverage_materials);
 		Element*       SpawnTopElement(void);
+		bool           IsSpawnedElement(void);
 		Tria*	         SpawnTria(int index1,int index2,int index3);
 		IssmDouble     StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa);
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.cpp	(revision 26090)
@@ -362,4 +362,13 @@
 	return isicefront;
 }/*}}}*/
+bool       Seg::IsSpawnedElement(void){/*{{{*/
+
+	if(this->iscollapsed!=0){
+		return true;
+	}
+
+	return false;
+
+}/*}}}*/
 void       Seg::JacobianDeterminant(IssmDouble* pJdet,IssmDouble* xyz_list,Gauss* gauss){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 26090)
@@ -139,4 +139,5 @@
 	   Element*    SpawnBasalElement(bool depthaverage_materials){_error_("not implemented yet");};
 		Element*    SpawnTopElement(void){_error_("not implemented yet");};
+		bool        IsSpawnedElement(void);
 		void       SetElementInput(int enum_in,IssmDouble value, int type){_error_("not implemented yet");};
 		IssmDouble  StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp	(revision 26090)
@@ -786,4 +786,10 @@
 	this->FaceOnSurfaceIndices(&index1,&index2,&index3);
 	return SpawnTria(index1,index2,index3);
+}/*}}}*/
+bool       Tetra::IsSpawnedElement(void){/*{{{*/
+
+   /*Tetras cannot be collapsed elements*/
+   return false;
+
 }/*}}}*/
 Tria*    Tetra::SpawnTria(int index1,int index2,int index3){/*{{{*/
Index: /issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 26090)
@@ -147,4 +147,5 @@
 	   Element*    SpawnBasalElement(bool depthaverage_materials);
 		Element*    SpawnTopElement(void);
+		bool        IsSpawnedElement(void);
 		Tria*       SpawnTria(int index1,int index2,int index3);
 		IssmDouble  StabilizationParameter(IssmDouble u, IssmDouble v, IssmDouble w, IssmDouble diameter, IssmDouble kappa){_error_("not implemented yet");};
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 26090)
@@ -4270,4 +4270,13 @@
 }
 /*}}}*/
+bool       Tria::IsSpawnedElement(void){/*{{{*/
+
+	if(this->iscollapsed!=0){
+		return true;
+	}
+
+	return false;
+
+}/*}}}*/
 void       Tria::StrainRateparallel(){/*{{{*/
 
Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 26090)
@@ -134,4 +134,5 @@
 	   Element*    SpawnBasalElement(bool depthaverage_materials);
 		Element*    SpawnTopElement(void);
+		bool        IsSpawnedElement(void);
 		void			StrainRateparallel();
 		void			StrainRateperpendicular();
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 26090)
@@ -1171,5 +1171,5 @@
 		Element* basalelement = element->SpawnBasalElement();
 		basalelement->WriteFieldIsovalueSegment(segments,fieldenum,fieldvalue);
-		if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	}
 
@@ -5211,8 +5211,5 @@
 		}
 		xDelete<IssmDouble>(base);
-		if(domaintype!=Domain2DhorizontalEnum){
-			basalelement->DeleteMaterials();
-			delete basalelement;
-		}
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	}
 	xDelete<IssmDouble>(serial_active);
Index: /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 26090)
@@ -93,5 +93,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
Index: /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatePicox/FloatingiceMeltingRatePicox.cpp	(revision 26090)
@@ -116,10 +116,12 @@
 		if(!element->IsOnBase()) continue;
 		Element* basalelement = element->SpawnBasalElement();
-		if(!basalelement->IsIceInElement() || !basalelement->IsFloating()) continue;
+		if(!basalelement->IsIceInElement() || !basalelement->IsFloating()){
+			if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
+			continue;
+		}
 		basalelement->GetInputValue(&boxid,BasalforcingsPicoBoxIdEnum);
 		basalelement->GetInputValue(&basinid,BasalforcingsPicoBasinIdEnum);
 		boxareas[basinid*maxbox+boxid]+=basalelement->GetHorizontalSurfaceArea();
-		basalelement->FindParam(&domaintype,DomainTypeEnum);
-		if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	}
 
@@ -164,5 +166,8 @@
 		if(!element->IsOnBase()) continue;
 		Element* basalelement = element->SpawnBasalElement();
-		if(!basalelement->IsIceInElement() || !basalelement->IsFloating()) continue;
+		if(!basalelement->IsIceInElement() || !basalelement->IsFloating()){
+			if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
+			continue;
+		}
 		int el_boxid;
 		basalelement->GetInputValue(&el_boxid,BasalforcingsPicoBoxIdEnum);
@@ -180,6 +185,5 @@
 		toc_weighted_avg[basinid]+=toc*area;
 		soc_weighted_avg[basinid]+=soc*area;
-		basalelement->FindParam(&domaintype,DomainTypeEnum);
-		if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+		if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	}
 
@@ -219,5 +223,5 @@
 			overturning_weighted_avg[basinid]+=overturning*area;
 			basalelement->FindParam(&domaintype,DomainTypeEnum);
-			if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+			if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		}
 
Index: /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp	(revision 26090)
@@ -172,5 +172,5 @@
 			/*Delete spawned element if we are in 3D*/
 			basalelement->FindParam(&domaintype,DomainTypeEnum);
-			if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+			if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 		}
 
Index: /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 26090)
@@ -79,5 +79,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){basalelement->DeleteMaterials(); delete basalelement;};
+	if(basalelement->IsSpawnedElement()){basalelement->DeleteMaterials(); delete basalelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
Index: /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 26090)
@@ -101,5 +101,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
+	if(topelement->IsSpawnedElement()){topelement->DeleteMaterials(); delete topelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
Index: /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 26090)
@@ -113,5 +113,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
+	if(topelement->IsSpawnedElement()){topelement->DeleteMaterials(); delete topelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
Index: /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 26090)
@@ -110,5 +110,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
+	if(topelement->IsSpawnedElement()){topelement->DeleteMaterials(); delete topelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
Index: /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 26090)
@@ -110,5 +110,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
+	if(topelement->IsSpawnedElement()){topelement->DeleteMaterials(); delete topelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
Index: /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 26089)
+++ /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 26090)
@@ -111,5 +111,5 @@
 
 	/*clean up and Return: */
-	if(domaintype!=Domain2DhorizontalEnum){topelement->DeleteMaterials(); delete topelement;};
+	if(topelement->IsSpawnedElement()){topelement->DeleteMaterials(); delete topelement;};
 	xDelete<IssmDouble>(xyz_list);
 	delete gauss;
