diff --git a/sio/executors/checker.py b/sio/executors/checker.py
index 7e3f29d..eb16080 100644
--- a/sio/executors/checker.py
+++ b/sio/executors/checker.py
@@ -58,11 +58,13 @@ def execute_checker(with_stderr=False, stderr=None):
 
     return renv['stdout']
 
-def _run_compare(env):
-    e = SandboxExecutor('exec-sandbox-v1.2')
-    renv = _run_in_executor(env, [os.path.join('bin', 'compare'),
-            'hint', 'out'], e, ignore_errors=True)
-    return renv['stdout']
+
+def _run_compare(env, format):
+    e = SandboxExecutor('oicompare-sandbox-v1.0.2')
+    renv = _run_in_executor(
+        env, [os.path.join('bin', 'oicompare'), 'hint', 'out', format], e, ignore_errors=True
+    )
+    return renv
 
 def _limit_length(s):
     if len(s) > RESULT_STRING_LENGTH_LIMIT:
@@ -83,7 +85,21 @@ def run(environ, use_sandboxes=True):
 
             output = _run_checker(environ, use_sandboxes)
         elif use_sandboxes:
-            output = _run_compare(environ)
+            renv = _run_compare(environ, environ.get('checker_format', 'english_abbreviated'))
+            if renv['return_code'] == 0:
+                environ['result_code'] = 'OK'
+                environ['result_percentage'] = (100, 1)
+            elif renv['return_code'] == 1:
+                environ['result_code'] = 'WA'
+                environ['result_percentage'] = (0, 1)
+                # Should be redundant because we are using oicompare with abbreviated output,
+                # but just in case.
+                environ['result_string'] = _limit_length(renv['stdout'][0])
+            else:
+                raise CheckerError(
+                    'oicompare returned code(%d). Checker renv: %s' % (renv['return_code'], renv)
+                )
+            return environ
         else:
             output = _run_diff(environ)
     except (CheckerError, ExecError) as e: