diff --git a/src/OT/Var/VARC/VARC.cc b/src/OT/Var/VARC/VARC.cc
index 8c93fcf..c6222b4 100644
--- a/src/OT/Var/VARC/VARC.cc
+++ b/src/OT/Var/VARC/VARC.cc
@@ -312,8 +312,8 @@
       transform.scaleY = transform.scaleX;
 
     total_transform.transform (transform.to_transform ());
-    total_transform.scale (c.font->x_mult ? 1.f / c.font->x_multf : 0.f,
-			   c.font->y_mult ? 1.f / c.font->y_multf : 0.f);
+    total_transform.scale (c.font->x_multf ? 1.f / c.font->x_multf : 0.f,
+			   c.font->y_multf ? 1.f / c.font->y_multf : 0.f);
 
     bool same_coords = component_coords.length == coords.length &&
 		       component_coords.arrayZ == coords.arrayZ;
diff --git a/src/hb-font.cc b/src/hb-font.cc
index fe94e2e..70cfcb1 100644
--- a/src/hb-font.cc
+++ b/src/hb-font.cc
@@ -2054,8 +2054,6 @@
   0.f, /* slant_xy; */
   1.f, /* x_multf */
   1.f, /* y_multf */
-  1<<16, /* x_mult */
-  1<<16, /* y_mult */
 
   0, /* x_ppem */
   0, /* y_ppem */
@@ -2092,7 +2090,6 @@
   font->x_scale = font->y_scale = face->get_upem ();
   font->embolden_in_place = true;
   font->x_multf = font->y_multf = 1.f;
-  font->x_mult = font->y_mult = 1 << 16;
   font->instance_index = HB_FONT_NO_VAR_NAMED_INSTANCE;
 
   return font;
diff --git a/src/hb-font.hh b/src/hb-font.hh
index 51448c3..6903301 100644
--- a/src/hb-font.hh
+++ b/src/hb-font.hh
@@ -133,8 +133,6 @@
 
   float x_multf;
   float y_multf;
-  int64_t x_mult;
-  int64_t y_mult;
 
   unsigned int x_ppem;
   unsigned int y_ppem;
@@ -156,8 +154,8 @@
 
 
   /* Convert from font-space to user-space */
-  int64_t dir_mult (hb_direction_t direction)
-  { return HB_DIRECTION_IS_VERTICAL(direction) ? y_mult : x_mult; }
+  float dir_multf (hb_direction_t direction)
+  { return HB_DIRECTION_IS_VERTICAL(direction) ? y_multf : x_multf; }
   hb_position_t em_scale_x (int32_t v) { return em_multf (v, x_multf); }
   hb_position_t em_scale_y (int32_t v) { return em_multf (v, y_multf); }
   hb_position_t em_scalef_x (float v) { return em_multf (v, x_multf); }
@@ -166,8 +164,8 @@
   float em_fscale_y (int16_t v) { return em_fmult (v, y_multf); }
   float em_fscalef_x (float v) { return em_fmultf (v, x_multf); }
   float em_fscalef_y (float v) { return em_fmultf (v, y_multf); }
-  hb_position_t em_scale_dir (int16_t v, hb_direction_t direction)
-  { return em_mult (v, dir_mult (direction)); }
+  hb_position_t em_scale_dir (int32_t v, hb_direction_t direction)
+  { return em_multf (v, dir_multf (direction)); }
 
   /* Convert from parent-font user-space to our user-space */
   hb_position_t parent_scale_x_distance (hb_position_t v)
@@ -1152,10 +1150,6 @@
 
     x_multf = x_scale / upem;
     y_multf = y_scale / upem;
-    bool x_neg = x_scale < 0;
-    x_mult = (x_neg ? -((int64_t) -x_scale << 16) : ((int64_t) x_scale << 16)) / upem;
-    bool y_neg = y_scale < 0;
-    y_mult = (y_neg ? -((int64_t) -y_scale << 16) : ((int64_t) y_scale << 16)) / upem;
 
     is_synthetic =  x_embolden || y_embolden || slant;
 
@@ -1169,8 +1163,6 @@
     serial++;
   }
 
-  hb_position_t em_mult (int16_t v, int64_t mult)
-  { return (hb_position_t) ((v * mult + 32768) >> 16); }
   hb_position_t em_multf (float v, float mult)
   { return (hb_position_t) roundf (em_fmultf (v, mult)); }
   float em_fmultf (float v, float mult)
diff --git a/src/hb-ot-math-table.hh b/src/hb-ot-math-table.hh
index c702e42..9a511fb 100644
--- a/src/hb-ot-math-table.hh
+++ b/src/hb-ot-math-table.hh
@@ -704,14 +704,14 @@
   }
 
   void extract (hb_ot_math_glyph_part_t &out,
-		int64_t mult,
+		float multf,
 		hb_font_t *font) const
   {
     out.glyph			= glyph;
 
-    out.start_connector_length	= font->em_mult (startConnectorLength, mult);
-    out.end_connector_length	= font->em_mult (endConnectorLength, mult);
-    out.full_advance		= font->em_mult (fullAdvance, mult);
+    out.start_connector_length	= font->em_multf (startConnectorLength, multf);
+    out.end_connector_length	= font->em_multf (endConnectorLength, multf);
+    out.full_advance		= font->em_multf (fullAdvance, multf);
 
     static_assert ((unsigned int) HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER ==
 		   (unsigned int) PartFlags::Extender, "");
@@ -776,7 +776,7 @@
   {
     if (parts_count)
     {
-      int64_t mult = font->dir_mult (direction);
+      float mult = font->dir_multf (direction);
       for (auto _ : hb_zip (partRecords.as_array ().sub_array (start_offset, parts_count),
 			    hb_array (parts, *parts_count)))
 	_.first.extract (_.second, mult, font);
@@ -845,10 +845,10 @@
   {
     if (variants_count)
     {
-      int64_t mult = font->dir_mult (direction);
+      float mult = font->dir_multf (direction);
       for (auto _ : hb_zip (mathGlyphVariantRecord.as_array ().sub_array (start_offset, variants_count),
 			    hb_array (variants, *variants_count)))
-	_.second = {_.first.variantGlyph, font->em_mult (_.first.advanceMeasurement, mult)};
+	_.second = {_.first.variantGlyph, font->em_multf (_.first.advanceMeasurement, mult)};
     }
     return mathGlyphVariantRecord.len;
   }
