diff --git a/src/hb-ot-cbdt-table.hh b/src/hb-ot-cbdt-table.hh
index 7269688..52897ab 100644
--- a/src/hb-ot-cbdt-table.hh
+++ b/src/hb-ot-cbdt-table.hh
@@ -56,6 +56,15 @@
   DEFINE_SIZE_STATIC(5);
 };
 
+struct BigGlyphMetrics : SmallGlyphMetrics
+{
+  CHAR vertBearingX;
+  CHAR vertBearingY;
+  BYTE vertAdvance;
+
+  DEFINE_SIZE_STATIC(8);
+};
+
 struct SBitLineMetrics
 {
   inline bool sanitize (hb_sanitize_context_t *c) const
@@ -171,6 +180,7 @@
   IndexSubtableHeader	header;
   IndexSubtableFormat1	format1;
   IndexSubtableFormat3	format3;
+  /* TODO: Format 2, 4, 5. */
   } u;
   public:
   DEFINE_SIZE_UNION (8, header);
@@ -321,7 +331,6 @@
   {
     /* TODO: Make it possible to select strike. */
 
-    const BitmapSizeTable *sizeTable = &Null(BitmapSizeTable);
     unsigned int count = sizeTables.len;
     for (uint32_t i = 0; i < count; ++i)
     {
@@ -329,15 +338,13 @@
       unsigned int endGlyphIndex = sizeTables.array[i].endGlyphIndex;
       if (startGlyphIndex <= glyph && glyph <= endGlyphIndex)
       {
-	sizeTable = &sizeTables[i];
-	break;
+	*x_ppem = sizeTables[i].ppemX;
+	*y_ppem = sizeTables[i].ppemY;
+	return sizeTables[i].find_table (glyph, this);
       }
     }
 
-    *x_ppem = sizeTable->ppemX;
-    *y_ppem = sizeTable->ppemY;
-
-    return sizeTable->find_table (glyph, this);
+    return NULL;
   }
 
   protected:
diff --git a/src/hb-ot-font.cc b/src/hb-ot-font.cc
index 1b6cea4..df01bc9 100644
--- a/src/hb-ot-font.cc
+++ b/src/hb-ot-font.cc
@@ -246,14 +246,12 @@
   {
     unsigned int x_ppem = upem, y_ppem = upem; /* TODO Use font ppem if available. */
 
-    if (cblc == NULL) {
+    if (cblc == NULL)
       return false;  // Not a color bitmap font.
-    }
 
     const OT::IndexSubtableRecord *subtable_record = this->cblc->find_table(glyph, &x_ppem, &y_ppem);
-    if (subtable_record == NULL) {
+    if (subtable_record == NULL)
       return false;
-    }
 
     if (subtable_record->get_extents (extents))
       return true;
@@ -262,23 +260,27 @@
     if (!subtable_record->get_image_data (glyph, &image_offset, &image_length, &image_format))
       return false;
 
-    if (unlikely (image_offset > cbdt_len || cbdt_len - image_offset < image_length))
-      return false;
-
-    switch (image_format)
     {
-      case 17: {
-	if (unlikely (image_length < OT::GlyphBitmapDataFormat17::min_size))
-	  return false;
+      /* TODO Move the following into CBDT struct when adding more formats. */
 
-	const OT::GlyphBitmapDataFormat17& glyphFormat17 =
-	    OT::StructAtOffset<OT::GlyphBitmapDataFormat17> (this->cbdt, image_offset);
-	glyphFormat17.glyphMetrics.get_extents (extents);
-      }
-      break;
-      default:
-	// TODO: Support other image formats.
+      if (unlikely (image_offset > cbdt_len || cbdt_len - image_offset < image_length))
 	return false;
+
+      switch (image_format)
+      {
+	case 17: {
+	  if (unlikely (image_length < OT::GlyphBitmapDataFormat17::min_size))
+	    return false;
+
+	  const OT::GlyphBitmapDataFormat17& glyphFormat17 =
+	      OT::StructAtOffset<OT::GlyphBitmapDataFormat17> (this->cbdt, image_offset);
+	  glyphFormat17.glyphMetrics.get_extents (extents);
+	}
+	break;
+	default:
+	  // TODO: Support other image formats.
+	  return false;
+      }
     }
 
     /* Convert to the font units. */
