Index: /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 17706)
+++ /issm/trunk-jpl/src/c/classes/Elements/Tria.cpp	(revision 17707)
@@ -4368,7 +4368,32 @@
 	oldfloating = this->IsFloating(); //figure out if element is floating before we start to change everything
 
-	if(migration_style==ContactEnum){
-		for(i=0;i<NUMVERTICES;i++) phi[i]=phi_ungrounding[vertices[i]->Pid()];
+	if(migration_style == ContactEnum){
+		for(i = 0;i < NUMVERTICES;i++) phi[i] = phi_ungrounding[vertices[i]->Pid()];
 		this->inputs->AddInput(new TriaInput(MaskGroundediceLevelsetEnum,&phi[0],P1Enum));
+
+		/*go through vertices, and update inputs, considering them to be TriaVertex type: */
+		for(i = 0;i < NUMVERTICES;i++){
+			/*Ice shelf: if bed below bathymetry, impose it at the bathymetry and update surface, elso do nothing */
+			if(phi[i] >= 0.){
+				if(b[i] < r[i]){
+					b[i]  = r[i];
+				}
+			}
+		}
+
+		/*Add basal melting rate if element just ungrounded*/
+		for(i=0;i<NUMVERTICES;i++){
+			if(phi[i]<0.){
+				floatingelement=true;
+				break;
+			}
+		}
+		if(!oldfloating && floatingelement==true){
+			for(i=0;i<NUMVERTICES;i++) melting[i]=gl_melting_rate/yts;
+			this->inputs->AddInput(new TriaInput(BasalforcingsMeltingRateEnum,&melting[0],P1Enum));
+		} 
+
+		/*Update inputs*/
+		this->inputs->AddInput(new TriaInput(BaseEnum,&b[0],P1Enum));
 		return;
 	}
@@ -4438,5 +4463,5 @@
 	}
 
-   /*Add basal melting rate if element just ungrounded*/
+	/*Add basal melting rate if element just ungrounded*/
 	if(!oldfloating && floatingelement==true){
 		for(i=0;i<NUMVERTICES;i++)melting[i]=gl_melting_rate/yts;
Index: /issm/trunk-jpl/src/c/cores/transient_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 17706)
+++ /issm/trunk-jpl/src/c/cores/transient_core.cpp	(revision 17707)
@@ -167,4 +167,9 @@
 			if(VerboseSolution()) _printf0_("   computing new grounding line position\n");
 			GroundinglineMigrationx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters);
+
+			if(groundingline_migration==ContactEnum){
+				femmodel->parameters->SetParam(MaskGroundediceLevelsetEnum,InputToExtrudeEnum);
+				extrudefrombase_core(femmodel);
+			}
 			if(save_results){
 				int outputs[3] = {SurfaceEnum,BaseEnum,MaskGroundediceLevelsetEnum};
Index: /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 17706)
+++ /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 17707)
@@ -95,5 +95,5 @@
 		}
 		else{
-			_error_("not supported (vertexfloating="<<serial_vertexfloating[i]<<" vertexgrounded="<<serial_vertexgrounded[i]<<")");
+			phi[i]=9999.;
 		}
 	}
