Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 29f9e20c3cabdb3ee724c7e3c4b6cc97003758c9)
+++ src/SymTab/Indexer.cc	(revision c194661e377fb587400b93fef5a817d3d77ac641)
@@ -272,4 +272,16 @@
 	}
 
+	StructDecl *Indexer::globalLookupStruct( const std::string &id ) const {
+		return lookupStructAtScope( id, 0 );
+	}
+
+	UnionDecl *Indexer::globalLookupUnion( const std::string &id ) const {
+		return lookupUnionAtScope( id, 0 );
+	}
+
+	EnumDecl *Indexer::globalLookupEnum( const std::string &id ) const {
+		return lookupEnumAtScope( id, 0 );
+	}
+
 	EnumDecl *Indexer::lookupEnum( const std::string &id ) const {
 		if ( ! tables ) return 0;
@@ -347,4 +359,5 @@
 		if ( ! tables ) return 0;
 		if ( tables->scope < scope ) return 0;
+		if ( tables->scope > scope ) return tables->base.lookupTypeAtScope( id, scope );
 
 		TypeTable::const_iterator ret = tables->typeTable.find( id );
@@ -355,4 +368,5 @@
 		if ( ! tables ) return 0;
 		if ( tables->scope < scope ) return 0;
+		if ( tables->scope > scope ) return tables->base.lookupStructAtScope( id, scope );
 
 		StructTable::const_iterator ret = tables->structTable.find( id );
@@ -363,4 +377,5 @@
 		if ( ! tables ) return 0;
 		if ( tables->scope < scope ) return 0;
+		if ( tables->scope > scope ) return tables->base.lookupEnumAtScope( id, scope );
 
 		EnumTable::const_iterator ret = tables->enumTable.find( id );
@@ -371,4 +386,5 @@
 		if ( ! tables ) return 0;
 		if ( tables->scope < scope ) return 0;
+		if ( tables->scope > scope ) return tables->base.lookupUnionAtScope( id, scope );
 
 		UnionTable::const_iterator ret = tables->unionTable.find( id );
@@ -379,4 +395,5 @@
 		if ( ! tables ) return 0;
 		if ( tables->scope < scope ) return 0;
+		if ( tables->scope > scope ) return tables->base.lookupTraitAtScope( id, scope );
 
 		TraitTable::const_iterator ret = tables->traitTable.find( id );
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 29f9e20c3cabdb3ee724c7e3c4b6cc97003758c9)
+++ src/SymTab/Indexer.h	(revision c194661e377fb587400b93fef5a817d3d77ac641)
@@ -70,4 +70,11 @@
 		/// Gets the top-most trait declaration with the given ID
 		TraitDecl *lookupTrait( const std::string &id ) const;
+
+		/// Gets the struct declaration with the given ID at global scope
+		StructDecl *globalLookupStruct( const std::string &id ) const;
+		/// Gets the union declaration with the given ID at global scope
+		UnionDecl *globalLookupUnion( const std::string &id ) const;
+		/// Gets the enum declaration with the given ID at global scope
+		EnumDecl *globalLookupEnum( const std::string &id ) const;
 
 		void print( std::ostream &os, int indent = 0 ) const;
