Index: /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 17429)
+++ /issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp	(revision 17430)
@@ -36,4 +36,5 @@
 	bool   isdelta18o;
 	bool   isgroundingline;
+	bool   islevelset;
 
 	/*Fetch data needed: */
@@ -42,4 +43,5 @@
 	iomodel->Constant(&smb_model,SurfaceforcingsEnum);
 	iomodel->Constant(&isgroundingline,TransientIsgroundinglineEnum);
+	iomodel->Constant(&islevelset,TransientIslevelsetEnum);
 
 	/*Finite element type*/
@@ -84,4 +86,10 @@
 		iomodel->FetchDataToInput(elements,MeshElementonbedEnum);
 		iomodel->FetchDataToInput(elements,MeshElementonsurfaceEnum);
+	}
+
+	if(islevelset){
+		iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum);
+		if(iomodel->meshtype!=Mesh2DhorizontalEnum)
+			iomodel->FetchDataToInput(elements,MeshVertexonbedEnum); // required for updating active nodes
 	}
 
@@ -748,5 +756,5 @@
 	if(islevelset){
 		_printf0_("   Updating active and non-active nodes for MasstransportAnalysis \n");
-		SetActiveNodesLSMx(femmodel->elements);
+		SetActiveNodesLSMx(femmodel);
 	}
 	return;
Index: /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 17429)
+++ /issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp	(revision 17430)
@@ -122,4 +122,5 @@
 	bool   control_analysis;
 	bool   dakota_analysis;
+	bool   islevelset;
 
 	/*Fetch constants needed: */
@@ -131,4 +132,5 @@
 	iomodel->Constant(&dakota_analysis,QmuIsdakotaEnum);
 	iomodel->Constant(&materials_type,MaterialsEnum);
+	iomodel->Constant(&islevelset,TransientIslevelsetEnum);
 
 	/*return if no processing required*/
@@ -203,5 +205,4 @@
 	iomodel->FetchDataToInput(elements,LoadingforceYEnum);
 	iomodel->FetchDataToInput(elements,DamageDEnum);
-	iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum);
 
 	if(iomodel->meshtype==Mesh3DEnum){
@@ -221,4 +222,9 @@
 		iomodel->FetchDataToInput(elements,PressureEnum,0.);
 		if(dakota_analysis)elements->InputDuplicate(PressureEnum,QmuPressureEnum);
+	}
+	if(islevelset){
+		iomodel->FetchDataToInput(elements,IceMaskNodeActivationEnum);
+		if(iomodel->meshtype!=Mesh2DhorizontalEnum)
+			iomodel->FetchDataToInput(elements,MeshVertexonbedEnum); // required for updating active nodes
 	}
 
@@ -1033,5 +1039,5 @@
 	if(islevelset){
 		_printf0_("   Updating active and non-active nodes for StressbalanceAnalysis \n");
-		SetActiveNodesLSMx(femmodel->elements);
+		SetActiveNodesLSMx(femmodel);
 	}
 	return;
@@ -2105,4 +2111,7 @@
 ElementMatrix* StressbalanceAnalysis::CreateKMatrixHO(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/*compute all stiffness matrices for this element*/
 	ElementMatrix* Ke1=CreateKMatrixHOViscous(element);
@@ -2116,4 +2125,7 @@
 }/*}}}*/
 ElementMatrix* StressbalanceAnalysis::CreateKMatrixHOViscous(Element* element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	/*Intermediaries*/
@@ -2189,4 +2201,7 @@
 ElementMatrix* StressbalanceAnalysis::CreateKMatrixHOFriction(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	if(element->IsFloating() || !element->IsOnBed()) return NULL;
 
@@ -2276,4 +2291,7 @@
 ElementVector* StressbalanceAnalysis::CreatePVectorHO(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/*Intermediaries */
 	int         dim,meshtype;
@@ -2334,4 +2352,7 @@
 ElementVector* StressbalanceAnalysis::CreatePVectorHO(Element* element){/*{{{*/
 
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
+
 	/*compute all load vectors for this element*/
 	ElementVector* pe1=CreatePVectorHODrivingStress(element);
@@ -2346,4 +2367,7 @@
 #endif
 ElementVector* StressbalanceAnalysis::CreatePVectorHODrivingStress(Element* element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	/*Intermediaries */
@@ -2397,4 +2421,7 @@
 }/*}}}*/
 ElementVector* StressbalanceAnalysis::CreatePVectorHOFront(Element* element){/*{{{*/
+
+	/* Check if ice in element */
+	if(!element->IsIceInElement()) return NULL;
 
 	/*If no front, return NULL*/
Index: /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp	(revision 17429)
+++ /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.cpp	(revision 17430)
@@ -10,7 +10,15 @@
 #include "../modules.h"
 
-void SetActiveNodesLSMx(Elements* elements){/*{{{*/
+void SetActiveNodesLSMx(FemModel* femmodel){/*{{{*/
 
-	for(int i=0;i<elements->Size();i++){
+	/* intermediaries */
+	bool solvein2d=false;
+	int i,in,meshtype,analysis_type;
+	Elements* elements = femmodel->elements;
+
+	/* find parameters */
+	femmodel->parameters->FindParam(&meshtype,MeshTypeEnum);
+
+	for(i=0;i<elements->Size();i++){
 		Element    *element  = dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		int         numnodes = element->GetNumberOfNodes();
@@ -40,5 +48,36 @@
 		}
 
-		for(int in=0;in<numnodes;in++){
+		if(meshtype!=Mesh2DhorizontalEnum){
+			femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum);
+			if(
+					analysis_type==FreeSurfaceBaseAnalysisEnum || 
+					analysis_type==MasstransportAnalysisEnum || 
+					analysis_type==MeltingAnalysisEnum || 
+					analysis_type==L2ProjectionBaseAnalysisEnum || 
+					analysis_type==BalancethicknessAnalysisEnum ||
+					analysis_type==HydrologyDCInefficientAnalysisEnum ||
+					analysis_type==DamageEvolutionAnalysisEnum || 
+					analysis_type==HydrologyDCEfficientAnalysisEnum ||
+					analysis_type==LevelsetAnalysisEnum ||
+					analysis_type==ExtrapolationAnalysisEnum
+					){ solvein2d=true;}
+
+			if(analysis_type==StressbalanceAnalysisEnum){
+				bool isSIA,isSSA;
+				femmodel->parameters->FindParam(&isSIA,FlowequationIsSIAEnum);
+				femmodel->parameters->FindParam(&isSSA,FlowequationIsSSAEnum);
+				if(isSIA || isSSA)
+					solvein2d=true;
+			}
+
+			if(solvein2d){
+				IssmDouble *mask_isonbed = xNew<IssmDouble>(numnodes);
+				element->GetInputListOnNodes(&mask_isonbed[0],MeshVertexonbedEnum);
+				for(in=0;in<numnodes;in++)	 mask[in]*=mask_isonbed[in];
+				xDelete<IssmDouble>(mask_isonbed);
+			}
+		}
+
+		for(in=0;in<numnodes;in++){
 			Node* node=element->GetNode(in);
 			if(mask[in]==1.){
Index: /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.h	(revision 17429)
+++ /issm/trunk-jpl/src/c/modules/SetActiveNodesLSMx/SetActiveNodesLSMx.h	(revision 17430)
@@ -8,5 +8,5 @@
 #include "../../classes/classes.h"
 
-void SetActiveNodesLSMx(Elements* elements);
+void SetActiveNodesLSMx(FemModel* femmodel);
 void GetMaskOfIceVerticesLSMx(FemModel* femmodel);
 void SetMaskOfIceElement(Vector<IssmDouble>* vec_mask_ice, Element* element);
