diff --git a/plugins/org.eclipse.emf.ecore.xcore.ui/src/org/eclipse/emf/ecore/xcore/ui/contentassist/XcoreProposalProvider.java b/plugins/org.eclipse.emf.ecore.xcore.ui/src/org/eclipse/emf/ecore/xcore/ui/contentassist/XcoreProposalProvider.java
index a2453b6..30bad2f 100644
--- a/plugins/org.eclipse.emf.ecore.xcore.ui/src/org/eclipse/emf/ecore/xcore/ui/contentassist/XcoreProposalProvider.java
+++ b/plugins/org.eclipse.emf.ecore.xcore.ui/src/org/eclipse/emf/ecore/xcore/ui/contentassist/XcoreProposalProvider.java
@@ -104,6 +104,18 @@
   public void completeXGenericType_Type(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor)
   {
     IScope scope = xcoreScopeProvider.getScope(model, XcorePackage.Literals.XGENERIC_TYPE__TYPE);
+    super.completeXGenericType_Type(model, assignment, context, getImportingProposalAcceptor(scope, context, acceptor));
+  }
+
+  @Override
+  public void completeXAnnotation_Source(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor)
+  {
+    IScope scope = xcoreScopeProvider.getScope(model, XcorePackage.Literals.XANNOTATION__SOURCE);
+    super.completeXAnnotation_Source(model, assignment, context, getImportingProposalAcceptor(scope, context, acceptor));
+  }
+
+  private ICompletionProposalAcceptor getImportingProposalAcceptor(IScope scope, ContentAssistContext context, ICompletionProposalAcceptor acceptor)
+  {
     final IReplacementTextApplier textApplier =
       new ImportingTypesProposalProvider.FQNImporter
         (context.getResource(),
@@ -112,7 +124,7 @@
          qualifiedNameConverter,
          qualifiedNameValueConverter,
          qualifiedNameValueConverter);
-    ICompletionProposalAcceptor scopeAware =
+    ICompletionProposalAcceptor scopeAwareAcceptor =
       new ICompletionProposalAcceptor.Delegate(acceptor)
       {
         @Override
@@ -125,7 +137,7 @@
           super.accept(proposal);
         }
       };
-    super.completeXGenericType_Type(model, assignment, context, scopeAware);
+    return scopeAwareAcceptor;
   }
 
   @Override
diff --git a/plugins/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/scoping/XcoreImportedNamespaceAwareScopeProvider.java b/plugins/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/scoping/XcoreImportedNamespaceAwareScopeProvider.java
index 4a52494..f5619cc 100644
--- a/plugins/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/scoping/XcoreImportedNamespaceAwareScopeProvider.java
+++ b/plugins/org.eclipse.emf.ecore.xcore/src/org/eclipse/emf/ecore/xcore/scoping/XcoreImportedNamespaceAwareScopeProvider.java
@@ -32,6 +32,7 @@
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.xcore.XAnnotationDirective;
 import org.eclipse.emf.ecore.xcore.XClass;
 import org.eclipse.emf.ecore.xcore.XImportDirective;
@@ -181,7 +182,8 @@
 
   private IScope getAnnotationScope(final EObject context)
   {
-    String cacheKey = (context instanceof XImportDirective) ? "import.annotation.scope" : "annotation.scope";
+    final boolean isImport = context instanceof XImportDirective;
+    String cacheKey = isImport ? "import.annotation.scope" : "annotation.scope";
     final Resource resource = context.eResource();
     return cache.get(cacheKey, resource, new Provider<IScope>()
     {
@@ -190,7 +192,8 @@
         IScope globalScope = getGlobalScope(resource, XcorePackage.Literals.XANNOTATION__SOURCE);
         ImportNormalizer xcoreLang = new ImportNormalizer(nameConverter.toQualifiedName("xcore.lang"), true, false);
         ImportScope xcoreLangScope = createImportScope(globalScope, singletonList(xcoreLang), null, XcorePackage.Literals.XANNOTATION_DIRECTIVE, false);
-        ImportScope importScope = createImportScope(xcoreLangScope, getImportedNamespaceResolvers(context, false), null, XcorePackage.Literals.XANNOTATION_DIRECTIVE, false);
+        List<ImportNormalizer> importedNamespaceResolvers = isImport ? Collections.<ImportNormalizer>emptyList() : getImportedNamespaceResolvers(EcoreUtil.getRootContainer(context), false);
+        ImportScope importScope = createImportScope(xcoreLangScope, importedNamespaceResolvers, null, XcorePackage.Literals.XANNOTATION_DIRECTIVE, false);
         IScope resourceScope = getLocalAnnotationsScope(resource, importScope);
         return new CachingScope(resourceScope);
       }
@@ -199,7 +202,8 @@
 
   private IScope getClassifierScope(final EObject context)
   {
-    String cacheKey = (context instanceof XImportDirective) ? "import.classifier.scope" : "classifier.scope";
+    final boolean isImport = context instanceof XImportDirective;
+    String cacheKey = isImport ? "import.classifier.scope" : "classifier.scope";
     final Resource resource = context.eResource();
     return cache.get(cacheKey, resource, new Provider<IScope>()
     {
@@ -214,22 +218,27 @@
           }
         });
         EcoreDataTypeAliasingScope aliasingScope = new EcoreDataTypeAliasingScope(globalScope, nameConverter);
-        List<ImportNormalizer> importedNamespaceResolvers = Lists.newArrayList(getImportedNamespaceResolvers(context, false));
-        Set<String> names = new HashSet<String>();
-        for (ImportNormalizer importNormalizer : importedNamespaceResolvers)
-        {
-          if (!importNormalizer.hasWildCard())
-          {
-            names.add(importNormalizer.getImportedNamespacePrefix().getLastSegment());
-          }
-        }
 
-        for (String implicitImport : IMPLICIT_IMPORTS)
+        List<ImportNormalizer> importedNamespaceResolvers = Collections.emptyList();
+        if (!isImport)
         {
-          ImportNormalizer importedNamespaceResolver = createImportedNamespaceResolver(implicitImport, false);
-          if (!names.contains(importedNamespaceResolver.getImportedNamespacePrefix().getLastSegment()))
+          importedNamespaceResolvers = Lists.newArrayList(getImportedNamespaceResolvers(EcoreUtil.getRootContainer(context), false));
+          Set<String> names = new HashSet<String>();
+          for (ImportNormalizer importNormalizer : importedNamespaceResolvers)
           {
-            importedNamespaceResolvers.add(importedNamespaceResolver);
+            if (!importNormalizer.hasWildCard())
+            {
+              names.add(importNormalizer.getImportedNamespacePrefix().getLastSegment());
+            }
+          }
+  
+          for (String implicitImport : IMPLICIT_IMPORTS)
+          {
+            ImportNormalizer importedNamespaceResolver = createImportedNamespaceResolver(implicitImport, false);
+            if (!names.contains(importedNamespaceResolver.getImportedNamespacePrefix().getLastSegment()))
+            {
+              importedNamespaceResolvers.add(importedNamespaceResolver);
+            }
           }
         }
 
