Index: /issm/trunk-jpl/src/c/cores/movingfront_core.cpp
===================================================================
--- /issm/trunk-jpl/src/c/cores/movingfront_core.cpp	(revision 26964)
+++ /issm/trunk-jpl/src/c/cores/movingfront_core.cpp	(revision 26965)
@@ -16,5 +16,5 @@
 
 	/* intermediaries */
-	bool save_results,isstressbalance,ismasstransport,isthermal,isenthalpy,islevelset,ismovingfront,killicebergs;
+	bool save_results,isstressbalance,ismasstransport,isthermal,isenthalpy,islevelset,ismovingfront,killicebergs,haskillberg;
 	int  domaintype, num_extrapol_vars, index,reinit_frequency,step;
 	int* extrapol_vars=NULL;
@@ -122,4 +122,10 @@
 		if(VerboseSolution()) _printf0_("   looking for icebergs to kill\n");
 		KillIcebergsx(femmodel);
+		femmodel->parameters->FindParam(&haskillberg,LevelsetHasKillIcebergsEnum);
+		if (haskillberg) {
+			if(VerboseSolution()) _printf0_("   reinitializing level set after killing icebergs\n");
+			femmodel->ResetLevelset();
+			ResetBoundaryConditions(femmodel,LevelsetAnalysisEnum);
+		}
 	}
 
Index: /issm/trunk-jpl/src/c/modules/KillIcebergsx/KillIcebergsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/KillIcebergsx/KillIcebergsx.cpp	(revision 26964)
+++ /issm/trunk-jpl/src/c/modules/KillIcebergsx/KillIcebergsx.cpp	(revision 26965)
@@ -28,5 +28,5 @@
 		}
 		else{
-			if(element->IsGrounded()){
+			if(element->IsAllGrounded()){
 				int numvertices = element->GetNumberOfVertices();
 				for(int v=0;v<numvertices;v++) local_mask[element->vertices[v]->Lid()] = 1.;
@@ -99,4 +99,5 @@
 	xDelete<bool>(element_flag);
 
+	bool killbergReinit = false;
 	/*OK, now deactivate iceberg and count the number of deactivated vertices*/
 	for(Object* & object : femmodel->elements->objects){
@@ -120,7 +121,10 @@
 				element->AddInput(MaskIceLevelsetEnum,values,P1Enum);
 				xDelete<IssmDouble>(values);
+				killbergReinit = true;
 			}
 		}
 	}
+	/*Recompute the sign distance for the levelset function*/
+   femmodel->parameters->SetParam(killbergReinit,LevelsetHasKillIcebergsEnum);
 
 	/*cleanup*/
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26964)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 26965)
@@ -270,4 +270,5 @@
 	LevelsetReinitFrequencyEnum,
 	LevelsetStabilizationEnum,
+	LevelsetHasKillIcebergsEnum,
 	LockFileNameEnum,
 	LoveAllowLayerDeletionEnum,
Index: /issm/trunk-jpl/src/m/parameterization/killberg.m
===================================================================
--- /issm/trunk-jpl/src/m/parameterization/killberg.m	(revision 26964)
+++ /issm/trunk-jpl/src/m/parameterization/killberg.m	(revision 26965)
@@ -25,5 +25,5 @@
 %do not go through elements that are grounded, mark flag as 1 (done) need at least 2 vertices!
 %and initialize mask as 1 for all vertices of these elements
-isgrounded=(sum(md.mask.ocean_levelset(md.mesh.elements)>0,2)>1);
+isgrounded=(sum(md.mask.ocean_levelset(md.mesh.elements)>0,2)>2);
 %isgrounded = max(md.mask.ocean_levelset(md.mesh.elements),[],2)>0;
 pos = find(isgrounded);
