Actually call hb_subset
diff --git a/util/hb-subset.cc b/util/hb-subset.cc
index 3dda921..808cb04 100644
--- a/util/hb-subset.cc
+++ b/util/hb-subset.cc
@@ -28,6 +28,7 @@
 #include <unistd.h>
 
 #include "main-font-text.hh"
+#include "hb-subset.h"
 
 /*
  * Command line interface to the harfbuzz font subsetter.
@@ -51,28 +52,44 @@
   {
   }
 
+  hb_bool_t 
+  write_file (const char *output_file, hb_blob_t *blob) {    
+    unsigned int data_length;
+    const char* data = hb_blob_get_data (blob, &data_length);
+
+    int fd_out = open(output_file, O_CREAT | O_WRONLY, S_IRWXU);
+    if (fd_out == -1) {
+      fprintf(stderr, "Unable to open output file");
+      return false;
+    }
+    ssize_t bytes_written = write(fd_out, data, data_length);
+    if (bytes_written == -1) {
+      fprintf(stderr, "Unable to write output file\n");
+      return false;
+    }
+    if (bytes_written != data_length) {
+      fprintf(stderr, "Expected %u bytes written, got %ld\n", data_length, 
+              bytes_written);
+      return false;
+    } 
+    return true;
+  }
+
   void finish (const font_options_t *font_opts)
   {
-    hb_face_t *face = hb_font_get_face (font);
-    hb_blob_t *result = hb_face_reference_blob (face);
-    unsigned int data_length;
-    const char* data = hb_blob_get_data (result, &data_length);
+    // TODO(Q1) check for errors from creates and such
+    hb_subset_profile_t *subset_profile = hb_subset_profile_create();
+    hb_subset_input_t *subset_input = hb_subset_input_create();
+    hb_face_t *face = hb_font_get_face (font);    
+    hb_subset_face_t *subset_face = hb_subset_face_create(face);
 
-    int fd_out = open(options.output_file, O_CREAT | O_WRONLY, S_IRWXU);
-    if (fd_out != -1) {
-      ssize_t bytes_written = write(fd_out, data, data_length);
-      if (bytes_written == -1) {
-        fprintf(stderr, "Unable to write output file");
-        failed = true;
-      } else if (bytes_written != data_length) {
-        fprintf(stderr, "Wrong number of bytes written");
-        failed = true;
-      }
-    } else {
-      fprintf(stderr, "Unable to open output file");
-      failed = true;
-    }
+    hb_blob_t *result = nullptr;
+    failed = !(hb_subset(subset_profile, subset_input, subset_face, &result)
+               && write_file(options.output_file, result));
 
+    hb_subset_profile_destroy (subset_profile);
+    hb_subset_input_destroy (subset_input);
+    hb_subset_face_destroy (subset_face);
     hb_blob_destroy (result);
     hb_font_destroy (font);
   }