Move things
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 7f4e442..4b7c2ef 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -62,6 +62,11 @@
   plan.has_frac = plan.frac_mask || (plan.numr_mask && plan.dnom_mask);
   plan.kerning_requested = !!plan.kern_mask;
   plan.has_gpos_mark = !!plan.map.get_1_mask (HB_TAG ('m','a','r','k'));
+
+  bool disable_otl = plan.shaper->disable_otl && plan.shaper->disable_otl (&plan);
+  //plan.fallback_substitute     = disable_otl || !hb_ot_layout_has_substitution (face);
+  plan.fallback_positioning    = disable_otl || !hb_ot_layout_has_positioning (face);
+  plan.fallback_glyph_classes  = disable_otl || !hb_ot_layout_has_glyph_classes (face);
 }
 
 
@@ -257,8 +262,6 @@
   unsigned int        num_user_features;
 
   /* Transient stuff */
-  bool fallback_positioning;
-  bool fallback_glyph_classes;
   hb_direction_t target_direction;
 };
 
@@ -634,7 +637,7 @@
   hb_ot_shape_setup_masks (c);
 
   /* This is unfortunate to go here, but necessary... */
-  if (c->fallback_positioning)
+  if (c->plan->fallback_positioning)
     _hb_ot_shape_fallback_position_recategorize_marks (c->plan, c->font, buffer);
 
   hb_ot_map_glyphs_fast (buffer);
@@ -748,7 +751,7 @@
    * If fallback positinoing happens or GPOS is present, we don't
    * care.
    */
-  bool adjust_offsets_when_zeroing = c->fallback_positioning &&
+  bool adjust_offsets_when_zeroing = c->plan->fallback_positioning &&
 				     !c->plan->shaper->fallback_position &&
 				     HB_DIRECTION_IS_FORWARD (c->buffer->props.direction);
 
@@ -775,7 +778,7 @@
       break;
   }
 
-  if (likely (!c->fallback_positioning))
+  if (likely (!c->plan->fallback_positioning))
     c->plan->position (c->font, c->buffer);
 
   switch (c->plan->shaper->zero_width_marks)
@@ -812,7 +815,7 @@
 
   hb_ot_position_complex (c);
 
-  if (c->fallback_positioning && c->plan->shaper->fallback_position)
+  if (c->plan->fallback_positioning && c->plan->shaper->fallback_position)
     _hb_ot_shape_fallback_position (c->plan, c->font, c->buffer);
 
   if (HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction))
@@ -820,7 +823,7 @@
 
   /* Visual fallback goes here. */
 
-  if (c->fallback_positioning)
+  if (c->plan->fallback_positioning)
     _hb_ot_shape_fallback_kern (c->plan, c->font, c->buffer);
 
   _hb_buffer_deallocate_gsubgpos_vars (c->buffer);
@@ -872,11 +875,6 @@
 			      (unsigned) HB_BUFFER_MAX_OPS_MIN);
   }
 
-  bool disable_otl = c->plan->shaper->disable_otl && c->plan->shaper->disable_otl (c->plan);
-  //c->fallback_substitute     = disable_otl || !hb_ot_layout_has_substitution (c->face);
-  c->fallback_positioning    = disable_otl || !hb_ot_layout_has_positioning (c->face);
-  c->fallback_glyph_classes  = disable_otl || !hb_ot_layout_has_glyph_classes (c->face);
-
   /* Save the original direction, we use it later. */
   c->target_direction = c->buffer->props.direction;