diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
index f9ad04a..c40f4d5 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardLinkerContext.java
@@ -47,7 +47,6 @@
 import com.google.gwt.dev.js.ast.JsContext;
 import com.google.gwt.dev.js.ast.JsFunction;
 import com.google.gwt.dev.js.ast.JsModVisitor;
-import com.google.gwt.dev.js.ast.JsName;
 import com.google.gwt.dev.js.ast.JsProgram;
 import com.google.gwt.dev.js.ast.JsScope;
 import com.google.gwt.dev.resource.ResourceOracle;
@@ -436,8 +435,7 @@
     Reader r = new StringReader(program);
     JsProgram jsProgram = new JsProgram();
     JsScope topScope = jsProgram.getScope();
-    JsName funcName = topScope.declareName(getModuleFunctionName());
-    funcName.setObfuscatable(false);
+    topScope.declareUnobfuscatableName(getModuleFunctionName());
 
     try {
       SourceInfo sourceInfo = jsProgram.createSourceInfo(1,
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index d24ae56..0da095f 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -440,8 +440,7 @@
       } else {
         JsName jsName;
         if (x.isJsProperty()) {
-          jsName = scopeStack.peek().declareName(name, name);
-          jsName.setObfuscatable(false);
+          jsName = scopeStack.peek().declareUnobfuscatableName(name);
         } else {
           jsName = scopeStack.peek().declareName(mangleName, name);
         }
@@ -719,24 +718,17 @@
 
     private final Map<String, Object> exportedMembersByExportName = new TreeMap<String, Object>();
 
-    private final JsName arrayLength = objectScope.declareName("length");
-
     private final Map<JClassType, JsFunction> clinitMap = Maps.newHashMap();
 
     private JMethod currentMethod = null;
 
-    private final JsName globalTemp = topScope.declareName("_");
+    private final JsName arrayLength = objectScope.declareUnobfuscatableName("length");
 
-    private final JsName prototype = objectScope.declareName("prototype");
+    private final JsName globalTemp = topScope.declareUnobfuscatableName("_");
 
-    private final JsName call = objectScope.declareName("call");
+    private final JsName prototype = objectScope.declareUnobfuscatableName("prototype");
 
-    {
-      globalTemp.setObfuscatable(false);
-      prototype.setObfuscatable(false);
-      call.setObfuscatable(false);
-      arrayLength.setObfuscatable(false);
-    }
+    private final JsName call = objectScope.declareUnobfuscatableName("call");
 
     /**
      * Holds any local variable declarations which must be inserted into the current JS function
@@ -2575,8 +2567,7 @@
     private void generateToStringAlias(JClassType x, List<JsStatement> globalStmts) {
       JMethod toStringMethod = program.getIndexedMethod("Object.toString");
       if (x.getMethods().contains(toStringMethod)) {
-        JsName toStringName = objectScope.declareName("toString");
-        toStringName.setObfuscatable(false);
+        JsName toStringName = objectScope.declareUnobfuscatableName("toString");
         generateVTableAlias(globalStmts, toStringMethod, toStringName);
       }
     }
@@ -2651,8 +2642,7 @@
 
         if (method.exposesJsMethod()) {
           String jsName = method.getJsName();
-          JsName exportedName = interfaceScope.declareName(jsName, jsName);
-          exportedName.setObfuscatable(false);
+          JsName exportedName = interfaceScope.declareUnobfuscatableName(jsName);
           generateVTableAlias(globalStmts, method, exportedName);
         }
 
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java b/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java
index 6860e88..184ef75 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/JjsUtils.java
@@ -444,7 +444,7 @@
       names = new JsName[stringNames.length];
       for (int i = 0; i < stringNames.length; i++) {
         names[i] = new JsName(null, stringNames[i], stringNames[i]);
-        names[i].setObfuscatable(false);
+        names[i].setUnobfuscatable();
       }
     }
 
diff --git a/dev/core/src/com/google/gwt/dev/js/JsSymbolResolver.java b/dev/core/src/com/google/gwt/dev/js/JsSymbolResolver.java
index beeb750..67d4970 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsSymbolResolver.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsSymbolResolver.java
@@ -37,15 +37,13 @@
         name = getScope().findExistingName(ident);
         if (name == null) {
           // No clue what this is; create a new unobfuscatable name
-          name = program.getScope().declareName(ident);
-          name.setObfuscatable(false);
+          name = program.getScope().declareUnobfuscatableName(ident);
         }
       } else {
         name = program.getObjectScope().findExistingName(ident);
         if (name == null) {
           // No clue what this is; create a new unobfuscatable name
-          name = program.getObjectScope().declareName(ident);
-          name.setObfuscatable(false);
+          name = program.getObjectScope().declareUnobfuscatableName(ident);
         }
       }
       x.resolve(name);
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsName.java b/dev/core/src/com/google/gwt/dev/js/ast/JsName.java
index b0eb6a7..3b85f27 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsName.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsName.java
@@ -76,8 +76,8 @@
     return ref;
   }
 
-  public void setObfuscatable(boolean isObfuscatable) {
-    this.isObfuscatable = isObfuscatable;
+  public void setUnobfuscatable() {
+    this.isObfuscatable = false;
   }
 
   public void setShortIdent(String shortIdent) {
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsRootName.java b/dev/core/src/com/google/gwt/dev/js/ast/JsRootName.java
index ef7411f..4b76591 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsRootName.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsRootName.java
@@ -34,11 +34,11 @@
 
   JsRootName(JsRootScope rootScope, String ident) {
     super(rootScope, ident, ident);
-    super.setObfuscatable(false);
+    super.setUnobfuscatable();
   }
 
   @Override
-  public void setObfuscatable(boolean isObfuscatable) {
+  public void setUnobfuscatable() {
     throw new UnsupportedOperationException("Root names are immutable");
   }
 
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsScope.java b/dev/core/src/com/google/gwt/dev/js/ast/JsScope.java
index 45ee198..9c4072f 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsScope.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsScope.java
@@ -82,6 +82,18 @@
   }
 
   /**
+   * Gets a name object associated with the specified ident in this scope, creating it if necessary,
+   * and makes it non obfuscatable.
+   *
+   * @param ident An identifier that is unique within this scope.
+   */
+  public final JsName declareUnobfuscatableName(String ident) {
+    JsName name = declareName(ident);
+    name.setUnobfuscatable();
+    return name;
+  }
+
+  /**
    * Attempts to find the name object for the specified ident, searching in this scope, and if not
    * found, in the parent scopes.
    *
diff --git a/dev/core/test/com/google/gwt/dev/js/JsNamerTest.java b/dev/core/test/com/google/gwt/dev/js/JsNamerTest.java
index c81399b..bb24cfa 100644
--- a/dev/core/test/com/google/gwt/dev/js/JsNamerTest.java
+++ b/dev/core/test/com/google/gwt/dev/js/JsNamerTest.java
@@ -146,7 +146,7 @@
       String functionName = "foo" + JsIncrementalNamer.RESERVED_IDENT_SUFFIX;
       JsProgram jsProgram = parseJs(
           "function " + functionName + "() { return 42; }");
-      jsProgram.getScope().findExistingName(functionName).setObfuscatable(false);
+      jsProgram.getScope().findExistingName(functionName).setUnobfuscatable();
       rename(jsProgram, JsOutputOption.OBFUSCATED, true);
       fail("Naming an unobfuscatable identifier containing the reserved suffix should have "
           + "thrown an exception in JsIncrementalNamer.");
