Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java =================================================================== --- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java (revision 631472) +++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/CaseTermQuery.java (working copy) @@ -98,19 +98,23 @@ if (term.text().length() > nameLength) { // start with initial lower case StringBuffer lowerLimit = new StringBuffer(propName); - lowerLimit.append(termText.toString().toUpperCase()); + String termStr = termText.toString(); + String upperTermStr = termStr.toUpperCase(); + String lowerTermStr = termStr.toLowerCase(); + + lowerLimit.append(upperTermStr); lowerLimit.setCharAt(nameLength, Character.toLowerCase(lowerLimit.charAt(nameLength))); StringBuffer upperLimit = new StringBuffer(propName); - upperLimit.append(termText.toString().toLowerCase()); + upperLimit.append(lowerTermStr); rangeScans.add(new RangeScan(reader, new Term(term.field(), lowerLimit.toString()), new Term(term.field(), upperLimit.toString()))); // second scan with upper case start lowerLimit = new StringBuffer(propName); - lowerLimit.append(termText.toString().toUpperCase()); + lowerLimit.append(upperTermStr); upperLimit = new StringBuffer(propName); - upperLimit.append(termText.toString().toLowerCase()); + upperLimit.append(lowerTermStr); upperLimit.setCharAt(nameLength, Character.toUpperCase(upperLimit.charAt(nameLength))); rangeScans.add(new RangeScan(reader, new Term(term.field(), lowerLimit.toString()),