code: function step1b(token) {   
      if(token.substr(-3) == 'eed') {
  	if(measure(token.substr(0, token.length - 3)) > 0)
              return token.replace(/eed$/, 'ee');
      } else {
  	var result = attemptReplace(token, /ed|ing$/, '', function(token) {   
  	    if(categorizeGroups(token).indexOf('V') > 0) {
  		result = attemptReplacePatterns(token, [['at', 'ate'],  ['bl', 'ble'], ['iz', 'ize']]);
  
  		if(result)
  		    return result;
  		else {
  		    if(endsWithDoublCons(token) && token.match(/[^lsz]$/))
  			return token.replace(/([^aeiou])\1$/, '$1');
  
  		    if(measure(token) == 1 && categorizeChars(token).substr(-3) == 'CVC' && token.match(/[^wxy]$/))
  			return token + 'e';                            
  		}
  
  		return token;
  	    }
  	    
  	    return null;
  	});
  	
  	if(result)
  	    return result;
      }
  
      return token;   
  }
docs: step 1b as defined for the porter stemmer algorithm.