diff --git a/tools/framebufferizer/Android.bp b/tools/framebufferizer/Android.bp
index 0ed202d..96ea4ae 100644
--- a/tools/framebufferizer/Android.bp
+++ b/tools/framebufferizer/Android.bp
@@ -3,10 +3,9 @@
 
 java_binary_host {
     name: "TeeuiFramebufferizer",
-    srcs: ["src/**/*.java"],
+    srcs: ["src/com/android/framebufferizer/**/*.java"],
     manifest: "manifest-teeui-framebufferizer.mf",
     required: [
         "libteeui_jni",
     ]
 }
-
diff --git a/tools/framebufferizer/src/com/android/framebufferizer/Main.java b/tools/framebufferizer/src/com/android/framebufferizer/Main.java
index 7d81fd3..8bd76dd 100644
--- a/tools/framebufferizer/src/com/android/framebufferizer/Main.java
+++ b/tools/framebufferizer/src/com/android/framebufferizer/Main.java
@@ -38,12 +38,14 @@
         theFramebuffer.setFrame(theFrame);
         FrameBufferBuffer.MagnifiedView magnifiedView = theFramebuffer.getMagnifiedView();
         FrameBufferBuffer.DeviceSelector deviceSelector = theFramebuffer.getDeviceSelector();
+        FrameBufferBuffer.LanguageSelector languageSelector = theFramebuffer.getLanguageSelector();
         magnifiedView.setPreferredSize(new Dimension(100, 100));
         magnifiedView.setMinimumSize(new Dimension(100, 100));
         magnifiedView.setMaximumSize(new Dimension(100, 100));
         theFrame.getContentPane().add(magnifiedView, BorderLayout.EAST);
         theFrame.getContentPane().add(theFramebuffer, BorderLayout.CENTER);
         theFrame.getContentPane().add(deviceSelector, BorderLayout.NORTH);
+        theFrame.getContentPane().add(languageSelector, BorderLayout.SOUTH);
         theFrame.pack();
         theFrame.setVisible(true);
         deviceSelector.refreshSelections();
diff --git a/tools/framebufferizer/src/com/android/framebufferizer/NativeRenderer.java b/tools/framebufferizer/src/com/android/framebufferizer/NativeRenderer.java
index e670123..0198892 100644
--- a/tools/framebufferizer/src/com/android/framebufferizer/NativeRenderer.java
+++ b/tools/framebufferizer/src/com/android/framebufferizer/NativeRenderer.java
@@ -25,4 +25,6 @@
 
     public static native int setDeviceInfo(DeviceInfo deviceInfo, boolean magnified);
     public static native int renderBuffer(int x, int y, int width, int height, int lineStride, int[] buffer);
+    public static native void setLanguage(String language_id);
+    public static native String[] getLanguageIdList();
 }
diff --git a/tools/framebufferizer/src/com/android/framebufferizer/utils/FrameBufferBuffer.java b/tools/framebufferizer/src/com/android/framebufferizer/utils/FrameBufferBuffer.java
index aefa8dc..a1104f1 100644
--- a/tools/framebufferizer/src/com/android/framebufferizer/utils/FrameBufferBuffer.java
+++ b/tools/framebufferizer/src/com/android/framebufferizer/utils/FrameBufferBuffer.java
@@ -87,7 +87,6 @@
 
     }
 
-    public static enum Devices { CORAL, BONITO, SARGO, CROSSHATCH, BLUELINE;}
 
     public class DeviceSelector extends JPanel implements ActionListener {
         private JComboBox<String> dropDownMenu = new JComboBox(DeviceInfoDB.Device.values());
@@ -107,7 +106,7 @@
         }
 
         public void refreshSelections(){
-            dropDownMenu.setSelectedItem(Devices.CORAL);
+            dropDownMenu.setSelectedItem(DeviceInfoDB.Device.CORAL);
         }
 
         public DeviceInfoDB.Device currentDevice() {
@@ -119,11 +118,33 @@
         }
     }
 
+    public class LanguageSelector extends JPanel implements ActionListener {
+        String languages [] = NativeRenderer.getLanguageIdList();
+
+        private JComboBox<String> dropDownMenu;
+
+        protected LanguageSelector() {
+            dropDownMenu = new JComboBox(languages);
+            dropDownMenu.addActionListener(this);
+            this.add(dropDownMenu);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            synchronized (this) {
+                String language = (String) dropDownMenu.getSelectedItem();
+                NativeRenderer.setLanguage(language);
+                FrameBufferBuffer.this.calibrateNativeBuffer();
+            }
+        }
+
+    }
+
 
     private BufferedImage mImage;
     private DataBufferInt mBuffer;
     private MagnifiedView mMagnifiedView;
     private DeviceSelector mDeviceSelector;
+    private LanguageSelector mLanguageSelector;
     private JFrame mFrame;
 
     public MagnifiedView getMagnifiedView() {
@@ -140,6 +161,13 @@
         return mDeviceSelector;
     }
 
+    public LanguageSelector getLanguageSelector(){
+        if (mLanguageSelector == null){
+            mLanguageSelector = new LanguageSelector();
+        }
+        return mLanguageSelector;
+    }
+
     @Override
     public void mouseDragged(MouseEvent e) {
 
@@ -186,29 +214,6 @@
     public void componentResized(ComponentEvent e) {
         calibrateNativeBuffer();
         repaint();
-        /* get set values and then let it resize based off of the values passed through this */
-        // int w = getWidth();
-        // int h = getHeight();
-        // System.out.println( "width=" + getWidth() + " height=" + getHeight());
-        // final int linestride = w;
-        // final int rMask = 0xff;
-        // final int gMask = 0xff00;
-        // final int bMask = 0xff0000;
-        // final int bpp = 24;
-        // synchronized (this) {
-        //     mBuffer = new DataBufferInt(h * linestride);
-        //     WritableRaster raster = Raster.createPackedRaster(mBuffer, w, h, linestride,
-        //             new int[]{rMask, gMask, bMask}, null);
-        //     ColorModel colorModel = new DirectColorModel(bpp, rMask, gMask, bMask);
-        //     mDeviceSelector.mImage = new BufferedImage(colorModel, raster, true, null);
-        //     NativeRenderer.setDeviceInfo(w, h, -1, w/412.0, 5.5);
-        //     int error = NativeRenderer.renderBuffer(0, 0, w, h, linestride, mBuffer.getData());
-        //     if (error != 0) {
-        //         System.out.println("Error rendering native buffer " + error);
-        //     }
-        // }
-        // repaint();
-        // how to resize within ratio of everything
     }
     @Override
     public void componentMoved(ComponentEvent e) {
@@ -237,8 +242,12 @@
     }
 
     public void calibrateNativeBuffer(){
-        DeviceInfo deviceInfo = DeviceInfoDB.getDeviceInfo(getDeviceSelector().currentDevice());
-        boolean magnified = getDeviceSelector().magnified();
+      DeviceInfo deviceInfo = DeviceInfoDB.getDeviceInfo(getDeviceSelector().currentDevice());
+      boolean magnified = getDeviceSelector().magnified();
+      renderNativeBuffer(deviceInfo, magnified);
+      repaint();
+    }
+    public int renderNativeBuffer(DeviceInfo deviceInfo, boolean magnified){
         int w = deviceInfo.getWidthPx();
         int h = deviceInfo.getHeightPx();
         final int linestride = w;
@@ -246,6 +255,7 @@
         final int gMask = 0xff00;
         final int bMask = 0xff0000;
         final int bpp = 24;
+        int error = 0;
         synchronized (this) {
             mBuffer = new DataBufferInt(h * linestride);
             WritableRaster raster = Raster.createPackedRaster(mBuffer, w, h, linestride,
@@ -253,7 +263,7 @@
             ColorModel colorModel = new DirectColorModel(bpp, rMask, gMask, bMask);
             BufferedImage image = new BufferedImage(colorModel, raster, true, null);
             NativeRenderer.setDeviceInfo(deviceInfo, magnified);
-            int error = NativeRenderer.renderBuffer(0, 0, w, h, linestride, mBuffer.getData());
+            error = NativeRenderer.renderBuffer(0, 0, w, h, linestride, mBuffer.getData());
             if (error != 0) {
                 System.out.println("Error rendering native buffer " + error);
             }
@@ -266,6 +276,6 @@
             gc.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
             gc.drawRenderedImage(image, AffineTransform.getScaleInstance(scale, scale));
         }
-        repaint();
+        return error;
     }
 }
