diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD
index ab08d72..7f0f399 100644
--- a/src/main/java/com/google/devtools/build/lib/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/BUILD
@@ -256,6 +256,7 @@
         ":shell",
         ":unix",
         ":vfs",
+        ":windows",
         "//src/main/java/com/google/devtools/common/options",
         "//third_party:guava",
         "//third_party:jsr305",
diff --git a/src/main/java/com/google/devtools/build/lib/shell/Consumers.java b/src/main/java/com/google/devtools/build/lib/shell/Consumers.java
index 37df646..972bfa8 100644
--- a/src/main/java/com/google/devtools/build/lib/shell/Consumers.java
+++ b/src/main/java/com/google/devtools/build/lib/shell/Consumers.java
@@ -129,8 +129,7 @@
   /**
    * This consumer sends the input to a stream while consuming it.
    */
-  private static class StreamingConsumer extends FutureConsumption
-                                         implements OutputConsumer {
+  private static class StreamingConsumer extends FutureConsumption {
     private OutputStream out;
 
     StreamingConsumer(OutputStream out) {
@@ -158,8 +157,7 @@
    * while consuming it. This accumulated stream can be obtained by
    * calling {@link #getAccumulatedOut()}.
    */
-  private static class AccumulatingConsumer extends FutureConsumption
-                                            implements OutputConsumer {
+  private static class AccumulatingConsumer extends FutureConsumption {
     private ByteArrayOutputStream out = new ByteArrayOutputStream();
 
     @Override
@@ -180,8 +178,7 @@
   /**
    * This consumer just discards whatever it reads.
    */
-  private static class DiscardingConsumer extends FutureConsumption
-                                          implements OutputConsumer {
+  private static class DiscardingConsumer extends FutureConsumption {
     private DiscardingConsumer() {
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/util/OsUtils.java b/src/main/java/com/google/devtools/build/lib/util/OsUtils.java
index e633b4f..16d75b0 100644
--- a/src/main/java/com/google/devtools/build/lib/util/OsUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/util/OsUtils.java
@@ -45,11 +45,15 @@
   }
 
   private static boolean jniLibsAvailable() {
+    if (OS.getCurrent() == OS.WINDOWS) {
+      return true;
+    }
+
     if ("0".equals(System.getProperty("io.bazel.UnixFileSystem"))) {
       return false;
     }
-    // JNI libraries work fine on Windows, but at the moment we are not using any.
-    return OS.getCurrent() != OS.WINDOWS;
+
+    return true;
   }
 
   // Force JNI linking at a moment when we have 'installBase' handy, and print
diff --git a/src/main/java/com/google/devtools/build/lib/util/ProcessUtils.java b/src/main/java/com/google/devtools/build/lib/util/ProcessUtils.java
index acbdb8c..c6a4758 100644
--- a/src/main/java/com/google/devtools/build/lib/util/ProcessUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/util/ProcessUtils.java
@@ -15,50 +15,13 @@
 package com.google.devtools.build.lib.util;
 
 import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
+import com.google.devtools.build.lib.windows.WindowsProcesses;
 
 /**
  * OS Process related utilities.
- *
- * <p>Default implementation forwards all requests to
- * {@link com.google.devtools.build.lib.unix.ProcessUtils}. The default implementation
- * can be overridden by {@code #setImplementation(ProcessUtilsImpl)} method.
  */
 @ThreadSafe
 public final class ProcessUtils {
-
-  /**
-   * Describes implementation to which all {@code ProcessUtils} requests are
-   * forwarded.
-   */
-  public interface ProcessUtilsImpl {
-    /** @see ProcessUtils#getgid() */
-    int getgid();
-
-    /** @see ProcessUtils#getpid() */
-    int getpid();
-
-    /** @see ProcessUtils#getuid() */
-    int getuid();
-  }
-
-  private volatile static ProcessUtilsImpl implementation = new ProcessUtilsImpl() {
-
-    @Override
-    public int getgid() {
-      return com.google.devtools.build.lib.unix.ProcessUtils.getgid();
-    }
-
-    @Override
-    public int getpid() {
-      return com.google.devtools.build.lib.unix.ProcessUtils.getpid();
-    }
-
-    @Override
-    public int getuid() {
-      return com.google.devtools.build.lib.unix.ProcessUtils.getuid();
-    }
-  };
-
   private ProcessUtils() {
     // prevent construction.
   }
@@ -67,20 +30,32 @@
    * @return the real group ID of the current process.
    */
   public static int getgid() {
-    return implementation.getgid();
+    if (OS.getCurrent() == OS.WINDOWS) {
+      throw new UnsupportedOperationException();
+    } else {
+      return com.google.devtools.build.lib.unix.ProcessUtils.getgid();
+    }
   }
 
   /**
    * @return the process ID of this process.
    */
   public static int getpid() {
-    return implementation.getpid();
+    if (OS.getCurrent() == OS.WINDOWS) {
+      return WindowsProcesses.getpid();
+    } else {
+      return com.google.devtools.build.lib.unix.ProcessUtils.getpid();
+    }
   }
 
   /**
    * @return the real user ID of the current process.
    */
   public static int getuid() {
-    return implementation.getuid();
+    if (OS.getCurrent() == OS.WINDOWS) {
+      throw new UnsupportedOperationException();
+    } else {
+      return com.google.devtools.build.lib.unix.ProcessUtils.getuid();
+    }
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/windows/WindowsProcesses.java b/src/main/java/com/google/devtools/build/lib/windows/WindowsProcesses.java
index f23508d..f6d6260 100644
--- a/src/main/java/com/google/devtools/build/lib/windows/WindowsProcesses.java
+++ b/src/main/java/com/google/devtools/build/lib/windows/WindowsProcesses.java
@@ -18,5 +18,25 @@
  * Process management on Windows.
  */
 public class WindowsProcesses {
-  public static native String helloWorld(int arg, String fruit);
+  private static boolean jniLoaded = false;
+  private WindowsProcesses() {
+    // Prevent construction
+  }
+
+  private static native String helloWorld(int arg, String fruit);
+  private static native int nativeGetpid();
+
+  public static int getpid() {
+    ensureJni();
+    return nativeGetpid();
+  }
+
+  private static synchronized void ensureJni() {
+    if (jniLoaded) {
+      return;
+    }
+
+    System.loadLibrary("windows_jni");
+    jniLoaded = true;
+  }
 }
