private void bleEndings() {
    int old_k = k;
    char word_char;
    
    if (endsIn('b', 'l', 'e')) {
      if (!((word.charAt(j) == 'a') || (word.charAt(j) == 'i'))) return;
      word_char = word.charAt(j);
      word.setLength(j); /* try just removing the ending */
      k = j - 1;
      if (lookup()) return;
      if (doubleC(k)) { /* allow for a doubled consonant */
        word.setLength(k);
        k--;
        if (lookup()) return;
        k++;
        word.unsafeWrite(word.charAt(k - 1));
      }
      word.setLength(j);
      word.unsafeWrite('e'); /* try removing -a/ible and adding -e */
      k = j;
      if (lookup()) return;
      word.setLength(j);
      word.append("ate"); /* try removing -able and adding -ate */
      /* (e.g., compensable/compensate) */
      k = j + 2;
      if (lookup()) return;
      word.setLength(j);
      word.unsafeWrite(word_char); /* restore the original values */
      word.append("ble");
      k = old_k;
      // nolookup()
    }
    return;
  }
*
YCS: this was the one place where lookup was not followed by return.
So restructure it. if ((j>0)&&(lookup(word.toString())) &&
!((word.charAt(j) == 's') && (word.charAt(j-1) == 's'))) return;
***
linguistics/src/main/java/com/yahoo/language/simple/kstem/KStemmer.java