diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java
index 4c065da548fbf3ec98305dad5c2571855c3c7e90..49ca414bb964362a526ee08403405edf31b24b5f 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java
@@ -350,7 +350,7 @@ public class RDeparse {
             }
         }
 
-        private static MessageDigest digest = null;
+        private static ThreadLocal<MessageDigest> digestTheadLocal = new ThreadLocal<>();
 
         private Path emitToFile(String qualifiedFunctionName, String deparsePath) throws IOException, NoSuchAlgorithmException {
             Path tmpDir = Paths.get(deparsePath);
@@ -358,8 +358,10 @@ public class RDeparse {
 
             Path path;
             if (FastROptions.EmitTmpHashed.getBooleanValue()) {
+                MessageDigest digest = digestTheadLocal.get();
                 if (digest == null) {
                     digest = MessageDigest.getInstance("SHA-256");
+                    digestTheadLocal.set(digest);
                 }
                 String printHexBinary = Utils.toHexString(digest.digest(sb.toString().getBytes()));
                 assert printHexBinary.length() > 10;