diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java
index 1b73d49..0557d69 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/SelectionScriptLinker.java
@@ -295,18 +295,7 @@
   protected EmittedArtifact emitSelectionScript(TreeLogger logger,
       LinkerContext context, ArtifactSet artifacts)
       throws UnableToCompleteException {
-    /*
-     * Last modified is important to keep Development Mode refreses from
-     * clobbering Production Mode compiles. We set the timestamp on the
-     * Development Mode selection script to the same mod time as the module (to
-     * allow updates). For Production Mode, we just set it to now.
-     */
-    long lastModified;
-    if (permutationsUtil.getPermutationsMap().isEmpty()) {
-      lastModified = context.getModuleLastModified();
-    } else {
-      lastModified = System.currentTimeMillis();
-    }
+    long lastModified = context.getModuleLastModified();
     String ss = generateSelectionScript(logger, context, artifacts);
     return emitString(logger, ss, context.getModuleName()
         + ".nocache.js", lastModified);
diff --git a/dev/core/src/com/google/gwt/dev/util/OutputFileSet.java b/dev/core/src/com/google/gwt/dev/util/OutputFileSet.java
index 4f95198..79cee97 100644
--- a/dev/core/src/com/google/gwt/dev/util/OutputFileSet.java
+++ b/dev/core/src/com/google/gwt/dev/util/OutputFileSet.java
@@ -69,14 +69,12 @@
 
   /**
    * Opens a file for write. If writing to a zip file and the file already exists,
-   * there will be no effect. If writing to a directory, the file exists, and the
-   * given timestamp is older than the current timestamp, there will be no effect.
+   * there will be no effect. If writing to a directory already existing files are
+   * overwritten.
    *
-   * @param timeStampMillis last modified time in milliseconds, or
-   *          TIMESTAMP_UNAVAILABLE to force an overwrite.
+   * @param timeStampMillis last modified time in milliseconds.
    * @return the output stream to write to, possibly a NullOutputStream
    */
-  // TODO: revalidate whether any timestamp based overwrite prevention is needed.
   public OutputStream openForWrite(String path, long timeStampMillis)
       throws IOException {
     pathsSeen.add(path);
diff --git a/dev/core/src/com/google/gwt/dev/util/OutputFileSetOnDirectory.java b/dev/core/src/com/google/gwt/dev/util/OutputFileSetOnDirectory.java
index d772a9a..17720f7 100644
--- a/dev/core/src/com/google/gwt/dev/util/OutputFileSetOnDirectory.java
+++ b/dev/core/src/com/google/gwt/dev/util/OutputFileSetOnDirectory.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.dev.util;
 
-import com.google.gwt.dev.util.NullOutputFileSet.NullOutputStream;
 import com.google.gwt.dev.util.collect.HashSet;
 
 import java.io.File;
@@ -46,11 +45,6 @@
   protected OutputStream createNewOutputStream(String path,
       final long timeStampMillis) throws IOException {
     final File file = pathToFile(path);
-    if (file.exists() && timeStampMillis != TIMESTAMP_UNAVAILABLE &&
-        file.lastModified() > timeStampMillis) {
-      return new NullOutputStream();
-    }
-
     mkdirs(file.getParentFile());
     return new FileOutputStream(file) {
       @Override
diff --git a/dev/core/test/com/google/gwt/dev/util/OutputFileSetOnDirectoryTest.java b/dev/core/test/com/google/gwt/dev/util/OutputFileSetOnDirectoryTest.java
index 0c2283e..599e9ce 100644
--- a/dev/core/test/com/google/gwt/dev/util/OutputFileSetOnDirectoryTest.java
+++ b/dev/core/test/com/google/gwt/dev/util/OutputFileSetOnDirectoryTest.java
@@ -65,7 +65,7 @@
     }
   }
 
-  public void testNewFileOlderTimestampDies() throws IOException {
+  public void testNewFileOlderTimestampOverwrites() throws IOException {
     File work = Utility.makeTemporaryDirectory(null, "outputfileset");
     try {
       OutputFileSetOnDirectory output = new OutputFileSetOnDirectory(work, "test/");
@@ -75,7 +75,7 @@
       firstStream.close();
 
       OutputStream secondStream = output.createNewOutputStream("path/to/file", 1000);
-      assertFalse(secondStream instanceof FileOutputStream);
+      assertTrue(secondStream instanceof FileOutputStream);
       secondStream.close();
     } finally {
       Util.recursiveDelete(work, false);
diff --git a/user/test/com/google/gwt/core/ext/linker/impl/SelectionScriptLinkerUnitTest.java b/user/test/com/google/gwt/core/ext/linker/impl/SelectionScriptLinkerUnitTest.java
index 38e9d73..6e8d0b7 100644
--- a/user/test/com/google/gwt/core/ext/linker/impl/SelectionScriptLinkerUnitTest.java
+++ b/user/test/com/google/gwt/core/ext/linker/impl/SelectionScriptLinkerUnitTest.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -147,8 +147,8 @@
   }
 
   /**
-   * Test timestamps on the selection script. For Development Mode, it should match
-   * the module's timestamp. For Production Mode, it should be current.
+   * Test timestamps on the selection script. For both Development Mode and ProductionMode it should
+   * match the module's timestamp.
    */
   public void testTimestampOnSelectionScript() throws UnableToCompleteException {
     // Development Mode
@@ -170,7 +170,7 @@
       updated = new ShardableSelectionScriptLinker().link(TreeLogger.NULL,
           new MockLinkerContext(), updated, false);
       EmittedArtifact selectionScript = findSelectionScript(updated);
-      assertTrue(MOCK_MODULE_LAST_MODIFIED != selectionScript.getLastModified());
+      assertEquals(MOCK_MODULE_LAST_MODIFIED, selectionScript.getLastModified());
     }
   }
 
