diff --git a/Lib/compiler/symbols.py b/Lib/compiler/symbols.py
index 872f174..3ab72f3 100644
--- a/Lib/compiler/symbols.py
+++ b/Lib/compiler/symbols.py
@@ -61,6 +61,7 @@
         d = {}
         d.update(self.defs)
         d.update(self.uses)
+        d.update(self.globals)
         return d.keys()
 
     def add_child(self, child):
@@ -111,8 +112,7 @@
             self.visit(n, parent)
         scope = FunctionScope(node.name, self.module, self.klass)
         self.scopes[node] = scope
-        for name in node.argnames:
-            scope.add_param(name)
+        self._do_args(scope, node.argnames)
         self.visit(node.code, scope)
 
     def visitLambda(self, node, parent):
@@ -120,10 +120,16 @@
             self.visit(n, parent)
         scope = LambdaScope(self.module, self.klass)
         self.scopes[node] = scope
-        for name in node.argnames:
-            scope.add_param(name)
+        self._do_args(scope, node.argnames)
         self.visit(node.code, scope)
 
+    def _do_args(self, scope, args):
+        for name in args:
+            if type(name) == types.TupleType:
+                self._do_args(scope, name)
+            else:
+                scope.add_param(name)
+
     def visitClass(self, node, parent):
         parent.add_def(node.name)
         for n in node.bases:
@@ -217,7 +223,7 @@
 
     def get_names(syms):
         return [s for s in [s.get_name() for s in syms.get_symbols()]
-                if not s.startswith('_[')]        
+                if not (s.startswith('_[') or s.startswith('.'))]        
     
     for file in sys.argv[1:]:
         print file
@@ -256,6 +262,6 @@
                     if not list_eq(get_names(s.get_namespace()),
                                    l[0].get_names()):
                         print s.get_name()
-                        print get_names(s.get_namespace())
-                        print l[0].get_names()
+                        print sort(get_names(s.get_namespace()))
+                        print sort(l[0].get_names())
                         sys.exit(-1)
