diff --git a/test/crossrunner/report.py b/test/crossrunner/report.py
index 7e1b0c7..9231a8b 100644
--- a/test/crossrunner/report.py
+++ b/test/crossrunner/report.py
@@ -28,7 +28,6 @@
 import time
 import traceback
 
-from .compat import logfile_open, path_join, str_join
 from .test import TestEntry
 
 LOG_DIR = 'log'
@@ -37,6 +36,10 @@
 FAIL_JSON = 'known_failures_%s.json'
 
 
+def logfile_open(*args):
+    return open(*args, errors='replace')
+
+
 def generate_known_failures(testdir, overwrite, save, out):
     def collect_failures(results):
         success_index = 5
@@ -44,7 +47,7 @@
             if not r[success_index]:
                 yield TestEntry.get_name(*r)
     try:
-        with logfile_open(path_join(testdir, RESULT_JSON), 'r') as fp:
+        with logfile_open(os.path.join(testdir, RESULT_JSON), 'r') as fp:
             results = json.load(fp)
     except IOError:
         sys.stderr.write('Unable to load last result. Did you run tests ?\n')
@@ -67,7 +70,7 @@
 
 def load_known_failures(testdir):
     try:
-        with logfile_open(path_join(testdir, FAIL_JSON % platform.system()), 'r') as fp:
+        with logfile_open(os.path.join(testdir, FAIL_JSON % platform.system()), 'r') as fp:
             return json.load(fp)
     except IOError:
         return []
@@ -84,8 +87,8 @@
 
     @classmethod
     def test_logfile(cls, test_name, prog_kind, dir=None):
-        relpath = path_join('log', '%s_%s.log' % (test_name, prog_kind))
-        return relpath if not dir else os.path.realpath(path_join(dir, relpath))
+        relpath = os.path.join('log', '%s_%s.log' % (test_name, prog_kind))
+        return relpath if not dir else os.path.realpath(os.path.join(dir, relpath))
 
     def _start(self):
         self._start_time = time.time()
@@ -199,7 +202,7 @@
 
     def _print_header(self):
         self._print_date()
-        print('Executing: %s' % str_join(' ', self._prog.command), file=self.out)
+        print('Executing: %s' % ' '.join(self._prog.command), file=self.out)
         print('Directory: %s' % self._prog.workdir, file=self.out)
         print('config:delay: %s' % self._test.delay, file=self.out)
         print('config:timeout: %s' % self._test.timeout, file=self.out)
@@ -221,8 +224,8 @@
         super(SummaryReporter, self).__init__()
         self._basedir = basedir
         self._testdir_rel = testdir_relative
-        self.logdir = path_join(self.testdir, LOG_DIR)
-        self.out_path = path_join(self.testdir, RESULT_JSON)
+        self.logdir = os.path.join(self.testdir, LOG_DIR)
+        self.out_path = os.path.join(self.testdir, RESULT_JSON)
         self.concurrent = concurrent
         self.out = sys.stdout
         self._platform = platform.system()
@@ -239,7 +242,7 @@
 
     @property
     def testdir(self):
-        return path_join(self._basedir, self._testdir_rel)
+        return os.path.join(self._basedir, self._testdir_rel)
 
     def _result_string(self, test):
         if test.success:
