diff --git a/client/site_tests/firmware_TouchMTB/firmware_utils.py b/client/site_tests/firmware_TouchMTB/firmware_utils.py
index c2c8a4d..ea3e93a 100644
--- a/client/site_tests/firmware_TouchMTB/firmware_utils.py
+++ b/client/site_tests/firmware_TouchMTB/firmware_utils.py
@@ -19,22 +19,6 @@
     return ':0'
 
 
-def get_screen_size():
-    """Get the screen size using xwininfo."""
-    cmd = 'DISPLAY=:0 xwininfo -root'
-    wininfo = common_util.simple_system_output(cmd)
-    # the geometry string looks like:
-    #     "  -geometry 3840x1200+0+0"
-    geometry_pattern = re.compile('\s*-geometry\s*(\d+)x(\d+)+.*', re.I)
-    for line in wininfo.splitlines():
-        result = geometry_pattern.search(line)
-        if result:
-            width = int(result.group(1))
-            height = int(result.group(2))
-            return (width, height)
-    return None
-
-
 def get_current_time_str():
     """Get the string of current time."""
     time_format = '%Y%m%d_%H%M%S'
@@ -151,7 +135,12 @@
 
 
 def create_log_dir(firmware_version, mode):
-    """Create a directory to save the report and device event files."""
+    """
+    Create a directory to save the report and device event files.
+
+    @param firmware_version: The firmware version.
+    @param mode: The mode with which to create the directory.
+    """
     dir_basename = conf.filename.sep.join([get_current_time_str(),
                                            conf.fw_prefix + firmware_version,
                                            mode])
@@ -243,18 +232,33 @@
         return self.prefix_space
 
     def print_report_line(self, msg):
-        """Print the line with proper indentation."""
+        """
+        Print the line with proper indentation.
+
+        @param msg: The line to print.
+        """
+
         self.report.write(self.prefix_space + str(msg) + os.linesep)
 
     def print_window(self, msg):
-        """Print the message to the result window."""
+        """
+        Print the message to the result window.
+
+        @param msg: The line to print.
+        """
+
         if type(msg) is list:
             msg = os.linesep.join(msg)
         self.win.set_result(msg)
         print msg
 
     def _print_report(self, msg):
-        """Print the message to the report."""
+        """
+        Print the message to the report.
+
+        @param msg: The line to print.
+        """
+
         if type(msg) is list:
             for line in msg:
                 self.print_report_line(line)
@@ -267,7 +271,10 @@
         Usage of the method: the validator test result of a gesture may
         be discarded because the user chooses to re-perform the gesture
         again. So it should be able to over-write the message.
+
+        @param msg: The line to print.
         """
+
         self.msg = msg
 
     def flush_report(self):
@@ -277,18 +284,29 @@
             self.msg = None
 
     def print_report(self, msg):
-        """Print the message to the report."""
+        """
+        Print the message to the report.
+
+        @param msg: The line to print.
+        """
+
         # Print any buffered message first.
         self.flush_report()
         # Print this incoming message
         self._print_report(msg)
 
     def print_all(self, msg):
-        """Print the message to both report and to the window."""
+        """
+        Print the message to both report and to the window.
+
+        @param msg: The line to print.
+        """
+
         self.print_window(msg)
         self.buffer_report(msg)
 
 
+#TODO: This class is not Freon-ready!
 class ScreenShot:
     """Handle screen shot."""
 
@@ -303,7 +321,12 @@
         self.get_id_cmd = 'DISPLAY=:0 xwininfo -root -tree'
 
     def dump_window(self, filename):
-        """Dump the screenshot of a window to the specified file name."""
+        """
+        Dump the screenshot of a window to the specified file name.
+
+        @param filename: The filename to save the screenshot as.
+        """
+
         win_id = self._get_win_id()
         if win_id:
             dump_cmd = self.dump_window_format % (win_id, filename)
@@ -312,7 +335,12 @@
             print 'Warning: cannot get the window id.'
 
     def dump_root(self, filename):
-        """Dump the screenshot of root to the specified file name."""
+        """
+        Dump the screenshot of root to the specified file name.
+
+        @param filename: The filename to save the screenshot as.
+        """
+
         dump_cmd = self.dump_root_format % (self.geometry_str, filename)
         common_util.simple_system(dump_cmd)
 
diff --git a/client/site_tests/firmware_TouchMTB/main.py b/client/site_tests/firmware_TouchMTB/main.py
index 2092422..10a91de 100755
--- a/client/site_tests/firmware_TouchMTB/main.py
+++ b/client/site_tests/firmware_TouchMTB/main.py
@@ -11,6 +11,8 @@
 import os
 import sys
 
+from client.cros.graphics import graphics_utils
+
 import common
 import cros_gs
 import firmware_utils
@@ -255,7 +257,7 @@
 
     def _get_screen_size(self):
         """Get the screen size."""
-        self.screen_size = firmware_utils.get_screen_size()
+        self.screen_size = graphics_utils.get_screen_resolution()
 
     def _get_touch_device_window_geometry(self):
         """Get the preferred window geometry to display mtplot."""
