--- old/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp	2013-07-16 16:34:01.708960020 +0100
+++ new/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp	2013-07-16 16:34:01.516957003 +0100
@@ -25,7 +25,8 @@
 
 /*
  *
- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
+ *
+ * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved
  *
  */
 
@@ -37,10 +38,12 @@
 #include "GlyphIterator.h"
 #include "LESwaps.h"
 
-le_uint32 LigatureSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const
+U_NAMESPACE_BEGIN
+
+le_uint32 LigatureSubstitutionSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
 {
     LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(glyph);
+    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
 
     if (coverageIndex >= 0) {
         Offset ligSetTableOffset = SWAPW(ligSetTableOffsetArray[coverageIndex]);
@@ -55,10 +58,6 @@
             TTGlyphID ligGlyph = SWAPW(ligTable->ligGlyph);
             le_uint16 comp;
 
-            if (filter != NULL && ! filter->accept(LE_SET_GLYPH(glyph, ligGlyph))) {
-                continue;
-            }
-
             for (comp = 0; comp < compCount; comp += 1) {
                 if (! glyphIterator->next()) {
                     break;
@@ -69,7 +68,7 @@
                 }
             }
 
-            if (comp == compCount) {
+            if (comp == compCount && (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, ligGlyph)))) {
                 GlyphIterator tempIterator(*glyphIterator);
                 TTGlyphID deletedGlyph = tempIterator.ignoresMarks()? 0xFFFE : 0xFFFF;
 
@@ -92,3 +91,5 @@
 
     return 0;
 }
+
+U_NAMESPACE_END