        }
  
        // Body
-@@ -121,7 +122,10 @@ class SyntacticScopeCreator implements ScopeCreator {
+@@ -121,7 +122,9 @@ class SyntacticScopeCreator implements ScopeCreator {
          for (Node child = n.getFirstChild();
               child != null;) {
            Node next = child.getNext();
 -          declareVar(child);
 +          Preconditions.checkState(child.getType() == Token.NAME);
-+
 +          String name = child.getString();
 +          declareVar(name, child, n, parent, null, n);
            child = next;
          }
          return;
-@@ -136,7 +140,7 @@ class SyntacticScopeCreator implements ScopeCreator {
+@@ -136,7 +139,7 @@ class SyntacticScopeCreator implements ScopeCreator {
            // This is invalid, but allow it so the checks can catch it.
            return;
          }

diff --git a/src/com/google/javascript/jscomp/AliasExternals.java b/src/com/google/javascript/jscomp/AliasExternals.java
index 195a0ccc..e3256b13 100644
--- a/src/com/google/javascript/jscomp/AliasExternals.java
+++ b/src/com/google/javascript/jscomp/AliasExternals.java
@@ -112,6 +112,9 @@ class AliasExternals implements CompilerPass {
   /** Map of all globals that we may alias */
   private final Map<String, Symbol> globals = Maps.newHashMap();
 
+  /** Holds all of the globals that can be aliased to GLOBAL_ */
+  private final List<Node> globalUses = Lists.newArrayList();
+
   /** Reference to JS Compiler */
   private final AbstractCompiler compiler;
 
@@ -587,10 +590,10 @@ class AliasExternals implements CompilerPass {
     }
 
     // Change the references to the globals
+    for (Node globalUse : globalUses) {
+      replaceGlobalUse(globalUse);
+    }
     for (Symbol global : globals.values()) {
-      for (Node globalUse : global.uses) {
-        replaceGlobalUse(globalUse);
-      }
       if (global.aliasAccessor) {
         addGlobalAliasNode(global,
                            getAddingRoot(global.deepestModuleAccess));
@@ -657,10 +660,6 @@ class AliasExternals implements CompilerPass {
         if (global != null) {
           // If a variable is declared in both externs and normal source,
           // don't alias it.
-          if (n.getParent().getType() == Token.VAR ||
-              n.getParent().getType() == Token.FUNCTION) {
-            globals.remove(name);
-          }
 
           boolean isFirst = parent.getFirstChild() == n;
           // If a global is being assigned to or otherwise modified, then we
@@ -677,7 +676,7 @@ class AliasExternals implements CompilerPass {
             global.recordAccessor(t);
           }
 
-          global.uses.add(n);
+          globalUses.add(n);
         }
       }
     }
@@ -751,7 +750,6 @@ class AliasExternals implements CompilerPass {
     JSModule deepestModuleAccess = null;
     JSModule deepestModuleMutate = null;
 
-    List<Node> uses = Lists.newArrayList();
 
     private Symbol(String name, boolean isConstant) {
       this.name = name;
diff --git a/src/com/google/javascript/jscomp/Normalize.java b/src/com/google/javascript/jscomp/Normalize.java
index c14ac8f1..4c99858e 100644
--- a/src/com/google/javascript/jscomp/Normalize.java

         return;   // should not examine function's children
 
       case Token.CATCH:
@@ -148,7 +151,7 @@ class SyntacticScopeCreator implements ScopeCreator {
         final Node var = n.getFirstChild();
         final Node block = var.getNext();
 
