diff --git a/ICSharpCode.NRefactory.CSharp/Ast/SyntaxTree.cs b/ICSharpCode.NRefactory.CSharp/Ast/SyntaxTree.cs
index 2fc1405dee..2906696b36 100644
--- a/ICSharpCode.NRefactory.CSharp/Ast/SyntaxTree.cs
+++ b/ICSharpCode.NRefactory.CSharp/Ast/SyntaxTree.cs
@@ -146,13 +146,13 @@ namespace ICSharpCode.NRefactory.CSharp
 		/// 
 		/// Converts this syntax tree into a parsed file that can be stored in the type system.
 		/// 
-		public CSharpParsedFile ToTypeSystem ()
+		public CSharpUnresolvedFile ToTypeSystem ()
 		{
 			if (string.IsNullOrEmpty (this.FileName))
 				throw new InvalidOperationException ("Cannot use ToTypeSystem() on a syntax tree without file name.");
 			var v = new TypeSystemConvertVisitor (this.FileName);
 			v.VisitSyntaxTree (this);
-			return v.ParsedFile;
+			return v.UnresolvedFile;
 		}
 		
 		public static SyntaxTree Parse (string program, string fileName = "", CompilerSettings settings = null, CancellationToken cancellationToken = default (CancellationToken))
diff --git a/ICSharpCode.NRefactory.CSharp/CSharpProjectContent.cs b/ICSharpCode.NRefactory.CSharp/CSharpProjectContent.cs
index 2dfac4a1ad..fccba4622f 100644
--- a/ICSharpCode.NRefactory.CSharp/CSharpProjectContent.cs
+++ b/ICSharpCode.NRefactory.CSharp/CSharpProjectContent.cs
@@ -33,13 +33,13 @@ namespace ICSharpCode.NRefactory.CSharp
 		string assemblyName;
 		string projectFileName;
 		string location;
-		Dictionary parsedFiles;
+		Dictionary unresolvedFiles;
 		List assemblyReferences;
 		CompilerSettings compilerSettings;
 		
 		public CSharpProjectContent()
 		{
-			this.parsedFiles = new Dictionary(Platform.FileNameComparer);
+			this.unresolvedFiles = new Dictionary(Platform.FileNameComparer);
 			this.assemblyReferences = new List();
 			this.compilerSettings = new CompilerSettings();
 			compilerSettings.Freeze();
@@ -50,13 +50,13 @@ namespace ICSharpCode.NRefactory.CSharp
 			this.assemblyName = pc.assemblyName;
 			this.projectFileName = pc.projectFileName;
 			this.location = pc.location;
-			this.parsedFiles = new Dictionary(pc.parsedFiles, Platform.FileNameComparer);
+			this.unresolvedFiles = new Dictionary(pc.unresolvedFiles, Platform.FileNameComparer);
 			this.assemblyReferences = new List(pc.assemblyReferences);
 			this.compilerSettings = pc.compilerSettings;
 		}
 		
-		public IEnumerable Files {
-			get { return parsedFiles.Values; }
+		public IEnumerable Files {
+			get { return unresolvedFiles.Values; }
 		}
 		
 		public IEnumerable AssemblyReferences {
@@ -101,10 +101,10 @@ namespace ICSharpCode.NRefactory.CSharp
 			}
 		}
 		
-		public IParsedFile GetFile(string fileName)
+		public IUnresolvedFile GetFile(string fileName)
 		{
-			IParsedFile file;
-			if (parsedFiles.TryGetValue(fileName, out file))
+			IUnresolvedFile file;
+			if (unresolvedFiles.TryGetValue(fileName, out file))
 				return file;
 			else
 				return null;
@@ -160,6 +160,11 @@ namespace ICSharpCode.NRefactory.CSharp
 		}
 		
 		public IProjectContent AddAssemblyReferences(IEnumerable references)
+		{
+			return AddAssemblyReferences(references.ToArray());
+		}
+		
+		public IProjectContent AddAssemblyReferences(params IAssemblyReference[] references)
 		{
 			CSharpProjectContent pc = Clone();
 			pc.assemblyReferences.AddRange(references);
@@ -167,13 +172,62 @@ namespace ICSharpCode.NRefactory.CSharp
 		}
 		
 		public IProjectContent RemoveAssemblyReferences(IEnumerable references)
+		{
+			return RemoveAssemblyReferences(references.ToArray());
+		}
+		
+		public IProjectContent RemoveAssemblyReferences(params IAssemblyReference[] references)
+		{
+			CSharpProjectContent pc = Clone();
+			foreach (var r in references)
+				pc.assemblyReferences.Remove(r);
+			return pc;
+		}
+		
+		/// 
+		/// Adds the specified files to the project content.
+		/// If a file with the same name already exists, updated the existing file.
+		/// 
+		public IProjectContent AddOrUpdateFiles(IEnumerable newFiles)
+		{
+			CSharpProjectContent pc = Clone();
+			foreach (var file in newFiles) {
+				pc.unresolvedFiles[file.FileName] = file;
+			}
+			return pc;
+		}
+		
+		/// 
+		/// Adds the specified files to the project content.
+		/// If a file with the same name already exists, this method updates the existing file.
+		/// 
+		public IProjectContent AddOrUpdateFiles(params IUnresolvedFile[] newFiles)
+		{
+			return AddOrUpdateFiles((IEnumerable)newFiles);
+		}
+		
+		/// 
+		/// Removes the files with the specified names.
+		/// 
+		public IProjectContent RemoveFiles(IEnumerable fileNames)
 		{
 			CSharpProjectContent pc = Clone();
-			pc.assemblyReferences.RemoveAll(r => references.Contains(r));
+			foreach (var fileName in fileNames) {
+				pc.unresolvedFiles.Remove(fileName);
+			}
 			return pc;
 		}
 		
-		public IProjectContent UpdateProjectContent(IParsedFile oldFile, IParsedFile newFile)
+		/// 
+		/// Removes the files with the specified names.
+		/// 
+		public IProjectContent RemoveFiles(params string[] fileNames)
+		{
+			return RemoveFiles((IEnumerable)fileNames);
+		}
+		
+		[Obsolete("Use RemoveFiles/AddOrUpdateFiles instead")]
+		public IProjectContent UpdateProjectContent(IUnresolvedFile oldFile, IUnresolvedFile newFile)
 		{
 			if (oldFile == null && newFile == null)
 				return this;
@@ -183,23 +237,24 @@ namespace ICSharpCode.NRefactory.CSharp
 			}
 			CSharpProjectContent pc = Clone();
 			if (newFile == null)
-				pc.parsedFiles.Remove(oldFile.FileName);
+				pc.unresolvedFiles.Remove(oldFile.FileName);
 			else
-				pc.parsedFiles[newFile.FileName] = newFile;
+				pc.unresolvedFiles[newFile.FileName] = newFile;
 			return pc;
 		}
 		
-		public IProjectContent UpdateProjectContent(IEnumerable oldFiles, IEnumerable newFiles)
+		[Obsolete("Use RemoveFiles/AddOrUpdateFiles instead")]
+		public IProjectContent UpdateProjectContent(IEnumerable oldFiles, IEnumerable newFiles)
 		{
 			CSharpProjectContent pc = Clone();
 			if (oldFiles != null) {
 				foreach (var oldFile in oldFiles) {
-					pc.parsedFiles.Remove(oldFile.FileName);
+					pc.unresolvedFiles.Remove(oldFile.FileName);
 				}
 			}
 			if (newFiles != null) {
 				foreach (var newFile in newFiles) {
-					pc.parsedFiles.Add(newFile.FileName, newFile);
+					pc.unresolvedFiles.Add(newFile.FileName, newFile);
 				}
 			}
 			return pc;
diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
index 32b776b823..4897520b12 100644
--- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
+++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
@@ -723,7 +723,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
 						//						var astResolver = new CSharpAstResolver(
 						//							GetState(),
 						//							identifierStart.Unit,
-						//							CSharpParsedFile
+						//							CSharpUnresolvedFile
 						//						);
 						//
 						//						foreach (var type in CreateFieldAction.GetValidTypes(astResolver, (Expression)n)) {
@@ -1172,7 +1172,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
 			if (csResolver == null) {
 				if (node != null) {
 					csResolver = GetState();
-					//var astResolver = new CSharpAstResolver (csResolver, node, xp != null ? xp.Item1 : CSharpParsedFile);
+					//var astResolver = new CSharpAstResolver (csResolver, node, xp != null ? xp.Item1 : CSharpUnresolvedFile);
 					
 					try {
 						//csResolver = astResolver.GetResolverStateBefore (node);
diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
index 8e36405a45..fa71c629e6 100644
--- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
+++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
@@ -494,13 +494,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
 			
 			state.CurrentMember = currentMember;
 			state.CurrentTypeDefinition = currentType;
-			state.CurrentUsingScope = CSharpParsedFile.GetUsingScope (location);
+			state.CurrentUsingScope = CSharpUnresolvedFile.GetUsingScope (location);
 			if (state.CurrentMember != null) {
 				var node = Unit.GetNodeAt (location);
 				if (node == null)
 					return state;
 				var navigator = new NodeListResolveVisitorNavigator (new[] { node });
-				var visitor = new ResolveVisitor (state, CSharpParsedFile, navigator);
+				var visitor = new ResolveVisitor (state, CSharpUnresolvedFile, navigator);
 				Unit.AcceptVisitor (visitor, null);
 				try {
 					var newState = visitor.GetResolverStateBefore (node);
diff --git a/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs b/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs
index b477dc1bbf..91ee3f2bba 100644
--- a/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs
+++ b/ICSharpCode.NRefactory.CSharp/Completion/ICompletionContextProvider.cs
@@ -1,4 +1,4 @@
-// 
+// 
 // IMemberProvider.cs
 //  
 // Author:
@@ -45,16 +45,16 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
 	public class DefaultCompletionContextProvider : ICompletionContextProvider
 	{
 		readonly IDocument document;
-		readonly CSharpParsedFile parsedFile;
+		readonly CSharpUnresolvedFile unresolvedFile;
 
-		public DefaultCompletionContextProvider (IDocument document, CSharpParsedFile parsedFile)
+		public DefaultCompletionContextProvider (IDocument document, CSharpUnresolvedFile unresolvedFile)
 		{
 			if (document == null)
 				throw new ArgumentNullException("document");
-			if (parsedFile == null)
-				throw new ArgumentNullException("parsedFile");
+			if (unresolvedFile == null)
+				throw new ArgumentNullException("unresolvedFile");
 			this.document = document;
-			this.parsedFile = parsedFile;
+			this.unresolvedFile = unresolvedFile;
 		}
 		
 		public void GetCurrentMembers(int offset, out IUnresolvedTypeDefinition currentType, out IUnresolvedMember currentMember)
@@ -64,7 +64,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
 			
 			currentType = null;
 			
-			foreach (var type in parsedFile.TopLevelTypeDefinitions) {
+			foreach (var type in unresolvedFile.TopLevelTypeDefinitions) {
 				if (type.Region.Begin < location)
 					currentType = type;
 			}
@@ -189,7 +189,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
 
 		public CSharpAstResolver GetResolver (CSharpResolver resolver, AstNode rootNode)
 		{
-			return new CSharpAstResolver (resolver, rootNode, parsedFile);
+			return new CSharpAstResolver (resolver, rootNode, unresolvedFile);
 		}
 
 
diff --git a/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj b/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
index f41d9e706f..f0d1294c9f 100644
--- a/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
+++ b/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
@@ -300,7 +300,7 @@
     
     
     
-    
+    
     
     
     
diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs b/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs
index ca3e70ab5b..b7db647027 100644
--- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs
+++ b/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs
@@ -64,19 +64,19 @@ namespace ICSharpCode.NRefactory.CSharp
 		/// 
 		/// The input syntax tree.
 		/// The current compilation.
-		/// CSharpParsedFile, used for resolving.
+		/// CSharpUnresolvedFile, used for resolving.
 		/// Converted CodeCompileUnit
 		/// 
 		/// This conversion process requires a resolver because it needs to distinguish field/property/event references etc.
 		/// 
-		public CodeCompileUnit Convert(ICompilation compilation, SyntaxTree syntaxTree, CSharpParsedFile parsedFile)
+		public CodeCompileUnit Convert(ICompilation compilation, SyntaxTree syntaxTree, CSharpUnresolvedFile unresolvedFile)
 		{
 			if (syntaxTree == null)
 				throw new ArgumentNullException("syntaxTree");
 			if (compilation == null)
 				throw new ArgumentNullException("compilation");
 			
-			CSharpAstResolver resolver = new CSharpAstResolver(compilation, syntaxTree, parsedFile);
+			CSharpAstResolver resolver = new CSharpAstResolver(compilation, syntaxTree, unresolvedFile);
 			return (CodeCompileUnit)Convert(syntaxTree, resolver);
 		}
 		
diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs
index 449be597dc..56c7487a1c 100644
--- a/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs
+++ b/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs
@@ -72,9 +72,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
 			}
 		}
 
-		public virtual CSharpParsedFile ParsedFile {
+		public virtual CSharpUnresolvedFile UnresolvedFile {
 			get {
-				return resolver.ParsedFile;
+				return resolver.UnresolvedFile;
 			}
 		}
 
diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/InlineLocalVariableAction.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/InlineLocalVariableAction.cs
index 263e5570f8..a8bec696c8 100644
--- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/InlineLocalVariableAction.cs
+++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/InlineLocalVariableAction.cs
@@ -58,7 +58,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
 				yield break;
 			}
 			yield return new CodeAction(context.TranslateString("Inline local variable"), script => {
-				refFinder.FindLocalReferences(resolveResult.Variable, context.ParsedFile, unit, context.Compilation, (n, r) => script.Replace(n, initializer.Initializer.Clone()), default(CancellationToken));
+				refFinder.FindLocalReferences(resolveResult.Variable, context.UnresolvedFile, unit, context.Compilation, (n, r) => script.Replace(n, initializer.Initializer.Clone()), default(CancellationToken));
 				script.Remove(node);
 			});
 		}
diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/CSharpAstResolver.cs b/ICSharpCode.NRefactory.CSharp/Resolver/CSharpAstResolver.cs
index ae5d3478a1..2ddc57c691 100644
--- a/ICSharpCode.NRefactory.CSharp/Resolver/CSharpAstResolver.cs
+++ b/ICSharpCode.NRefactory.CSharp/Resolver/CSharpAstResolver.cs
@@ -33,7 +33,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 	{
 		readonly CSharpResolver initialResolverState;
 		readonly AstNode rootNode;
-		readonly CSharpParsedFile parsedFile;
+		readonly CSharpUnresolvedFile unresolvedFile;
 		readonly ResolveVisitor resolveVisitor;
 		bool resolverInitialized;
 		
@@ -43,19 +43,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		/// 
 		/// The current compilation.
 		/// The syntax tree corresponding to the specified parsed file.
-		/// 
+		/// 
 		/// Optional: Result of the  for the file being resolved.
 		/// 
 		/// This is used for setting up the context on the resolver. The parsed file must be registered in the compilation.
 		/// 
 		/// 
-		/// When a parsedFile is specified, the resolver will use the member's StartLocation/EndLocation to identify
+		/// When a unresolvedFile is specified, the resolver will use the member's StartLocation/EndLocation to identify
 		/// member declarations in the AST with members in the type system.
-		/// When no parsedFile is specified (null value for this parameter), the resolver will instead compare the
+		/// When no unresolvedFile is specified (null value for this parameter), the resolver will instead compare the
 		/// member's signature in the AST with the signature in the type system.
 		/// 
 		/// 
-		public CSharpAstResolver(ICompilation compilation, SyntaxTree syntaxTree, CSharpParsedFile parsedFile = null)
+		public CSharpAstResolver(ICompilation compilation, SyntaxTree syntaxTree, CSharpUnresolvedFile unresolvedFile = null)
 		{
 			if (compilation == null)
 				throw new ArgumentNullException("compilation");
@@ -63,8 +63,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 				throw new ArgumentNullException("syntaxTree");
 			this.initialResolverState = new CSharpResolver(compilation);
 			this.rootNode = syntaxTree;
-			this.parsedFile = parsedFile;
-			this.resolveVisitor = new ResolveVisitor(initialResolverState, parsedFile);
+			this.unresolvedFile = unresolvedFile;
+			this.resolveVisitor = new ResolveVisitor(initialResolverState, unresolvedFile);
 		}
 		
 		/// 
@@ -73,19 +73,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		/// 
 		/// The resolver state at the root node (to be more precise: just outside the root node).
 		/// The root node of the resolved tree.
-		/// 
+		/// 
 		/// Optional: Result of the  for the file being resolved.
 		/// 
 		/// This is used for setting up the context on the resolver. The parsed file must be registered in the compilation.
 		/// 
 		/// 
-		/// When a parsedFile is specified, the resolver will use the member's StartLocation/EndLocation to identify
+		/// When a unresolvedFile is specified, the resolver will use the member's StartLocation/EndLocation to identify
 		/// member declarations in the AST with members in the type system.
-		/// When no parsedFile is specified (null value for this parameter), the resolver will instead compare the
+		/// When no unresolvedFile is specified (null value for this parameter), the resolver will instead compare the
 		/// member's signature in the AST with the signature in the type system.
 		/// 
 		/// 
-		public CSharpAstResolver(CSharpResolver resolver, AstNode rootNode, CSharpParsedFile parsedFile = null)
+		public CSharpAstResolver(CSharpResolver resolver, AstNode rootNode, CSharpUnresolvedFile unresolvedFile = null)
 		{
 			if (resolver == null)
 				throw new ArgumentNullException("resolver");
@@ -93,8 +93,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 				throw new ArgumentNullException("rootNode");
 			this.initialResolverState = resolver;
 			this.rootNode = rootNode;
-			this.parsedFile = parsedFile;
-			this.resolveVisitor = new ResolveVisitor(initialResolverState, parsedFile);
+			this.unresolvedFile = unresolvedFile;
+			this.resolveVisitor = new ResolveVisitor(initialResolverState, unresolvedFile);
 		}
 		
 		/// 
@@ -122,8 +122,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		/// Gets the parsed file used by this CSharpAstResolver.
 		/// Can return null.
 		/// 
-		public CSharpParsedFile ParsedFile {
-			get { return parsedFile; }
+		public CSharpUnresolvedFile UnresolvedFile {
+			get { return unresolvedFile; }
 		}
 		
 		/// 
diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs b/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs
index d754e1b30a..c269f581d1 100644
--- a/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs
+++ b/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs
@@ -290,7 +290,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		/// 
 		/// Gets the file names that possibly contain references to the element being searched for.
 		/// 
-		public IEnumerable GetInterestingFiles(IFindReferenceSearchScope searchScope, ICompilation compilation)
+		public IEnumerable GetInterestingFiles(IFindReferenceSearchScope searchScope, ICompilation compilation)
 		{
 			if (searchScope == null)
 				throw new ArgumentNullException("searchScope");
@@ -303,47 +303,47 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 				ITypeDefinition topLevelTypeDef = compilation.Import(searchScope.TopLevelTypeDefinition);
 				if (topLevelTypeDef == null) {
 					// This compilation cannot have references to the target entity.
-					return EmptyList.Instance;
+					return EmptyList.Instance;
 				}
 				switch (searchScope.Accessibility) {
 					case Accessibility.None:
 					case Accessibility.Private:
 						if (topLevelTypeDef.ParentAssembly == compilation.MainAssembly)
-							return topLevelTypeDef.Parts.Select(p => p.ParsedFile).OfType().Distinct();
+							return topLevelTypeDef.Parts.Select(p => p.UnresolvedFile).OfType().Distinct();
 						else
-							return EmptyList.Instance;
+							return EmptyList.Instance;
 					case Accessibility.Protected:
 						return GetInterestingFilesProtected(topLevelTypeDef);
 					case Accessibility.Internal:
 						if (topLevelTypeDef.ParentAssembly.InternalsVisibleTo(compilation.MainAssembly))
-							return pc.Files.OfType();
+							return pc.Files.OfType();
 						else
-							return EmptyList.Instance;
+							return EmptyList.Instance;
 					case Accessibility.ProtectedAndInternal:
 						if (topLevelTypeDef.ParentAssembly.InternalsVisibleTo(compilation.MainAssembly))
 							return GetInterestingFilesProtected(topLevelTypeDef);
 						else
-							return EmptyList.Instance;
+							return EmptyList.Instance;
 					case Accessibility.ProtectedOrInternal:
 						if (topLevelTypeDef.ParentAssembly.InternalsVisibleTo(compilation.MainAssembly))
-							return pc.Files.OfType();
+							return pc.Files.OfType();
 						else
 							return GetInterestingFilesProtected(topLevelTypeDef);
 					default:
-						return pc.Files.OfType();
+						return pc.Files.OfType();
 				}
 			} else {
-				return pc.Files.OfType();
+				return pc.Files.OfType();
 			}
 		}
 		
-		IEnumerable GetInterestingFilesProtected(ITypeDefinition referencedTypeDefinition)
+		IEnumerable GetInterestingFilesProtected(ITypeDefinition referencedTypeDefinition)
 		{
 			return (from typeDef in referencedTypeDefinition.Compilation.MainAssembly.GetAllTypeDefinitions()
 			        where typeDef.IsDerivedFrom(referencedTypeDefinition)
 			        from part in typeDef.Parts
-			        select part.ParsedFile
-			       ).OfType().Distinct();
+			        select part.UnresolvedFile
+			       ).OfType().Distinct();
 		}
 		#endregion
 		
@@ -352,35 +352,35 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		/// Finds all references in the given file.
 		/// 
 		/// The search scope for which to look.
-		/// The type system representation of the file being searched.
+		/// The type system representation of the file being searched.
 		/// The syntax tree of the file being searched.
 		/// The compilation for the project that contains the file.
 		/// Callback used to report the references that were found.
 		/// CancellationToken that may be used to cancel the operation.
-		public void FindReferencesInFile(IFindReferenceSearchScope searchScope, CSharpParsedFile parsedFile, SyntaxTree syntaxTree,
+		public void FindReferencesInFile(IFindReferenceSearchScope searchScope, CSharpUnresolvedFile unresolvedFile, SyntaxTree syntaxTree,
 		                                 ICompilation compilation, FoundReferenceCallback callback, CancellationToken cancellationToken)
 		{
 			if (searchScope == null)
 				throw new ArgumentNullException("searchScope");
-			FindReferencesInFile(new[] { searchScope }, parsedFile, syntaxTree, compilation, callback, cancellationToken);
+			FindReferencesInFile(new[] { searchScope }, unresolvedFile, syntaxTree, compilation, callback, cancellationToken);
 		}
 		
 		/// 
 		/// Finds all references in the given file.
 		/// 
 		/// The search scopes for which to look.
-		/// The type system representation of the file being searched.
+		/// The type system representation of the file being searched.
 		/// The syntax tree of the file being searched.
 		/// The compilation for the project that contains the file.
 		/// Callback used to report the references that were found.
 		/// CancellationToken that may be used to cancel the operation.
-		public void FindReferencesInFile(IList searchScopes, CSharpParsedFile parsedFile, SyntaxTree syntaxTree,
+		public void FindReferencesInFile(IList searchScopes, CSharpUnresolvedFile unresolvedFile, SyntaxTree syntaxTree,
 		                                 ICompilation compilation, FoundReferenceCallback callback, CancellationToken cancellationToken)
 		{
 			if (searchScopes == null)
 				throw new ArgumentNullException("searchScopes");
-			if (parsedFile == null)
-				throw new ArgumentNullException("parsedFile");
+			if (unresolvedFile == null)
+				throw new ArgumentNullException("unresolvedFile");
 			if (syntaxTree == null)
 				throw new ArgumentNullException("syntaxTree");
 			if (compilation == null)
@@ -404,7 +404,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			cancellationToken.ThrowIfCancellationRequested();
 			combinedNavigator = new DetectSkippableNodesNavigator(combinedNavigator, syntaxTree);
 			cancellationToken.ThrowIfCancellationRequested();
-			CSharpAstResolver resolver = new CSharpAstResolver(compilation, syntaxTree, parsedFile);
+			CSharpAstResolver resolver = new CSharpAstResolver(compilation, syntaxTree, unresolvedFile);
 			resolver.ApplyNavigator(combinedNavigator, cancellationToken);
 			foreach (var n in navigators) {
 				var frn = n as FindReferenceNavigator;
@@ -1171,19 +1171,19 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		/// Finds all references of a given variable.
 		/// 
 		/// The variable for which to look.
-		/// The type system representation of the file being searched.
+		/// The type system representation of the file being searched.
 		/// The syntax tree of the file being searched.
 		/// The compilation.
 		/// Callback used to report the references that were found.
 		/// Cancellation token that may be used to cancel the operation.
-		public void FindLocalReferences(IVariable variable, CSharpParsedFile parsedFile, SyntaxTree syntaxTree,
+		public void FindLocalReferences(IVariable variable, CSharpUnresolvedFile unresolvedFile, SyntaxTree syntaxTree,
 		                                ICompilation compilation, FoundReferenceCallback callback, CancellationToken cancellationToken)
 		{
 			if (variable == null)
 				throw new ArgumentNullException("variable");
 			var searchScope = new SearchScope(c => new FindLocalReferencesNavigator(variable));
 			searchScope.declarationCompilation = compilation;
-			FindReferencesInFile(searchScope, parsedFile, syntaxTree, compilation, callback, cancellationToken);
+			FindReferencesInFile(searchScope, unresolvedFile, syntaxTree, compilation, callback, cancellationToken);
 		}
 		
 		class FindLocalReferencesNavigator : FindReferenceNavigator
@@ -1225,12 +1225,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		/// Finds all references of a given type parameter.
 		/// 
 		/// The type parameter for which to look.
-		/// The type system representation of the file being searched.
+		/// The type system representation of the file being searched.
 		/// The syntax tree of the file being searched.
 		/// The compilation.
 		/// Callback used to report the references that were found.
 		/// Cancellation token that may be used to cancel the operation.
-		public void FindTypeParameterReferences(IType typeParameter, CSharpParsedFile parsedFile, SyntaxTree syntaxTree,
+		public void FindTypeParameterReferences(IType typeParameter, CSharpUnresolvedFile unresolvedFile, SyntaxTree syntaxTree,
 		                                ICompilation compilation, FoundReferenceCallback callback, CancellationToken cancellationToken)
 		{
 			if (typeParameter == null)
@@ -1240,7 +1240,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			var searchScope = new SearchScope(c => new FindTypeParameterReferencesNavigator((ITypeParameter)typeParameter));
 			searchScope.declarationCompilation = compilation;
 			searchScope.accessibility = Accessibility.Private;
-			FindReferencesInFile(searchScope, parsedFile, syntaxTree, compilation, callback, cancellationToken);
+			FindReferencesInFile(searchScope, unresolvedFile, syntaxTree, compilation, callback, cancellationToken);
 		}
 		
 		class FindTypeParameterReferencesNavigator : FindReferenceNavigator
diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveAtLocation.cs b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveAtLocation.cs
index d3dc835b22..43cc5ff3d7 100644
--- a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveAtLocation.cs
+++ b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveAtLocation.cs
@@ -30,24 +30,24 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 	/// 
 	public static class ResolveAtLocation
 	{
-		public static ResolveResult Resolve (ICompilation compilation, CSharpParsedFile parsedFile, SyntaxTree syntaxTree, TextLocation location,
+		public static ResolveResult Resolve (ICompilation compilation, CSharpUnresolvedFile unresolvedFile, SyntaxTree syntaxTree, TextLocation location,
 		                                    CancellationToken cancellationToken = default(CancellationToken))
 		{
-			return Resolve (new Lazy(() => compilation), parsedFile, syntaxTree, location, cancellationToken);
+			return Resolve (new Lazy(() => compilation), unresolvedFile, syntaxTree, location, cancellationToken);
 		}
-		public static ResolveResult Resolve(Lazy compilation, CSharpParsedFile parsedFile, SyntaxTree syntaxTree, TextLocation location,
+		public static ResolveResult Resolve(Lazy compilation, CSharpUnresolvedFile unresolvedFile, SyntaxTree syntaxTree, TextLocation location,
 		                                    CancellationToken cancellationToken = default(CancellationToken))
 		{
 			AstNode node;
-			return Resolve(compilation, parsedFile, syntaxTree, location, out node, cancellationToken);
+			return Resolve(compilation, unresolvedFile, syntaxTree, location, out node, cancellationToken);
 		}
 		
-		public static ResolveResult Resolve (ICompilation compilation, CSharpParsedFile parsedFile, SyntaxTree syntaxTree, TextLocation location, out AstNode node,
+		public static ResolveResult Resolve (ICompilation compilation, CSharpUnresolvedFile unresolvedFile, SyntaxTree syntaxTree, TextLocation location, out AstNode node,
 		                                    CancellationToken cancellationToken = default(CancellationToken))
 		{
-			return Resolve (new Lazy(() => compilation), parsedFile, syntaxTree, location, out node, cancellationToken);
+			return Resolve (new Lazy(() => compilation), unresolvedFile, syntaxTree, location, out node, cancellationToken);
 		}
-		public static ResolveResult Resolve(Lazy compilation, CSharpParsedFile parsedFile, SyntaxTree syntaxTree, TextLocation location, out AstNode node,
+		public static ResolveResult Resolve(Lazy compilation, CSharpUnresolvedFile unresolvedFile, SyntaxTree syntaxTree, TextLocation location, out AstNode node,
 		                                    CancellationToken cancellationToken = default(CancellationToken))
 		{
 			node = syntaxTree.GetNodeAt(location);
@@ -96,7 +96,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			}
 			
 			// TODO: I think we should provide an overload so that an existing CSharpAstResolver can be reused
-			CSharpAstResolver resolver = new CSharpAstResolver(compilation.Value, syntaxTree, parsedFile);
+			CSharpAstResolver resolver = new CSharpAstResolver(compilation.Value, syntaxTree, unresolvedFile);
 			ResolveResult rr = resolver.Resolve(node, cancellationToken);
 			if (rr is MethodGroupResolveResult && parentInvocation != null)
 				return resolver.Resolve(parentInvocation);
diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
index 9e7e789d05..c7f82cc8ef 100644
--- a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
+++ b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs
@@ -64,7 +64,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		/// We do not have to put this into the stored state (resolver) because
 		/// query expressions are always resolved in a single operation.
 		ResolveResult currentQueryResult;
-		readonly CSharpParsedFile parsedFile;
+		readonly CSharpUnresolvedFile unresolvedFile;
 		readonly Dictionary resolveResultCache = new Dictionary();
 		readonly Dictionary resolverBeforeDict = new Dictionary();
 		readonly Dictionary resolverAfterDict = new Dictionary();
@@ -93,12 +93,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		/// 
 		/// Creates a new ResolveVisitor instance.
 		/// 
-		public ResolveVisitor(CSharpResolver resolver, CSharpParsedFile parsedFile)
+		public ResolveVisitor(CSharpResolver resolver, CSharpUnresolvedFile unresolvedFile)
 		{
 			if (resolver == null)
 				throw new ArgumentNullException("resolver");
 			this.resolver = resolver;
-			this.parsedFile = parsedFile;
+			this.unresolvedFile = unresolvedFile;
 			this.navigator = skipAllNavigator;
 		}
 		
@@ -534,12 +534,12 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		{
 			CSharpResolver previousResolver = resolver;
 			try {
-				if (parsedFile != null) {
-					resolver = resolver.WithCurrentUsingScope(parsedFile.RootUsingScope.Resolve(resolver.Compilation));
+				if (unresolvedFile != null) {
+					resolver = resolver.WithCurrentUsingScope(unresolvedFile.RootUsingScope.Resolve(resolver.Compilation));
 				} else {
 					var cv = new TypeSystemConvertVisitor(unit.FileName ?? string.Empty);
 					ApplyVisitorToUsings(cv, unit.Children);
-					PushUsingScope(cv.ParsedFile.RootUsingScope);
+					PushUsingScope(cv.UnresolvedFile.RootUsingScope);
 				}
 				ScanChildren(unit);
 				return voidResult;
@@ -567,8 +567,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		{
 			CSharpResolver previousResolver = resolver;
 			try {
-				if (parsedFile != null) {
-					resolver = resolver.WithCurrentUsingScope(parsedFile.GetUsingScope(namespaceDeclaration.StartLocation).Resolve(resolver.Compilation));
+				if (unresolvedFile != null) {
+					resolver = resolver.WithCurrentUsingScope(unresolvedFile.GetUsingScope(namespaceDeclaration.StartLocation).Resolve(resolver.Compilation));
 				} else {
 					string fileName = namespaceDeclaration.GetRegion().FileName ?? string.Empty;
 					// Fetch parent using scope
@@ -589,7 +589,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 					// Last using scope:
 					usingScope = new UsingScope(resolver.CurrentUsingScope.UnresolvedUsingScope, identifiers.Last().Name);
 					usingScope.Region = region;
-					var cv = new TypeSystemConvertVisitor(new CSharpParsedFile(region.FileName ?? string.Empty), usingScope);
+					var cv = new TypeSystemConvertVisitor(new CSharpUnresolvedFile(region.FileName ?? string.Empty), usingScope);
 					ApplyVisitorToUsings(cv, namespaceDeclaration.Children);
 					PushUsingScope(usingScope);
 				}
@@ -673,7 +673,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			for (AstNode node = fieldOrEventDeclaration.FirstChild; node != null; node = node.NextSibling) {
 				if (node.Role == Roles.Variable) {
 					IMember member;
-					if (parsedFile != null) {
+					if (unresolvedFile != null) {
 						member = GetMemberFromLocation(node);
 					} else {
 						string name = ((VariableInitializer)node).Name;
@@ -699,7 +699,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			TextLocation location = TypeSystemConvertVisitor.GetStartLocationAfterAttributes(node);
 			return typeDef.GetMembers(
 				delegate (IUnresolvedMember m) {
-					if (m.ParsedFile != parsedFile)
+					if (m.UnresolvedFile != unresolvedFile)
 						return false;
 					DomRegion region = m.Region;
 					return !region.IsEmpty && region.Begin <= location && region.End > location;
@@ -792,7 +792,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			CSharpResolver oldResolver = resolver;
 			try {
 				IMember member;
-				if (parsedFile != null) {
+				if (unresolvedFile != null) {
 					member = GetMemberFromLocation(memberDeclaration);
 				} else {
 					// Re-discover the method:
@@ -855,7 +855,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			CSharpResolver oldResolver = resolver;
 			try {
 				IMember member;
-				if (parsedFile != null) {
+				if (unresolvedFile != null) {
 					member = GetMemberFromLocation(propertyOrIndexerDeclaration);
 				} else {
 					// Re-discover the property:
@@ -911,7 +911,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			CSharpResolver oldResolver = resolver;
 			try {
 				IMember member;
-				if (parsedFile != null) {
+				if (unresolvedFile != null) {
 					member = GetMemberFromLocation(eventDeclaration);
 				} else {
 					string name = eventDeclaration.Name;
@@ -1034,7 +1034,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 					Scan(attributeSection);
 				
 				IMember member = null;
-				if (parsedFile != null) {
+				if (unresolvedFile != null) {
 					member = GetMemberFromLocation(enumMemberDeclaration);
 				} else if (resolver.CurrentTypeDefinition != null) {
 					string name = enumMemberDeclaration.Name;
@@ -1958,8 +1958,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 		
 		DomRegion MakeRegion(AstNode node)
 		{
-			if (parsedFile != null)
-				return new DomRegion(parsedFile.FileName, node.StartLocation, node.EndLocation);
+			if (unresolvedFile != null)
+				return new DomRegion(unresolvedFile.FileName, node.StartLocation, node.EndLocation);
 			else
 				return node.GetRegion();
 		}
@@ -2148,7 +2148,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			readonly QuerySelectClause selectClause;
 			
 			readonly CSharpResolver storedContext;
-			readonly CSharpParsedFile parsedFile;
+			readonly CSharpUnresolvedFile unresolvedFile;
 			readonly List hypotheses = new List();
 			internal IList parameters = new List();
 			
@@ -2186,7 +2186,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 			{
 				this.parentVisitor = parentVisitor;
 				this.storedContext = parentVisitor.resolver;
-				this.parsedFile = parentVisitor.parsedFile;
+				this.unresolvedFile = parentVisitor.unresolvedFile;
 				this.bodyResult = parentVisitor.voidResult;
 			}
 			
@@ -2254,7 +2254,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
 					if (ok)
 						return h;
 				}
-				ResolveVisitor visitor = new ResolveVisitor(storedContext, parsedFile);
+				ResolveVisitor visitor = new ResolveVisitor(storedContext, unresolvedFile);
 				var newHypothesis = new LambdaTypeHypothesis(this, parameterTypes, visitor, lambda != null ? lambda.Parameters : null);
 				hypotheses.Add(newHypothesis);
 				return newHypothesis;
diff --git a/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs b/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs
index fe72e9b576..ec9b9cfeb4 100644
--- a/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs
+++ b/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpAssembly.cs
@@ -73,9 +73,9 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 				return result;
 			} else {
 				result = new List();
-				foreach (var parsedFile in projectContent.Files.OfType()) {
-					var attributes = assemblyAttributes ? parsedFile.AssemblyAttributes : parsedFile.ModuleAttributes;
-					var context = new CSharpTypeResolveContext(this, parsedFile.RootUsingScope.Resolve(compilation));
+				foreach (var unresolvedFile in projectContent.Files.OfType()) {
+					var attributes = assemblyAttributes ? unresolvedFile.AssemblyAttributes : unresolvedFile.ModuleAttributes;
+					var context = new CSharpTypeResolveContext(this, unresolvedFile.RootUsingScope.Resolve(compilation));
 					foreach (var unresolvedAttr in attributes) {
 						result.Add(unresolvedAttr.CreateResolvedAttribute(context));
 					}
diff --git a/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpParsedFile.cs b/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpUnresolvedFile.cs
similarity index 95%
rename from ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpParsedFile.cs
rename to ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpUnresolvedFile.cs
index 186961031f..ac5da75885 100644
--- a/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpParsedFile.cs
+++ b/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpUnresolvedFile.cs
@@ -30,7 +30,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 	/// Represents a file that was parsed and converted for the type system.
 	/// 
 	[Serializable]
-	public sealed class CSharpParsedFile : AbstractFreezable, IParsedFile, IUnresolvedDocumentationProvider
+	public sealed class CSharpUnresolvedFile : AbstractFreezable, IUnresolvedFile, IUnresolvedDocumentationProvider
 	{
 		readonly string fileName;
 		readonly UsingScope rootUsingScope;
@@ -51,7 +51,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 			usingScopes = FreezableHelper.FreezeListAndElements(usingScopes);
 		}
 		
-		public CSharpParsedFile(string fileName)
+		public CSharpUnresolvedFile(string fileName)
 		{
 			if (fileName == null)
 				throw new ArgumentNullException("fileName");
@@ -59,7 +59,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 			this.rootUsingScope = new UsingScope();
 		}
 		
-		public CSharpParsedFile(string fileName, UsingScope rootUsingScope)
+		public CSharpUnresolvedFile(string fileName, UsingScope rootUsingScope)
 		{
 			if (fileName == null)
 				throw new ArgumentNullException("fileName");
@@ -178,7 +178,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 			return rctx;
 		}
 		
-		ITypeResolveContext IParsedFile.GetTypeResolveContext (ICompilation compilation, TextLocation loc)
+		ITypeResolveContext IUnresolvedFile.GetTypeResolveContext (ICompilation compilation, TextLocation loc)
 		{
 			return GetTypeResolveContext (compilation, loc);
 		}
diff --git a/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs b/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs
index 0958a9c616..98228ac423 100644
--- a/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs
+++ b/ICSharpCode.NRefactory.CSharp/TypeSystem/TypeSystemConvertVisitor.cs
@@ -34,7 +34,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 	/// 
 	public class TypeSystemConvertVisitor : DepthFirstAstVisitor
 	{
-		readonly CSharpParsedFile parsedFile;
+		readonly CSharpUnresolvedFile unresolvedFile;
 		UsingScope usingScope;
 		CSharpUnresolvedTypeDefinition currentTypeDefinition;
 		DefaultUnresolvedMethod currentMethod;
@@ -64,32 +64,32 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 		{
 			if (fileName == null)
 				throw new ArgumentNullException("fileName");
-			this.parsedFile = new CSharpParsedFile(fileName);
-			this.usingScope = parsedFile.RootUsingScope;
+			this.unresolvedFile = new CSharpUnresolvedFile(fileName);
+			this.usingScope = unresolvedFile.RootUsingScope;
 		}
 		
 		/// 
 		/// Creates a new TypeSystemConvertVisitor and initializes it with a given context.
 		/// 
-		/// The parsed file to which members should be added.
+		/// The parsed file to which members should be added.
 		/// The current using scope.
 		/// The current type definition.
-		public TypeSystemConvertVisitor(CSharpParsedFile parsedFile, UsingScope currentUsingScope = null, CSharpUnresolvedTypeDefinition currentTypeDefinition = null)
+		public TypeSystemConvertVisitor(CSharpUnresolvedFile unresolvedFile, UsingScope currentUsingScope = null, CSharpUnresolvedTypeDefinition currentTypeDefinition = null)
 		{
-			if (parsedFile == null)
-				throw new ArgumentNullException("parsedFile");
-			this.parsedFile = parsedFile;
-			this.usingScope = currentUsingScope ?? parsedFile.RootUsingScope;
+			if (unresolvedFile == null)
+				throw new ArgumentNullException("unresolvedFile");
+			this.unresolvedFile = unresolvedFile;
+			this.usingScope = currentUsingScope ?? unresolvedFile.RootUsingScope;
 			this.currentTypeDefinition = currentTypeDefinition;
 		}
 		
-		public CSharpParsedFile ParsedFile {
-			get { return parsedFile; }
+		public CSharpUnresolvedFile UnresolvedFile {
+			get { return unresolvedFile; }
 		}
 		
 		DomRegion MakeRegion(TextLocation start, TextLocation end)
 		{
-			return new DomRegion(parsedFile.FileName, start.Line, start.Column, end.Line, end.Column);
+			return new DomRegion(unresolvedFile.FileName, start.Line, start.Column, end.Line, end.Column);
 		}
 		
 		DomRegion MakeRegion(AstNode node)
@@ -122,7 +122,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 		#region Compilation Unit
 		public override IUnresolvedEntity VisitSyntaxTree (SyntaxTree unit)
 		{
-			parsedFile.Errors = unit.Errors;
+			unresolvedFile.Errors = unit.Errors;
 			return base.VisitSyntaxTree (unit);
 		}
 		#endregion
@@ -167,7 +167,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 				usingScope.Region = region;
 			}
 			base.VisitNamespaceDeclaration(namespaceDeclaration);
-			parsedFile.UsingScopes.Add(usingScope); // add after visiting children so that nested scopes come first
+			unresolvedFile.UsingScopes.Add(usingScope); // add after visiting children so that nested scopes come first
 			usingScope = previousUsingScope;
 			return null;
 		}
@@ -184,9 +184,9 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 				currentTypeDefinition.NestedTypes.Add(newType);
 			} else {
 				newType = new CSharpUnresolvedTypeDefinition(usingScope, name);
-				parsedFile.TopLevelTypeDefinitions.Add(newType);
+				unresolvedFile.TopLevelTypeDefinitions.Add(newType);
 			}
-			newType.ParsedFile = parsedFile;
+			newType.UnresolvedFile = unresolvedFile;
 			newType.HasExtensionMethods = false; // gets set to true when an extension method is added
 			return newType;
 		}
@@ -868,9 +868,9 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 		{
 			// non-assembly attributes are handled by their parent entity
 			if (attributeSection.AttributeTarget == "assembly") {
-				ConvertAttributes(parsedFile.AssemblyAttributes, attributeSection);
+				ConvertAttributes(unresolvedFile.AssemblyAttributes, attributeSection);
 			} else if (attributeSection.AttributeTarget == "module") {
-				ConvertAttributes(parsedFile.ModuleAttributes, attributeSection);
+				ConvertAttributes(unresolvedFile.ModuleAttributes, attributeSection);
 			}
 			return null;
 		}
@@ -1197,7 +1197,7 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
 			}
 			if (documentation != null) {
 				documentation.Reverse(); // bring documentation in correct order
-				parsedFile.AddDocumentation(entity, string.Join(Environment.NewLine, documentation));
+				unresolvedFile.AddDocumentation(entity, string.Join(Environment.NewLine, documentation));
 			}
 		}
 		
diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/CSharpProject.cs b/ICSharpCode.NRefactory.ConsistencyCheck/CSharpProject.cs
index 111e4dd7f9..e5072c4f32 100644
--- a/ICSharpCode.NRefactory.ConsistencyCheck/CSharpProject.cs
+++ b/ICSharpCode.NRefactory.ConsistencyCheck/CSharpProject.cs
@@ -91,13 +91,13 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 			if (!hasSystemCore && FindAssembly(Program.AssemblySearchPaths, "System.Core") != null)
 				references.Add(Program.LoadAssembly(FindAssembly(Program.AssemblySearchPaths, "System.Core")));
 			foreach (var item in p.GetItems("ProjectReference")) {
-				references.Add(new ProjectReference(solution, item.GetMetadataValue("Name")));
+				references.Add(new ProjectReference(item.EvaluatedInclude));
 			}
 			this.ProjectContent = new CSharpProjectContent()
 				.SetAssemblyName(this.AssemblyName)
 				.SetCompilerSettings(this.CompilerSettings)
 				.AddAssemblyReferences(references)
-				.UpdateProjectContent(null, Files.Select(f => f.ParsedFile));
+				.AddOrUpdateFiles(Files.Select(f => f.UnresolvedFile));
 		}
 		
 		string FindAssembly(IEnumerable assemblySearchPaths, string evaluatedInclude)
@@ -133,24 +133,6 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 		}
 	}
 	
-	public class ProjectReference : IAssemblyReference
-	{
-		readonly Solution solution;
-		readonly string projectTitle;
-		
-		public ProjectReference(Solution solution, string projectTitle)
-		{
-			this.solution = solution;
-			this.projectTitle = projectTitle;
-		}
-		
-		public IAssembly Resolve(ITypeResolveContext context)
-		{
-			var project = solution.Projects.Single(p => string.Equals(p.Title, projectTitle, StringComparison.OrdinalIgnoreCase));
-			return project.ProjectContent.Resolve(context);
-		}
-	}
-	
 	public class CSharpFile
 	{
 		public readonly CSharpProject Project;
@@ -159,7 +141,7 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 		public readonly ITextSource Content;
 		public readonly int LinesOfCode;
 		public SyntaxTree SyntaxTree;
-		public CSharpParsedFile ParsedFile;
+		public CSharpUnresolvedFile UnresolvedFile;
 		
 		public CSharpFile(CSharpProject project, string fileName)
 		{
@@ -176,7 +158,7 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 					Console.WriteLine("  " + error.Region + " " + error.Message);
 				}
 			}
-			this.ParsedFile = this.SyntaxTree.ToTypeSystem();
+			this.UnresolvedFile = this.SyntaxTree.ToTypeSystem();
 		}
 	}
 }
diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/FindReferencesConsistencyCheck.cs b/ICSharpCode.NRefactory.ConsistencyCheck/FindReferencesConsistencyCheck.cs
index 896a0e21c8..324ffb38a5 100644
--- a/ICSharpCode.NRefactory.ConsistencyCheck/FindReferencesConsistencyCheck.cs
+++ b/ICSharpCode.NRefactory.ConsistencyCheck/FindReferencesConsistencyCheck.cs
@@ -59,7 +59,7 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 							}
 						}
 					);
-					var resolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.ParsedFile);
+					var resolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.UnresolvedFile);
 					resolver.ApplyNavigator(navigator);
 				}
 			}
@@ -102,9 +102,9 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 				HashSet foundReferences = new HashSet();
 				var interestingFiles = new HashSet();
 				foreach (var searchScope in searchScopes) {
-					foreach (var parsedFile in fr.GetInterestingFiles(searchScope, project.Compilation)) {
-						var file = project.GetFile(parsedFile.FileName);
-						Debug.Assert(file.ParsedFile == parsedFile);
+					foreach (var unresolvedFile in fr.GetInterestingFiles(searchScope, project.Compilation)) {
+						var file = project.GetFile(unresolvedFile.FileName);
+						Debug.Assert(file.UnresolvedFile == unresolvedFile);
 						
 						// Skip file if it doesn't contain the search term
 						if (searchScope.SearchTerm != null && file.Content.IndexOf(searchScope.SearchTerm, 0, file.Content.TextLength, StringComparison.Ordinal) < 0)
@@ -114,7 +114,7 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 					}
 				}
 				foreach (var file in interestingFiles) {
-					fr.FindReferencesInFile(searchScopes, file.ParsedFile, file.SyntaxTree, project.Compilation,
+					fr.FindReferencesInFile(searchScopes, file.UnresolvedFile, file.SyntaxTree, project.Compilation,
 					                        delegate(AstNode node, ResolveResult result) {
 					                        	foundReferences.Add(node);
 					                        }, CancellationToken.None);
diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs b/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs
index 88ee1489c2..842f7fcdd1 100644
--- a/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs
+++ b/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs
@@ -63,7 +63,7 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 			using (new Timer("Resolve unresolved members... ")) TypeSystemTests.ResolvedUnresolvedMembers(solution);
 			//RunTestOnAllFiles("Roundtripping test", RoundtripTest.RunTest);
 			RunTestOnAllFiles("Resolver test", ResolverTest.RunTest);
-			RunTestOnAllFiles("Resolver test (no parsed file)", ResolverTest.RunTestWithoutParsedFile);
+			RunTestOnAllFiles("Resolver test (no parsed file)", ResolverTest.RunTestWithoutUnresolvedFile);
 			RunTestOnAllFiles("Resolver test (randomized order)", RandomizedOrderResolverTest.RunTest);
 			new FindReferencesConsistencyCheck(solution).Run();
 			
diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs b/ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs
index 06906f310b..e5ae47b941 100644
--- a/ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs
+++ b/ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs
@@ -45,9 +45,9 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 			Random rnd = new Random(seed);
 			var test = new RandomizedOrderResolverTest();
 			// Resolve all nodes, but in a random order without using a navigator.
-			test.resolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.ParsedFile);
+			test.resolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.UnresolvedFile);
 			// For comparing whether the results are equivalent, we also use a normal 'resolve all' resolver:
-			test.resolveAllResolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.ParsedFile);
+			test.resolveAllResolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.UnresolvedFile);
 			test.resolveAllResolver.ApplyNavigator(new ResolveAllNavigator(), CancellationToken.None);
 			// Prepare list of actions that we need to verify:
 			var actions = new List>();
diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/ResolverTest.cs b/ICSharpCode.NRefactory.ConsistencyCheck/ResolverTest.cs
index 23ee726b96..21bc31c8fd 100644
--- a/ICSharpCode.NRefactory.ConsistencyCheck/ResolverTest.cs
+++ b/ICSharpCode.NRefactory.ConsistencyCheck/ResolverTest.cs
@@ -35,7 +35,7 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 	{
 		public static void RunTest(CSharpFile file)
 		{
-			CSharpAstResolver resolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.ParsedFile);
+			CSharpAstResolver resolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.UnresolvedFile);
 			var navigator = new ValidatingResolveAllNavigator(file.FileName);
 			resolver.ApplyNavigator(navigator, CancellationToken.None);
 			navigator.Validate(resolver, file.SyntaxTree);
@@ -102,19 +102,19 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 			}
 		}
 		
-		public static void RunTestWithoutParsedFile(CSharpFile file)
+		public static void RunTestWithoutUnresolvedFile(CSharpFile file)
 		{
 			CSharpAstResolver resolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree);
 			var navigator = new ValidatingResolveAllNavigator(file.FileName);
 			resolver.ApplyNavigator(navigator, CancellationToken.None);
 			navigator.Validate(resolver, file.SyntaxTree);
 			
-			CSharpAstResolver originalResolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.ParsedFile);
+			CSharpAstResolver originalResolver = new CSharpAstResolver(file.Project.Compilation, file.SyntaxTree, file.UnresolvedFile);
 			foreach (var node in file.SyntaxTree.DescendantsAndSelf) {
 				var originalResult = originalResolver.Resolve(node);
 				var result = resolver.Resolve(node);
 				if (!RandomizedOrderResolverTest.IsEqualResolveResult(result, originalResult)) {
-					Console.WriteLine("Got different without IParsedFile at " + file.FileName + ":" + node.StartLocation);
+					Console.WriteLine("Got different without IUnresolvedFile at " + file.FileName + ":" + node.StartLocation);
 				}
 			}
 		}
diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/VisitorBenchmark.cs b/ICSharpCode.NRefactory.ConsistencyCheck/VisitorBenchmark.cs
index 9c58ef543e..855f09fea0 100644
--- a/ICSharpCode.NRefactory.ConsistencyCheck/VisitorBenchmark.cs
+++ b/ICSharpCode.NRefactory.ConsistencyCheck/VisitorBenchmark.cs
@@ -50,11 +50,6 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
 			        	visitor.EnterIdentifierExpression += list.Add;
 			        	syntaxTree.AcceptVisitor(visitor);
 			        });
-			RunTest("ObservableAstVisitor