More massaging
diff --git a/src/hb-ot-map-private.hh b/src/hb-ot-map-private.hh
index 648e5df..18517c4 100644
--- a/src/hb-ot-map-private.hh
+++ b/src/hb-ot-map-private.hh
@@ -62,15 +62,11 @@
     { return a->index < b->index ? -1 : a->index > b->index ? 1 : 0; }
   };
 
-  typedef void (*pause_func_t) (const hb_ot_map_t *map, hb_font_t *font, hb_buffer_t *buffer, void *user_data);
-  typedef struct {
-    pause_func_t func;
-    void *user_data;
-  } pause_callback_t;
+  typedef void (*pause_func_t) (const hb_ot_map_t *map, hb_font_t *font, hb_buffer_t *buffer);
 
   struct pause_map_t {
     unsigned int num_lookups; /* Cumulative */
-    pause_callback_t callback;
+    pause_func_t callback;
   };
 
 
@@ -156,10 +152,10 @@
   inline void add_bool_feature (hb_tag_t tag, bool global = true)
   { add_feature (tag, 1, global); }
 
-  inline void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func, void *user_data)
-  { add_pause (0, pause_func, user_data); }
-  inline void add_gpos_pause (hb_ot_map_t::pause_func_t pause_func, void *user_data)
-  { add_pause (1, pause_func, user_data); }
+  inline void add_gsub_pause (hb_ot_map_t::pause_func_t pause_func)
+  { add_pause (0, pause_func); }
+  inline void add_gpos_pause (hb_ot_map_t::pause_func_t pause_func)
+  { add_pause (1, pause_func); }
 
   HB_INTERNAL void compile (hb_face_t *face,
 			    const hb_segment_properties_t *props,
@@ -187,10 +183,10 @@
 
   struct pause_info_t {
     unsigned int stage;
-    hb_ot_map_t::pause_callback_t callback;
+    hb_ot_map_t::pause_func_t callback;
   };
 
-  HB_INTERNAL void add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func, void *user_data);
+  HB_INTERNAL void add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func);
 
   unsigned int current_stage[2]; /* GSUB/GPOS */
   hb_prealloced_array_t<feature_info_t,16> feature_infos;
diff --git a/src/hb-ot-map.cc b/src/hb-ot-map.cc
index 7192c2b..62afdef 100644
--- a/src/hb-ot-map.cc
+++ b/src/hb-ot-map.cc
@@ -87,8 +87,8 @@
 
     buffer->clear_output ();
 
-    if (pause->callback.func)
-      pause->callback.func (this, font, buffer, pause->callback.user_data);
+    if (pause->callback)
+      pause->callback (this, font, buffer);
   }
 
   for (; i < lookups[table_index].len; i++)
@@ -105,8 +105,8 @@
     for (; i < pause->num_lookups; i++)
       hb_ot_layout_position_lookup (font, buffer, lookups[table_index][i].index, lookups[table_index][i].mask);
 
-    if (pause->callback.func)
-      pause->callback.func (this, font, buffer, pause->callback.user_data);
+    if (pause->callback)
+      pause->callback (this, font, buffer);
   }
 
   for (; i < lookups[table_index].len; i++)
@@ -129,13 +129,12 @@
     hb_ot_layout_substitute_closure_lookup (face, glyphs, lookups[table_index][i].index);
 }
 
-void hb_ot_map_builder_t::add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func, void *user_data)
+void hb_ot_map_builder_t::add_pause (unsigned int table_index, hb_ot_map_t::pause_func_t pause_func)
 {
   pause_info_t *p = pauses[table_index].push ();
   if (likely (p)) {
     p->stage = current_stage[table_index];
-    p->callback.func = pause_func;
-    p->callback.user_data = user_data;
+    p->callback = pause_func;
   }
 
   current_stage[table_index]++;
@@ -249,8 +248,8 @@
   feature_infos.shrink (0); /* Done with these */
 
 
-  add_gsub_pause (NULL, NULL);
-  add_gpos_pause (NULL, NULL);
+  add_gsub_pause (NULL);
+  add_gpos_pause (NULL);
 
   for (unsigned int table_index = 0; table_index < 2; table_index++) {
     hb_tag_t table_tag = table_tags[table_index];
diff --git a/src/hb-ot-shape-complex-arabic.cc b/src/hb-ot-shape-complex-arabic.cc
index 3290ee1..d08d364 100644
--- a/src/hb-ot-shape-complex-arabic.cc
+++ b/src/hb-ot-shape-complex-arabic.cc
@@ -182,19 +182,19 @@
   map->add_bool_feature (HB_TAG('c','c','m','p'));
   map->add_bool_feature (HB_TAG('l','o','c','l'));
 
-  map->add_gsub_pause (NULL, NULL);
+  map->add_gsub_pause (NULL);
 
   unsigned int num_features = plan->props.script == HB_SCRIPT_SYRIAC ? SYRIAC_NUM_FEATURES : COMMON_NUM_FEATURES;
   for (unsigned int i = 0; i < num_features; i++)
     map->add_bool_feature (arabic_syriac_features[i], false);
 
-  map->add_gsub_pause (NULL, NULL);
+  map->add_gsub_pause (NULL);
 
   map->add_bool_feature (HB_TAG('r','l','i','g'));
-  map->add_gsub_pause (NULL, NULL);
+  map->add_gsub_pause (NULL);
 
   map->add_bool_feature (HB_TAG('c','a','l','t'));
-  map->add_gsub_pause (NULL, NULL);
+  map->add_gsub_pause (NULL);
 
   /* ArabicOT spec enables 'cswh' for Arabic where as for basic shaper it's disabled by default. */
   map->add_bool_feature (HB_TAG('c','s','w','h'));
diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc
index 652e4e6..6b55fb7 100644
--- a/src/hb-ot-shape-complex-indic.cc
+++ b/src/hb-ot-shape-complex-indic.cc
@@ -194,13 +194,11 @@
 static void
 initial_reordering (const hb_ot_map_t *map,
 		    hb_font_t *font,
-		    hb_buffer_t *buffer,
-		    void *user_data HB_UNUSED);
+		    hb_buffer_t *buffer);
 static void
 final_reordering (const hb_ot_map_t *map,
 		  hb_font_t *font,
-		  hb_buffer_t *buffer,
-		  void *user_data HB_UNUSED);
+		  hb_buffer_t *buffer);
 
 static void
 collect_features_indic (hb_ot_shape_planner_t *plan)
@@ -212,14 +210,14 @@
    * there is a use of it, it's typically at the beginning. */
   map->add_bool_feature (HB_TAG('c','c','m','p'));
 
-  map->add_gsub_pause (initial_reordering, NULL);
+  map->add_gsub_pause (initial_reordering);
 
   for (unsigned int i = 0; i < ARRAY_LENGTH (indic_basic_features); i++) {
     map->add_bool_feature (indic_basic_features[i].tag, indic_basic_features[i].is_global);
-    map->add_gsub_pause (NULL, NULL);
+    map->add_gsub_pause (NULL);
   }
 
-  map->add_gsub_pause (final_reordering, NULL);
+  map->add_gsub_pause (final_reordering);
 
   for (unsigned int i = 0; i < ARRAY_LENGTH (indic_other_features); i++)
     map->add_bool_feature (indic_other_features[i].tag, indic_other_features[i].is_global);
@@ -697,8 +695,7 @@
 static void
 initial_reordering (const hb_ot_map_t *map,
 		    hb_font_t *font,
-		    hb_buffer_t *buffer,
-		    void *user_data HB_UNUSED)
+		    hb_buffer_t *buffer)
 {
   update_consonant_positions (map, buffer, font);
 
@@ -1062,8 +1059,7 @@
 static void
 final_reordering (const hb_ot_map_t *map,
 		  hb_font_t *font HB_UNUSED,
-		  hb_buffer_t *buffer,
-		  void *user_data HB_UNUSED)
+		  hb_buffer_t *buffer)
 {
   unsigned int count = buffer->len;
   if (!count) return;