diff --git a/frontend/afe/site_rpc_interface.py b/frontend/afe/site_rpc_interface.py
index cb6a4f7..fa6cb15 100644
--- a/frontend/afe/site_rpc_interface.py
+++ b/frontend/afe/site_rpc_interface.py
@@ -17,6 +17,7 @@
 from autotest_lib.client.common_lib import global_config
 from autotest_lib.client.common_lib import priorities
 from autotest_lib.client.common_lib.cros import dev_server
+from autotest_lib.frontend.afe import rpc_utils
 from autotest_lib.server import utils
 from autotest_lib.server.cros.dynamic_suite import constants
 from autotest_lib.server.cros.dynamic_suite import control_file_getter
@@ -32,19 +33,6 @@
 # Relevant CrosDynamicSuiteExceptions are defined in client/common_lib/error.py.
 
 
-def _rpc_utils():
-    """Returns the rpc_utils module.  MUST be mocked for unit tests.
-
-    rpc_utils initializes django, which we can't do in unit tests.
-    This layer of indirection allows us to only load that module if we're
-    not running unit tests.
-
-    @return: autotest_lib.frontend.afe.rpc_utils
-    """
-    from autotest_lib.frontend.afe import rpc_utils
-    return rpc_utils
-
-
 def canonicalize_suite_name(suite_name):
     return 'test_suites/control.%s' % suite_name
 
@@ -192,7 +180,7 @@
 
     control_file = tools.inject_vars(inject_dict, control_file)
 
-    return _rpc_utils().create_job_common(name,
+    return rpc_utils.create_job_common(name,
                                           priority=priority,
                                           timeout_mins=timeout_mins,
                                           max_runtime_mins=timeout*60,
@@ -224,7 +212,7 @@
     config_values = {}
     for section in sections:
         config_values[section] = _CONFIG.config.items(section)
-    return _rpc_utils().prepare_for_serialization(config_values)
+    return rpc_utils.prepare_for_serialization(config_values)
 
 
 @moblab_only
diff --git a/frontend/afe/site_rpc_interface_unittest.py b/frontend/afe/site_rpc_interface_unittest.py
index 73f56ef..999bad7 100644
--- a/frontend/afe/site_rpc_interface_unittest.py
+++ b/frontend/afe/site_rpc_interface_unittest.py
@@ -15,6 +15,8 @@
 
 import common
 
+from autotest_lib.frontend import setup_django_environment
+from autotest_lib.frontend.afe import rpc_utils
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib import global_config
 from autotest_lib.client.common_lib import priorities
@@ -40,17 +42,6 @@
     _TIMEOUT = 24
 
 
-    class rpc_utils(object):
-        """Mockable class to fake autotest rpc_utils module."""
-        def create_job_common(self, name, **kwargs):
-            """Mock method rpc_utils.create_job_common().
-
-            @param name: Name of job.
-            @param kwargs: Other arguments.
-            """
-            pass
-
-
     def setUp(self):
         super(SiteRpcInterfaceTest, self).setUp()
         self._SUITE_NAME = site_rpc_interface.canonicalize_suite_name(
@@ -86,8 +77,8 @@
         """
         download_started_time = constants.DOWNLOAD_STARTED_TIME
         payload_finished_time = constants.PAYLOAD_FINISHED_TIME
-        r = self.mox.CreateMock(SiteRpcInterfaceTest.rpc_utils)
-        r.create_job_common(mox.And(mox.StrContains(self._NAME),
+        self.mox.StubOutWithMock(rpc_utils, 'create_job_common')
+        rpc_utils.create_job_common(mox.And(mox.StrContains(self._NAME),
                                     mox.StrContains(self._BUILD)),
                             priority=self._PRIORITY,
                             timeout_mins=self._TIMEOUT*60,
@@ -101,8 +92,6 @@
                             keyvals=mox.And(mox.In(download_started_time),
                                             mox.In(payload_finished_time))
                             ).AndReturn(to_return)
-        self.mox.StubOutWithMock(site_rpc_interface, '_rpc_utils')
-        site_rpc_interface._rpc_utils().AndReturn(r)
 
 
     def testStageBuildFail(self):
@@ -301,14 +290,11 @@
         config_mock.config.items('section2').AndReturn([('item3', 'value3'),
                                                         ('item4', 'value4')])
 
-        r = self.mox.CreateMock(SiteRpcInterfaceTest.rpc_utils)
-        r = mox.MockAnything()
-        r.prepare_for_serialization({'section1' : [('item1', 'value1'),
-                                                   ('item2', 'value2')],
-                                     'section2' : [('item3', 'value3'),
-                                                   ('item4', 'value4')]})
-        self.mox.StubOutWithMock(site_rpc_interface, '_rpc_utils')
-        site_rpc_interface._rpc_utils().AndReturn(r)
+        rpc_utils.prepare_for_serialization(
+            {'section1' : [('item1', 'value1'),
+                           ('item2', 'value2')],
+             'section2' : [('item3', 'value3'),
+                           ('item4', 'value4')]})
         self.mox.ReplayAll()
         site_rpc_interface.get_config_values()
 
