Index: /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp
===================================================================
--- /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22481)
+++ /issm/trunk-jpl/src/c/analyses/SmbAnalysis.cpp	(revision 22482)
@@ -179,4 +179,5 @@
 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.InitDensityScaling",SmbInitDensityScalingEnum));
 			parameters->AddObject(iomodel->CopyConstantObject("md.smb.ThermoDeltaTScaling",SmbThermoDeltaTScalingEnum));
+			parameters->AddObject(iomodel->CopyConstantObject("md.smb.adThresh",SmbAdThreshEnum));
 			break;
 		case SMBpddEnum:
Index: /issm/trunk-jpl/src/c/classes/Elements/Element.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22481)
+++ /issm/trunk-jpl/src/c/classes/Elements/Element.cpp	(revision 22482)
@@ -2606,4 +2606,5 @@
 	IssmDouble init_scaling=0.0;
 	IssmDouble thermo_scaling=1.0;
+	IssmDouble adThresh=1023.0;
 
 	/*}}}*/
@@ -2668,4 +2669,5 @@
 	parameters->FindParam(&init_scaling,SmbInitDensityScalingEnum);
 	parameters->FindParam(&thermo_scaling,SmbThermoDeltaTScalingEnum);
+	parameters->FindParam(&adThresh,SmbAdThreshEnum);
 
 	/*}}}*/
@@ -2694,6 +2696,4 @@
 	Gauss* gauss=this->NewGauss(1); gauss->GaussPoint(0);
 
-	if (aIdx == 0) aValue_input->GetInputValue(&aValue,gauss);
-
 	zTop_input->GetInputValue(&zTop,gauss);
 	dzTop_input->GetInputValue(&dzTop,gauss);
@@ -2707,4 +2707,5 @@
 	Vz_input->GetInputValue(&Vz,gauss);
 	teValue_input->GetInputValue(&teValue,gauss);
+	aValue_input->GetInputValue(&aValue,gauss);
 	isinitialized_input->GetInputValue(&isinitialized);
 	/*}}}*/
@@ -2833,5 +2834,5 @@
 		pAir_input->GetInputValue(&pAir,gauss,t);  // screen level air pressure [Pa]
 		teValue_input->GetInputValue(&teValue,gauss);  // screen level air pressure [Pa]
-		if(aIdx == 0) aValue_input->GetInputValue(&aValue,gauss);  // screen level air pressure [Pa]
+		aValue_input->GetInputValue(&aValue,gauss);  // screen level air pressure [Pa]
 		//_printf_("Time: " << t << " Ta: " << Ta << " V: " << V << " dlw: " << dlw << " dsw: " << dsw << " P: " << P << " eAir: " << eAir << " pAir: " << pAir << "\n");
 		/*}}}*/
@@ -2841,5 +2842,5 @@
 
 		/*Snow, firn and ice albedo:*/
-		if(isalbedo)albedo(&a,aIdx,re,d,cldFrac,aIce, aSnow,aValue,T,W,P,EC,t0wet,t0dry,K,smb_dt,rho_ice,m,this->Sid());
+		if(isalbedo)albedo(&a,aIdx,re,d,cldFrac,aIce,aSnow,aValue,adThresh,T,W,P,EC,t0wet,t0dry,K,smb_dt,rho_ice,m,this->Sid());
 
 
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22481)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/Gembx.cpp	(revision 22482)
@@ -337,5 +337,5 @@
 
 }  /*}}}*/
-void albedo(IssmDouble** pa, int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble* TK, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m,int sid) { /*{{{*/
+void albedo(IssmDouble** pa, int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble adThresh, IssmDouble* TK, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m,int sid) { /*{{{*/
 
 	//// Calculates Snow, firn and ice albedo as a function of:
@@ -345,11 +345,15 @@
 	//   3 : density and cloud amount (Greuell & Konzelmann, 1994)
 	//   4 : exponential time decay & wetness (Bougamont & Bamber, 2005)
-	//   5 : ingest MODIS mode, direct input from aValue parameter applied to surface ice only
 
 	//// Inputs
 	// aIdx      = albedo method to use
-
-	// Method 0 & 5
-	//  aValue   = direct input value for albedo
+	
+	// Method 0
+	//  aValue   = direct input value for albedo, override all changes to albedo
+
+	// adThresh
+	//  Apply below method to all areas with densities below this value, 
+	//  or else apply direct input value, allowing albedo to be altered.  
+	//  Default value is rho water (1023 kg m-3).
 
 	// Methods 1 & 2
@@ -397,108 +401,104 @@
 	const IssmDouble dSnow = 300;   // density of fresh snow [kg m-3]       
 
-	if (aIdx==0){
-		  for(int i=0;i<m;i++)a[i] = aValue;
-	}
-	else if(aIdx==1){ 
-        //function of effective grain radius
-        
-        //convert effective radius to specific surface area [cm2 g-1]
-        IssmDouble S = 3.0 / (0.091 * re[0]);
-        
-        //determine broadband albedo
-        a[0]= 1.48 - pow(S,-0.07);
-		  for(int i=1;i<m;i++)a[i]=a[0];
-	}
-	else if(aIdx==2){
-		
-        // Spectral fractions  (Lefebre et al., 2003)
-        // [0.3-0.8um 0.8-1.5um 1.5-2.8um]
-        
-        IssmDouble sF[3] = {0.606, 0.301, 0.093};
-        
-        // convert effective radius to grain size in meters
-        IssmDouble gsz = (re[0] * 2.0) / 1000.0;
-        
-        // spectral range:
-        // 0.3 - 0.8um
-        IssmDouble a0 = fmin(0.98, 1 - 1.58 *pow(gsz,0.5));
-        // 0.8 - 1.5um
-        IssmDouble a1 = fmax(0, 0.95 - 15.4 *pow(gsz,0.5));
-        // 1.5 - 2.8um
-        IssmDouble a2 = fmax(0.127, 0.88 + 346.3*gsz - 32.31*pow(gsz,0.5));
-        
-        // broadband surface albedo
-        a[0] = sF[0]*a0 + sF[1]*a1 + sF[2]*a2;
-		  for(int i=1;i<m;i++)a[i]=a[0];
-	}
-	else if(aIdx==3){
-		
-        // a as a function of density
-        
-        // calculate albedo
-        a[0] = aIce + (d[0] - dIce)*(aSnow - aIce) / (dSnow - dIce) + (0.05 * (cldFrac - 0.5));
-		  for(int i=1;i<m;i++)a[i]=a[0];
-	}
-	else if(aIdx==4){
-		
-        // exponential time decay & wetness
-        
-        // change in albedo with time:
-        //   (d_a) = (a - a_old)/(t0)
-        // where: t0 = timescale for albedo decay
-        
-        dt = dt / dts;    // convert from [s] to [d]
-        
-        // initialize variables
-        IssmDouble* t0=xNew<IssmDouble>(m);
-        IssmDouble* T=xNew<IssmDouble>(m);
-        IssmDouble* t0warm=xNew<IssmDouble>(m);
-        IssmDouble* d_a=xNew<IssmDouble>(m);
-        
-        // specify constants
-        // a_wet = 0.15;        // water albedo (0.15)
-        // a_new = aSnow        // new snow albedo (0.64 - 0.89)
-        // a_old = aIce;        // old snow/ice albedo (0.27-0.53)
-        // t0_wet = t0wet;      // time scale for wet snow (15-21.9) [d]
-        // t0_dry = t0dry;      // warm snow timescale [15] [d]
-        // K = 7                // time scale temperature coef. (7) [d]
-        // W0 = 300;            // 200 - 600 [mm]
-        const IssmDouble z_snow = 15.0;            // 16 - 32 [mm]
-        
-        // determine timescale for albedo decay
-        for(int i=0;i<m;i++)if(W[i]>0.0+Wtol)t0[i]=t0wet; // wet snow timescale
-        for(int i=0;i<m;i++)T[i]=TK[i] - CtoK; // change T from K to degC
-        for(int i=0;i<m;i++) t0warm[i]= fabs(T[i]) * K + t0dry; //// 'warm' snow timescale
-        for(int i=0;i<m;i++)if(fabs(W[i])<Wtol && T[i]>=-10.0-Ttol)t0[i]= t0warm[i];
-        for(int i=0;i<m;i++)if(T[i]<-10.0-Ttol) t0[i] =  10.0 * K + t0dry; // 'cold' snow timescale
-        
-        // calculate new albedo
-        for(int i=0;i<m;i++)d_a[i] = (a[i] - aIce) / t0[i] * dt;           // change in albedo
-        for(int i=0;i<m;i++)a[i] -= d_a[i];                            // new albedo
-        
-        // modification of albedo due to thin layer of snow or solid
-        // condensation (deposition) at the surface surface
-        
-        // check if condensation occurs & if it is deposited in solid phase
-        if ( EC > 0.0 + Dtol && T[0] < 0.0-Ttol) P = P + (EC/dSnow) * 1000.0;  // add cond to precip [mm]
-        
-        a[0] = aSnow - (aSnow - a[0]) * exp(-P/z_snow);
-        
-        //----------THIS NEEDS TO BE IMPLEMENTED AT A LATER DATE------------
-        // modification of albedo due to thin layer of water on the surface
-        // a_surf = a_wet - (a_wet - a_surf) * exp(-W_surf/W0);
-
-        /*Free ressources:*/
-        xDelete<IssmDouble>(t0);
-        xDelete<IssmDouble>(T);
-        xDelete<IssmDouble>(t0warm);
-        xDelete<IssmDouble>(d_a);
-
-	}
-	else if(aIdx==5){
-		for(int i=0;i<m;i++)if(dIce - d[i]<Dtol) a[i] = aValue;
-	}
-	else _error_("albedo method switch should range from 0 to 5!");
-	
+	if(aIdx==0 | (adThresh - d[0]<Dtol)){
+		a[0] = aValue;
+	}
+	else{
+		if(aIdx==1){ 
+			//function of effective grain radius
+
+			//convert effective radius to specific surface area [cm2 g-1]
+			IssmDouble S = 3.0 / (0.091 * re[0]);
+
+			//determine broadband albedo
+			a[0]= 1.48 - pow(S,-0.07);
+		}
+		else if(aIdx==2){
+
+			// Spectral fractions  (Lefebre et al., 2003)
+			// [0.3-0.8um 0.8-1.5um 1.5-2.8um]
+
+			IssmDouble sF[3] = {0.606, 0.301, 0.093};
+
+			// convert effective radius to grain size in meters
+			IssmDouble gsz = (re[0] * 2.0) / 1000.0;
+
+			// spectral range:
+			// 0.3 - 0.8um
+			IssmDouble a0 = fmin(0.98, 1 - 1.58 *pow(gsz,0.5));
+			// 0.8 - 1.5um
+			IssmDouble a1 = fmax(0, 0.95 - 15.4 *pow(gsz,0.5));
+			// 1.5 - 2.8um
+			IssmDouble a2 = fmax(0.127, 0.88 + 346.3*gsz - 32.31*pow(gsz,0.5));
+
+			// broadband surface albedo
+			a[0] = sF[0]*a0 + sF[1]*a1 + sF[2]*a2;
+		}
+		else if(aIdx==3){
+
+			// a as a function of density
+
+			// calculate albedo
+			a[0] = aIce + (d[0] - dIce)*(aSnow - aIce) / (dSnow - dIce) + (0.05 * (cldFrac - 0.5));
+		}
+		else if(aIdx==4){
+
+			// exponential time decay & wetness
+
+			// change in albedo with time:
+			//   (d_a) = (a - a_old)/(t0)
+			// where: t0 = timescale for albedo decay
+
+			dt = dt / dts;    // convert from [s] to [d]
+
+			// initialize variables
+			IssmDouble* t0=xNew<IssmDouble>(m);
+			IssmDouble* T=xNew<IssmDouble>(m);
+			IssmDouble* t0warm=xNew<IssmDouble>(m);
+			IssmDouble* d_a=xNew<IssmDouble>(m);
+
+			// specify constants
+			// a_wet = 0.15;        // water albedo (0.15)
+			// a_new = aSnow        // new snow albedo (0.64 - 0.89)
+			// a_old = aIce;        // old snow/ice albedo (0.27-0.53)
+			// t0_wet = t0wet;      // time scale for wet snow (15-21.9) [d]
+			// t0_dry = t0dry;      // warm snow timescale [15] [d]
+			// K = 7                // time scale temperature coef. (7) [d]
+			// W0 = 300;            // 200 - 600 [mm]
+			const IssmDouble z_snow = 15.0;            // 16 - 32 [mm]
+
+			// determine timescale for albedo decay
+			for(int i=0;i<m;i++)if(W[i]>0.0+Wtol)t0[i]=t0wet; // wet snow timescale
+			for(int i=0;i<m;i++)T[i]=TK[i] - CtoK; // change T from K to degC
+			for(int i=0;i<m;i++) t0warm[i]= fabs(T[i]) * K + t0dry; //// 'warm' snow timescale
+			for(int i=0;i<m;i++)if(fabs(W[i])<Wtol && T[i]>=-10.0-Ttol)t0[i]= t0warm[i];
+			for(int i=0;i<m;i++)if(T[i]<-10.0-Ttol) t0[i] =  10.0 * K + t0dry; // 'cold' snow timescale
+
+			// calculate new albedo
+			for(int i=0;i<m;i++)d_a[i] = (a[i] - aIce) / t0[i] * dt;           // change in albedo
+			for(int i=0;i<m;i++)a[i] -= d_a[i];                            // new albedo
+
+			// modification of albedo due to thin layer of snow or solid
+			// condensation (deposition) at the surface surface
+
+			// check if condensation occurs & if it is deposited in solid phase
+			if ( EC > 0.0 + Dtol && T[0] < 0.0-Ttol) P = P + (EC/dSnow) * 1000.0;  // add cond to precip [mm]
+
+			a[0] = aSnow - (aSnow - a[0]) * exp(-P/z_snow);
+
+			//----------THIS NEEDS TO BE IMPLEMENTED AT A LATER DATE------------
+			// modification of albedo due to thin layer of water on the surface
+			// a_surf = a_wet - (a_wet - a_surf) * exp(-W_surf/W0);
+
+			/*Free ressources:*/
+			xDelete<IssmDouble>(t0);
+			xDelete<IssmDouble>(T);
+			xDelete<IssmDouble>(t0warm);
+			xDelete<IssmDouble>(d_a);
+
+		}
+		else _error_("albedo method switch should range from 0 to 4!");
+	}
+
 	// Check for erroneous values
 	if (a[0] > 1) _printf_("albedo > 1.0\n");
@@ -1176,5 +1176,5 @@
 
 				// adjust a, re, gdn & gsp
-				if(aIdx>0 | aIdx!=5 | (aIdx==5 & !(dIce - d[0]<Dtol)))a[0] = (aSnow * P + a[0] * mInit[0])/mass;
+				if(aIdx>0)a[0] = (aSnow * P + a[0] * mInit[0])/mass;
 				re[0] = (reNew * P + re[0] * mInit[0])/mass;
 				gdn[0] = (gdnNew * P + gdn[0] * mInit[0])/mass;
Index: /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22481)
+++ /issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.h	(revision 22482)
@@ -25,5 +25,5 @@
 IssmDouble Marbouty(IssmDouble T, IssmDouble d, IssmDouble dT);
 void grainGrowth(IssmDouble** pre, IssmDouble** pgdn, IssmDouble** pgsp, IssmDouble* T,IssmDouble* dz,IssmDouble* d, IssmDouble* W,IssmDouble smb_dt,int m,int aIdx, int sid);
-void albedo(IssmDouble** a,int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid);
+void albedo(IssmDouble** a,int aIdx, IssmDouble* re, IssmDouble* d, IssmDouble cldFrac, IssmDouble aIce, IssmDouble aSnow, IssmDouble aValue, IssmDouble adThresh, IssmDouble* T, IssmDouble* W, IssmDouble P, IssmDouble EC, IssmDouble t0wet, IssmDouble t0dry, IssmDouble K, IssmDouble dt, IssmDouble dIce, int m, int sid);
 void shortwave(IssmDouble** pswf, int swIdx, int aIdx, IssmDouble dsw, IssmDouble as, IssmDouble* d, IssmDouble* dz, IssmDouble* re, IssmDouble dIce, int m, int sid);
 void thermo(IssmDouble* pEC, IssmDouble** T, IssmDouble* dz, IssmDouble* d, IssmDouble* swf, IssmDouble dlw, IssmDouble Ta, IssmDouble V, IssmDouble eAir, IssmDouble pAir, IssmDouble teValue, IssmDouble Ws, IssmDouble dt0, int m, IssmDouble Vz, IssmDouble Tz, IssmDouble thermo_scaling, IssmDouble dIce, int sid);
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22481)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 22482)
@@ -436,4 +436,5 @@
 	SmbInitDensityScalingEnum,
 	SmbThermoDeltaTScalingEnum,
+	SmbAdThreshEnum,
 	SmbTaEnum,
 	SmbVEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22481)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 22482)
@@ -438,4 +438,5 @@
 		case SmbInitDensityScalingEnum : return "SmbInitDensityScaling";
 		case SmbThermoDeltaTScalingEnum : return "SmbThermoDeltaTScaling";
+		case SmbAdThreshEnum : return "SmbAdThresh";
 		case SmbTaEnum : return "SmbTa";
 		case SmbVEnum : return "SmbV";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22481)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 22482)
@@ -447,4 +447,5 @@
 	      else if (strcmp(name,"SmbInitDensityScaling")==0) return SmbInitDensityScalingEnum;
 	      else if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum;
+	      else if (strcmp(name,"SmbAdThresh")==0) return SmbAdThreshEnum;
 	      else if (strcmp(name,"SmbTa")==0) return SmbTaEnum;
 	      else if (strcmp(name,"SmbV")==0) return SmbVEnum;
@@ -505,9 +506,9 @@
 	      else if (strcmp(name,"SmbPrecipitationsPresentday")==0) return SmbPrecipitationsPresentdayEnum;
 	      else if (strcmp(name,"SmbPrecipitationsLgm")==0) return SmbPrecipitationsLgmEnum;
-	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
          else stage=5;
    }
    if(stage==5){
-	      if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+	      if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
+	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
 	      else if (strcmp(name,"SmbPrecipitation")==0) return SmbPrecipitationEnum;
 	      else if (strcmp(name,"SmbPddfacSnow")==0) return SmbPddfacSnowEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
 	      else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
-	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
+	      if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
+	      else if (strcmp(name,"LambdaS")==0) return LambdaSEnum;
 	      else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
 	      else if (strcmp(name,"StrainRatexx")==0) return StrainRatexxEnum;
@@ -751,9 +752,9 @@
 	      else if (strcmp(name,"Outputdefinition91")==0) return Outputdefinition91Enum;
 	      else if (strcmp(name,"Outputdefinition92")==0) return Outputdefinition92Enum;
-	      else if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
          else stage=7;
    }
    if(stage==7){
-	      if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
+	      if (strcmp(name,"Outputdefinition93")==0) return Outputdefinition93Enum;
+	      else if (strcmp(name,"Outputdefinition94")==0) return Outputdefinition94Enum;
 	      else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum;
 	      else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum;
@@ -874,9 +875,9 @@
 	      else if (strcmp(name,"LoveShNmax")==0) return LoveShNmaxEnum;
 	      else if (strcmp(name,"LoveShNmin")==0) return LoveShNminEnum;
-	      else if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
          else stage=8;
    }
    if(stage==8){
-	      if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
+	      if (strcmp(name,"LoveG0")==0) return LoveG0Enum;
+	      else if (strcmp(name,"LoveR0")==0) return LoveR0Enum;
 	      else if (strcmp(name,"LoveMu0")==0) return LoveMu0Enum;
 	      else if (strcmp(name,"LoveAllowLayerDeletion")==0) return LoveAllowLayerDeletionEnum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"Penta")==0) return PentaEnum;
 	      else if (strcmp(name,"PentaInput")==0) return PentaInputEnum;
-	      else if (strcmp(name,"Vertex")==0) return VertexEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
+	      if (strcmp(name,"Vertex")==0) return VertexEnum;
+	      else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum;
 	      else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum;
 	      else if (strcmp(name,"Option")==0) return OptionEnum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
-	      else if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
+	      if (strcmp(name,"MINIcondensed")==0) return MINIcondensedEnum;
+	      else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
 	      else if (strcmp(name,"LATaylorHood")==0) return LATaylorHoodEnum;
 	      else if (strcmp(name,"XTaylorHood")==0) return XTaylorHoodEnum;
Index: /issm/trunk-jpl/src/m/classes/SMBgemb.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 22481)
+++ /issm/trunk-jpl/src/m/classes/SMBgemb.m	(revision 22482)
@@ -60,5 +60,4 @@
 					  % 3: density and cloud amount [Greuell & Konzelmann, 1994]
 					  % 4: exponential time decay & wetness [Bougamont & Bamber, 2005]
-					  % 5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only
 
 		swIdx  = NaN; % apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1)
@@ -89,4 +88,7 @@
 		t0dry = NaN; % warm snow timescale (30) 
 		K     = NaN; % time scale temperature coef. (7) 
+		adThresh = NaN; %Apply aIdx method to all areas with densities below this value,
+		                %or else apply direct input value from aValue, allowing albedo to be altered.
+							 %Default value is rho water (1023 kg m-3).
 
 		%densities:
@@ -125,5 +127,5 @@
 			self.pAir=project3d(md,'vector',self.pAir,'type','node');
 
-			if (aIdx == 0 | aIdx == 5) & ~isnan(self.aValue)
+			if (aIdx == 0) & ~isnan(self.aValue)
 				self.aValue=project3d(md,'vector',self.aValue,'type','node');
 			end
@@ -169,4 +171,5 @@
 		self.t0dry = 30;
 		self.K = 7;
+		self.adThresh = 1023;
 
 		self.teValue = ones(mesh.numberofelements,1);
@@ -212,5 +215,5 @@
 			md = checkfield(md,'fieldname','smb.teValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
 
-			md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4,5]);
+			md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4]);
 			md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1]);
 			md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5]);
@@ -223,4 +226,5 @@
 			md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'>=',0,'<=',1);
 			md = checkfield(md,'fieldname','smb.ThermoDeltaTScaling','NaN',1,'Inf',1,'>=',0,'<=',1);
+			md = checkfield(md,'fieldname','smb.adThresh','NaN',1,'Inf',1,'>=',0);
 
 			switch self.aIdx,
@@ -278,4 +282,5 @@
 			fielddisplay(self,'ThermoDeltaTScaling',{'scaling factor to multiply the thermal diffusion timestep (delta t)'});
 			fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)');
+			fielddisplay(self,'adThresh',{'Apply aIdx method to all areas with densities below this value,','or else apply direct input value from aValue, allowing albedo to be altered.'});
 			fielddisplay(self,'aIdx',{'method for calculating albedo and subsurface absorption (default is 1)',...
 				'0: direct input from aValue parameter',...
@@ -283,6 +288,5 @@
 				'2: effective grain radius [Brun et al., 2009]',...
 				'3: density and cloud amount [Greuell & Konzelmann, 1994]',...
-				'4: exponential time decay & wetness [Bougamont & Bamber, 2005]',...
-				'5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only'});
+				'4: exponential time decay & wetness [Bougamont & Bamber, 2005]'})
 
 			fielddisplay(self,'teValue','Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)');
@@ -373,4 +377,5 @@
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0dry','format','Double');
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','K','format','Double');
+			WriteData(fid,prefix,'object',self,'class','smb','fieldname','adThresh','format','Double');
 
 			WriteData(fid,prefix,'object',self,'class','smb','fieldname','aValue','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
Index: /issm/trunk-jpl/src/m/classes/SMBgemb.py
===================================================================
--- /issm/trunk-jpl/src/m/classes/SMBgemb.py	(revision 22481)
+++ /issm/trunk-jpl/src/m/classes/SMBgemb.py	(revision 22482)
@@ -95,4 +95,7 @@
 		t0dry = float('NaN')	# warm snow timescale (30) 
 		K     = float('NaN')	# time scale temperature coef. (7) 
+		adThresh = float('NaN') # Apply aIdx method to all areas with densities below this value,
+		                        # or else apply direct input value from aValue, allowing albedo to be altered.
+										# Default value is rho water (1023 kg m-3).
 
 		#densities:
@@ -145,4 +148,5 @@
 		string = "%s\n%s"%(string,fielddisplay(self,'ThermoDeltaTScaling','scaling factor to multiply the thermal diffusion timestep (delta t)'))
 		string = "%s\n%s"%(string,fielddisplay(self,'outputFreq','output frequency in days (default is monthly, 30)'))
+		string = "%s\n%s"%(string,fielddisplay(self,'adThresh','Apply aIdx method to all areas with densities below this value,','or else apply direct input value from aValue, allowing albedo to be altered.'))
 		string = "%s\n%s"%(string,fielddisplay(self,'aIdx',['method for calculating albedo and subsurface absorption (default is 1)',
 			         '0: direct input from aValue parameter',
@@ -150,6 +154,5 @@
 						'2: effective grain radius [Brun et al., 2009]',
 						'3: density and cloud amount [Greuell & Konzelmann, 1994]',
-						'4: exponential time decay & wetness [Bougamont & Bamber, 2005]',
-						'5: ingest MODIS mode, direct input from aValue parameter applied to surface ice only']))
+						'4: exponential time decay & wetness [Bougamont & Bamber, 2005]']))
 
 		string = "%s\n%s"%(string,fielddisplay(self,'teValue','Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)'))
@@ -203,5 +206,5 @@
 		self.pAir = project3d(md,'vector',self.pAir,'type','node')
 
-		if (aIdx == 0 or aIdx == 5) and np.isnan(self.aValue):
+		if (aIdx == 0) and np.isnan(self.aValue):
 			self.aValue=project3d(md,'vector',self.aValue,'type','node');
 		if np.isnan(self.teValue):
@@ -245,4 +248,5 @@
 		self.t0dry = 30
 		self.K = 7
+		self.adThresh = 1023
 
 		self.teValue = np.ones((mesh.numberofelements,));
@@ -288,5 +292,5 @@
 		md = checkfield(md,'fieldname','smb.teValue','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1);
 
-		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4,5])
+		md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[0,1,2,3,4])
 		md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1])
 		md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5])
@@ -299,4 +303,5 @@
 		md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'> = ',0,'< = ',1)
 		md = checkfield(md,'fieldname','smb.ThermoDeltaTScaling','NaN',1,'Inf',1,'> = ',0,'< = ',1)
+		md = checkfield(md,'fieldname','smb.adThresh','NaN',1,'Inf',1,'>=',0)
 
 		if type(self.aIdx) == list or type(self.aIdx) == type(np.array([1,2])) and (self.aIdx == [1,2] or (1 in self.aIdx and 2 in self.aIdx)):
@@ -368,4 +373,5 @@
 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','t0dry','format','Double')
 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','K','format','Double')
+		WriteData(fid,prefix,'object',self,'class','smb','fieldname','adThresh','format','Double');
 
 		WriteData(fid,prefix,'object',self,'class','smb','fieldname','aValue','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1,'yts',md.constants.yts);
