diff --git a/src/hb-dispatch.hh b/src/hb-dispatch.hh
index e582074..0293fd1 100644
--- a/src/hb-dispatch.hh
+++ b/src/hb-dispatch.hh
@@ -47,16 +47,19 @@
   typedef Return return_t;
   template <typename T, typename F>
   bool may_dispatch (const T *obj HB_UNUSED, const F *format HB_UNUSED) { return true; }
-  template <typename T>
-  return_t dispatch (const T &obj) { return _dispatch_impl (obj, hb_prioritize); }
+  template <typename T, typename ...Ts>
+  return_t dispatch (const T &obj, Ts &&...ds)
+  { return _dispatch_impl (obj, hb_prioritize, hb_forward<Ts> (ds)...); }
   static return_t no_dispatch_return_value () { return Context::default_return_value (); }
   static bool stop_sublookup_iteration (const return_t r HB_UNUSED) { return false; }
 
   private:
-  template <typename T>
-  auto _dispatch_impl (const T &obj, hb_priority<1>) HB_AUTO_RETURN (obj.dispatch (thiz ()))
-  template <typename T>
-  Return _dispatch_impl (const T &obj, hb_priority<0>) { return thiz()->_dispatch (obj); }
+  template <typename T, typename ...Ts>
+  auto _dispatch_impl (const T &obj, hb_priority<1>, Ts &&...ds) HB_AUTO_RETURN
+  (obj.dispatch (thiz (), hb_forward<Ts> (ds)...))
+  template <typename T, typename ...Ts>
+  Return _dispatch_impl (const T &obj, hb_priority<0>, Ts &&...ds)
+  { return thiz()->_dispatch (obj, hb_forward<Ts> (ds)...); }
 };
 
 
diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh
index 1deb63a..2990b0d 100644
--- a/src/hb-open-type.hh
+++ b/src/hb-open-type.hh
@@ -295,7 +295,7 @@
 
     s->push ();
 
-    bool ret = src.subset (c, hb_forward<Ts> (ds)...);
+    bool ret = c->dispatch (src, hb_forward<Ts> (ds)...);
 
     if (ret || !has_null)
       s->add_link (*this, s->pop_pack (), base);
@@ -336,7 +336,7 @@
     TRACE_SANITIZE (this);
     return_trace (sanitize_shallow (c, base) &&
 		  (this->is_null () ||
-		   StructAtOffset<Type> (base, *this).sanitize (c, hb_forward<Ts> (ds)...) ||
+		   c->dispatch (StructAtOffset<Type> (base, *this), hb_forward<Ts> (ds)...) ||
 		   neuter (c)));
   }
 
@@ -469,7 +469,7 @@
     TRACE_SANITIZE (this);
     if (unlikely (!sanitize_shallow (c, count))) return_trace (false);
     for (unsigned int i = 0; i < count; i++)
-      if (unlikely (!arrayZ[i].sanitize (c, hb_forward<Ts> (ds)...)))
+      if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
 	return_trace (false);
     return_trace (true);
   }
@@ -652,7 +652,7 @@
     if (unlikely (!sanitize_shallow (c))) return_trace (false);
     unsigned int count = len;
     for (unsigned int i = 0; i < count; i++)
-      if (unlikely (!arrayZ[i].sanitize (c, hb_forward<Ts> (ds)...)))
+      if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
 	return_trace (false);
     return_trace (true);
   }
@@ -828,7 +828,7 @@
     if (unlikely (!sanitize_shallow (c))) return_trace (false);
     unsigned int count = lenM1 + 1;
     for (unsigned int i = 0; i < count; i++)
-      if (unlikely (!arrayZ[i].sanitize (c, hb_forward<Ts> (ds)...)))
+      if (unlikely (!c->dispatch (arrayZ[i], hb_forward<Ts> (ds)...)))
 	return_trace (false);
     return_trace (true);
   }
diff --git a/src/hb-ot-layout-gpos-table.hh b/src/hb-ot-layout-gpos-table.hh
index 4b752fc..407ce9e 100644
--- a/src/hb-ot-layout-gpos-table.hh
+++ b/src/hb-ot-layout-gpos-table.hh
@@ -1525,12 +1525,6 @@
     }
   }
 
-  /* XXX Remove? */
-  bool subset (hb_subset_context_t *c, unsigned lookup_type) const
-  { return dispatch (c, lookup_type); }
-  bool sanitize (hb_sanitize_context_t *c, unsigned lookup_type) const
-  { return dispatch (c, lookup_type); }
-
   protected:
   union {
   SinglePos		single;
diff --git a/src/hb-ot-layout-gsub-table.hh b/src/hb-ot-layout-gsub-table.hh
index 4a6f48f..be78c1a 100644
--- a/src/hb-ot-layout-gsub-table.hh
+++ b/src/hb-ot-layout-gsub-table.hh
@@ -1170,12 +1170,6 @@
     }
   }
 
-  /* XXX Remove? */
-  bool subset (hb_subset_context_t *c, unsigned lookup_type) const
-  { return dispatch (c, lookup_type); }
-  bool sanitize (hb_sanitize_context_t *c, unsigned lookup_type) const
-  { return dispatch (c, lookup_type); }
-
   protected:
   union {
   SingleSubst			single;
diff --git a/src/hb-sanitize.hh b/src/hb-sanitize.hh
index 9cf17e5..71bf3a8 100644
--- a/src/hb-sanitize.hh
+++ b/src/hb-sanitize.hh
@@ -130,8 +130,9 @@
   template <typename T, typename F>
   bool may_dispatch (const T *obj HB_UNUSED, const F *format)
   { return format->sanitize (this); }
-  template <typename T>
-  return_t _dispatch (const T &obj) { return obj.sanitize (this); }
+  template <typename T, typename ...Ts>
+  return_t _dispatch (const T &obj, Ts &&...ds)
+  { return obj.sanitize (this, hb_forward<Ts> (ds)...); }
   static return_t default_return_value () { return true; }
   static return_t no_dispatch_return_value () { return false; }
   bool stop_sublookup_iteration (const return_t r) const { return !r; }
diff --git a/src/hb-subset.hh b/src/hb-subset.hh
index 795859d..4da2b67 100644
--- a/src/hb-subset.hh
+++ b/src/hb-subset.hh
@@ -40,8 +40,9 @@
        hb_dispatch_context_t<hb_subset_context_t, bool, HB_DEBUG_SUBSET>
 {
   const char *get_name () { return "SUBSET"; }
-  template <typename T>
-  return_t _dispatch (const T &obj) { return obj.subset (this); }
+  template <typename T, typename ...Ts>
+  return_t _dispatch (const T &obj, Ts &&...ds)
+  { return obj.subset (this, hb_forward<Ts> (ds)...); }
   static return_t default_return_value () { return true; }
 
   hb_subset_plan_t *plan;
