Prune Context Format2 rules!
diff --git a/pyotlss.py b/pyotlss.py
index 86f43b9..6ff6f51 100755
--- a/pyotlss.py
+++ b/pyotlss.py
@@ -432,10 +432,41 @@
 		setattr (self, c.RuleSetCount, len (rss))
 		return bool (rss)
 	elif self.Format == 2:
-		# TODO Renumber classes then prune rules that can't apply
-		# But then I first need to find fonts that use this type.  D'oh!
-		return self.Coverage.subset_glyphs (glyphs) and \
-		       all (x.subset_glyphs (glyphs) for x in c.ContextData (self))
+		if not self.Coverage.subset_glyphs (glyphs):
+			return False
+		indices = getattr (self, c.ClassDef).intersect_glyphs (glyphs)
+		rss = getattr (self, c.ClassRuleSet)
+		rss = [rss[i] for i in indices]
+		ContextData = c.ContextData (self)
+		klass_maps = [x.subset_glyphs (glyphs) for x in ContextData]
+		for cd,m in zip (ContextData, klass_maps):
+			cd.remap (m)
+		for rs in rss:
+			if rs:
+				ss = getattr (rs, c.ClassRule)
+				ss = [r for r in ss \
+				      if r and all (k in klass_map \
+						    for klass_map,k in zip (klass_maps, c.RuleData (r, self.Format)))]
+				setattr (rs, c.ClassRule, ss)
+				setattr (rs, c.ClassRuleCount, len (ss))
+
+				# Remap rule classes
+				for r in ss:
+					# Kludge; RuleData can't be used for assignment
+					if c.Chain:
+						r.LookAhead = klass_maps[0].index (r.LookAhead)
+						r.Input     = klass_maps[1].index (r.Input)
+						r.Backtrack = klass_maps[2].index (r.Backtrack)
+					else:
+						pass
+						r.Class = klass_maps[0].index (r.Class)
+		# Prune empty subrulesets
+		rss = [rs for rs in rss if rs and getattr (rs, c.ClassRule)]
+		setattr (self, c.ClassRuleSet, rss)
+		setattr (self, c.ClassRuleSetCount, len (rss))
+		return bool (rss)
+
+		return all (x.subset_glyphs (glyphs) for x in c.ContextData (self))
 	elif self.Format == 3:
 		return all (x.subset_glyphs (glyphs) for x in c.RuleData (self, self.Format))
 	else: