diff --git a/common.ant.xml b/common.ant.xml
index 7bdf6ee..3cbf7c6 100755
--- a/common.ant.xml
+++ b/common.ant.xml
@@ -56,8 +56,8 @@
   <property name="javac.debug" value="true"/>
   <property name="javac.debuglevel" value="lines,vars,source"/>
   <property name="javac.encoding" value="utf-8"/>
-  <property name="javac.source" value="1.6"/>
-  <property name="javac.target" value="1.6"/>
+  <property name="javac.source" value="1.7"/>
+  <property name="javac.target" value="1.7"/>
   <property name="javac.nowarn" value="true"/>
   <property name="junit.out" location="${project.build}/test"/>
   <property name="emma.dir" value="${gwt.tools.redist}/emma"/>
diff --git a/dev/BUILD b/dev/BUILD
index abab9ca..f0ec39a 100644
--- a/dev/BUILD
+++ b/dev/BUILD
@@ -131,11 +131,6 @@
         ["core/src/**/*.java"],
         exclude = ["**/package-info.java"],
     ),
-    # Temporary workaround to ensure Java 6 compatible class files after Java
-    # 7 upgrade.
-    # TODO: only the requestfactory client should be required to be Android
-    # compatible.
-    constraints = ["android"],
     deps = [
         ":compiler.standalone.super",
         "//third_party/java_src/gwt/svn/tools:dev_deps",
diff --git a/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java b/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
index fb78490..55f4719 100644
--- a/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
+++ b/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
@@ -757,7 +757,6 @@
    */
   private static final Map<SourceLevel, Long> jdtLevelByGwtLevel =
       ImmutableMap.<SourceLevel, Long>of(
-          SourceLevel.JAVA6, ClassFileConstants.JDK1_6,
           SourceLevel.JAVA7, ClassFileConstants.JDK1_7,
           SourceLevel.JAVA8, ClassFileConstants.JDK1_8);
 
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/SourceLevel.java b/dev/core/src/com/google/gwt/dev/util/arg/SourceLevel.java
index ca3a955..14d2188 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/SourceLevel.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/SourceLevel.java
@@ -26,7 +26,6 @@
  */
 public enum SourceLevel {
   // Source levels must appear in ascending order for the default setting logic to work.
-  JAVA6("1.6", "6"),
   JAVA7("1.7", "7"),
   JAVA8("1.8", "8");
 
diff --git a/dev/core/test/com/google/gwt/dev/CompilerTest.java b/dev/core/test/com/google/gwt/dev/CompilerTest.java
index 6ce54ac..dafa666 100644
--- a/dev/core/test/com/google/gwt/dev/CompilerTest.java
+++ b/dev/core/test/com/google/gwt/dev/CompilerTest.java
@@ -811,13 +811,11 @@
   }
 
   public void testSourceLevelSelection() {
-    // We are not able to compile to less that Java 6 so, we might as well do Java7 on
-    // these cases.
     assertEquals(SourceLevel.JAVA7, SourceLevel.getBestMatchingVersion("1.4"));
     assertEquals(SourceLevel.JAVA7, SourceLevel.getBestMatchingVersion("1.5"));
+    assertEquals(SourceLevel.JAVA7, SourceLevel.getBestMatchingVersion("1.6"));
+    assertEquals(SourceLevel.JAVA7, SourceLevel.getBestMatchingVersion("1.6_26"));
 
-    assertEquals(SourceLevel.JAVA6, SourceLevel.getBestMatchingVersion("1.6"));
-    assertEquals(SourceLevel.JAVA6, SourceLevel.getBestMatchingVersion("1.6_26"));
     assertEquals(SourceLevel.JAVA7, SourceLevel.getBestMatchingVersion("1.7"));
     assertEquals(SourceLevel.JAVA8, SourceLevel.getBestMatchingVersion("1.8"));
     assertEquals(SourceLevel.JAVA8, SourceLevel.getBestMatchingVersion("1.9"));
diff --git a/tools/api-checker/config/gwt27_28userApi.conf b/tools/api-checker/config/gwt27_28userApi.conf
index b27ed0e..196b577 100644
--- a/tools/api-checker/config/gwt27_28userApi.conf
+++ b/tools/api-checker/config/gwt27_28userApi.conf
@@ -91,7 +91,6 @@
 :**/server/**\
 :**/tools/**\
 :**/vm/**\
-:user/src/com/google/gwt/core/client/impl/JavaScriptExceptionBase.java\
 :user/src/com/google/gwt/core/client/impl/WeakMapping.java\
 :user/src/com/google/gwt/core/shared/impl/ThrowableTypeResolver.java\
 :user/src/com/google/gwt/i18n/**/impl/cldr/**\
diff --git a/user/BUILD b/user/BUILD
index b4ff116..72025a7 100644
--- a/user/BUILD
+++ b/user/BUILD
@@ -288,7 +288,6 @@
             "src/com/google/gwt/core/client/JsDate.java",
             "src/com/google/gwt/core/client/Duration.java",
             "src/com/google/gwt/core/client/Scheduler.java",
-            "src/com/google/gwt/core/client/impl/JavaScriptExceptionBase.java",
             "src/com/google/gwt/user/client/Window.java",
             "src/com/google/gwt/user/client/Window*.java",
             "src/com/google/gwt/user/client/BaseListenerWrapper.java",
diff --git a/user/src/com/google/gwt/core/client/JavaScriptException.java b/user/src/com/google/gwt/core/client/JavaScriptException.java
index 1350037..1395541 100644
--- a/user/src/com/google/gwt/core/client/JavaScriptException.java
+++ b/user/src/com/google/gwt/core/client/JavaScriptException.java
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.core.client;
 
-import com.google.gwt.core.client.impl.JavaScriptExceptionBase;
-
 /**
  * Any JavaScript exceptions occurring within JSNI methods are wrapped as this
  * class when caught in Java code. The wrapping does not occur until the
@@ -43,7 +41,7 @@
  * }
  * </pre>
  */
-public final class JavaScriptException extends JavaScriptExceptionBase {
+public final class JavaScriptException extends RuntimeException {
 
   private static final Object NOT_SET = new Object();
 
@@ -110,6 +108,9 @@
    *          trace
    */
   public JavaScriptException(Object e, String description) {
+    // Stack trace is writeable for outside just for classic devmode but otherwise it is not and we
+    // don't want unnecessary fillInStackTrace calls from super constructor as well.
+    super(null, null, true, !GWT.isScript());
     this.e = e;
     this.description = description;
   }
diff --git a/user/src/com/google/gwt/core/client/impl/JavaScriptExceptionBase.java b/user/src/com/google/gwt/core/client/impl/JavaScriptExceptionBase.java
deleted file mode 100644
index 11362f1..0000000
--- a/user/src/com/google/gwt/core/client/impl/JavaScriptExceptionBase.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2014 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
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.core.client.impl;
-
-/**
- * A helper to super-source just the parent constructor call that doesn't exist in Java6.
- */
-public class JavaScriptExceptionBase extends RuntimeException {
-
-  public JavaScriptExceptionBase() {
-    super(null, null);
-  }
-
-  public JavaScriptExceptionBase(String message) {
-    super(message);
-  }
-}
diff --git a/user/src/com/google/gwt/uibinder/rebind/model/ImplicitCssResource.java b/user/src/com/google/gwt/uibinder/rebind/model/ImplicitCssResource.java
index 894e01a..eb3f08c 100644
--- a/user/src/com/google/gwt/uibinder/rebind/model/ImplicitCssResource.java
+++ b/user/src/com/google/gwt/uibinder/rebind/model/ImplicitCssResource.java
@@ -52,22 +52,17 @@
  */
 public class ImplicitCssResource {
 
-  /**
-   * Class wrapping code using GSS in order to keep Java6 compatibility if GSS is not used.
-   */
-  private static class GssWrapper {
-    private static Set<String> getCssClassNames(String fileName, String cssSource,
-        Set<JClassType> imports, TreeLogger logger) throws UnableToCompleteException {
-      SourceCode sourceCode = new SourceCode(fileName, cssSource);
-      CssTree tree;
-      try {
-        tree = new GssParser(sourceCode).parse();
-      } catch (GssParserException e) {
-        logger.log(TreeLogger.ERROR, "Unable to parse CSS", e);
-        throw new UnableToCompleteException();
-      }
-      return new ClassNamesCollector().getClassNames(tree, imports);
+  private static Set<String> getCssClassNames(String fileName, String cssSource,
+      Set<JClassType> imports, TreeLogger logger) throws UnableToCompleteException {
+    SourceCode sourceCode = new SourceCode(fileName, cssSource);
+    CssTree tree;
+    try {
+      tree = new GssParser(sourceCode).parse();
+    } catch (GssParserException e) {
+      logger.log(TreeLogger.ERROR, "Unable to parse CSS", e);
+      throw new UnableToCompleteException();
     }
+    return new ClassNamesCollector().getClassNames(tree, imports);
   }
 
   private static final CssNameConverter nameConverter = new CssNameConverter();
@@ -132,8 +127,7 @@
       assert urls.size() > 0;
 
       if (gss) {
-       return GssWrapper.getCssClassNames(bodyFile.getName(), body, imports,
-           logger.getTreeLogger());
+       return getCssClassNames(bodyFile.getName(), body, imports, logger.getTreeLogger());
       } else {
         CssStylesheet sheet = GenerateCssAst.exec(logger.getTreeLogger(),
             urls.toArray(new URL[urls.size()]));
diff --git a/user/super/com/google/gwt/core/translatable/com/google/gwt/core/client/impl/JavaScriptExceptionBase.java b/user/super/com/google/gwt/core/translatable/com/google/gwt/core/client/impl/JavaScriptExceptionBase.java
deleted file mode 100644
index 18fb8dd..0000000
--- a/user/super/com/google/gwt/core/translatable/com/google/gwt/core/client/impl/JavaScriptExceptionBase.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2014 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
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.core.client.impl;
-
-import com.google.gwt.core.client.GwtScriptOnly;
-
-/**
- * A super-source version of JavaScriptExceptionBase so that we can call super constructor that
- * disables #fillInStackTrace without breaking Java6 compatibility.
- */
-@GwtScriptOnly
-public class JavaScriptExceptionBase extends RuntimeException {
-
-  public JavaScriptExceptionBase() {
-    // Stack trace is not-writeable from outside and we don't want unnecessary fillInStackTrace
-    // calls from super constructor as well.
-    super(null, null, true, false);
-  }
-
-  public JavaScriptExceptionBase(String message) {
-    super(message);
-  }
-}
