diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
index 5a6069d467..df32498974 100644
--- a/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
+++ b/src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
@@ -69,7 +69,7 @@ namespace ICSharpCode.PackageManagement
 		IPackageRepository ActivePackageRepository {
 			get { return registeredPackageRepositories.ActiveRepository; }
 		}
-				
+		
 		public IPackageManagementProject GetActiveProject(IPackageRepository sourceRepository)
 		{
 			MSBuildBasedProject activeProject = GetActiveMSBuildBasedProject();
@@ -152,7 +152,18 @@ namespace ICSharpCode.PackageManagement
 		public IQueryable<IPackage> GetPackages()
 		{
 			ISolutionPackageRepository repository = CreateSolutionPackageRepository();
-			return repository.GetPackages();
+			List<IPackageManagementProject> projects = GetProjects(ActivePackageRepository).ToList();
+			return repository
+				.GetPackages()
+				.Where(package => IsPackageInstalledInSolutionOrAnyProject(projects, package));
+		}
+		
+		bool IsPackageInstalledInSolutionOrAnyProject(IList<IPackageManagementProject> projects, IPackage package)
+		{
+			if (projects.Any(project => project.IsPackageInstalled(package))) {
+				return true;
+			}
+			return false;
 		}
 		
 		public string GetInstallPath(IPackage package)
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementProjectFactory.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementProjectFactory.cs
index 496975d9dc..6749893d27 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementProjectFactory.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageManagementProjectFactory.cs
@@ -12,6 +12,17 @@ namespace PackageManagement.Tests.Helpers
 {
 	public class FakePackageManagementProjectFactory : IPackageManagementProjectFactory
 	{
+		public FakePackageManagementProjectFactory()
+		{
+			CreatePackageManagementProject = (sourceRepository, project) => {
+				RepositoriesPassedToCreateProject.Add(sourceRepository);
+				ProjectsPassedToCreateProject.Add(project);
+				
+				var fakeProject = new FakePackageManagementProject();
+				FakeProjectsCreated.Add(fakeProject);
+				return fakeProject;
+			};
+		}
 		public List<FakePackageManagementProject> FakeProjectsCreated = 
 			new List<FakePackageManagementProject>();
 		
@@ -30,17 +41,17 @@ namespace PackageManagement.Tests.Helpers
 			get { return ProjectsPassedToCreateProject[0]; }
 		}
 		
+		public Func<IPackageRepository, MSBuildBasedProject, FakePackageManagementProject>
+			CreatePackageManagementProject = (sourceRepository, project) => {
+			return null;
+		};
+		
 		public List<MSBuildBasedProject> ProjectsPassedToCreateProject  =
 			new List<MSBuildBasedProject>();
 		
 		public IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project)
 		{
-			RepositoriesPassedToCreateProject.Add(sourceRepository);
-			ProjectsPassedToCreateProject.Add(project);
-			
-			var fakeProject = new FakePackageManagementProject();
-			FakeProjectsCreated.Add(fakeProject);
-			return fakeProject;
+			return CreatePackageManagementProject(sourceRepository, project);
 		}
 	}
 }
diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs
index e3f2420b5d..a8bced1827 100644
--- a/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs
+++ b/src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs
@@ -452,13 +452,18 @@ namespace PackageManagement.Tests
 			fakeProjectService.CurrentProject = null;
 			FakePackage package = FakePackage.CreatePackageWithVersion("Test", "1.3.4.5");
 			fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(package);
+			TestableProject testProject = AddProjectToOpenProjects("Test");
+			var project = new FakePackageManagementProject();
+			fakeProjectFactory.CreatePackageManagementProject = (repository, msbuildProject) => {
+				return project;
+			};
+			project.FakePackages.Add(package);
 			
 			IQueryable<IPackage> packages = solution.GetPackages();
 			
 			var expectedPackages = new FakePackage[] {
 				package
 			};
-			
 			PackageCollectionAssert.AreEqual(expectedPackages, packages);
 		}
 		
@@ -553,5 +558,44 @@ namespace PackageManagement.Tests
 			Assert.AreEqual(expectedInstallPath, installPath);
 			Assert.AreEqual(package, fakeSolutionPackageRepository.PackagePassedToGetInstallPath);
 		}
+		
+		[Test]
+		public void GetPackages_OnePackageInstalledIntoOneProjectButTwoPackagesInSolutionRepository_ReturnsOnlyPackageInstalled()
+		{
+			CreateSolution();
+			fakeProjectService.CurrentProject = null;
+			TestableProject testProject = AddProjectToOpenProjects("Test");
+			var project = new FakePackageManagementProject();
+			fakeProjectFactory.CreatePackageManagementProject = (repository, msbuildProject) => {
+				return project;
+			};
+			FakePackage notInstalledPackage = FakePackage.CreatePackageWithVersion("NotInstalled", "1.0.0.0");
+			fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(notInstalledPackage);
+			FakePackage installedPackage = FakePackage.CreatePackageWithVersion("Installed", "1.0.0.0");
+			fakeSolutionPackageRepository.FakeSharedRepository.FakePackages.Add(installedPackage);
+			project.FakePackages.Add(installedPackage);
+			
+			IQueryable<IPackage> packages = solution.GetPackages();
+			
+			var expectedPackages = new FakePackage[] {
+				installedPackage
+			};
+		}
+		
+		[Test]
+		public void GetPackages_TwoProjectsButNoPackagesInstalled_PackageProjectsCreatedUsingActiveRepository()
+		{
+			CreateSolution();
+			fakeProjectService.CurrentProject = null;
+			TestableProject testProject1 = AddProjectToOpenProjects("Test1");
+			TestableProject testProject2 = AddProjectToOpenProjects("Test2");
+			
+			IQueryable<IPackage> packages = solution.GetPackages();
+			
+			Assert.AreEqual(testProject1, fakeProjectFactory.ProjectsPassedToCreateProject[0]);
+			Assert.AreEqual(testProject2, fakeProjectFactory.ProjectsPassedToCreateProject[1]);
+			Assert.AreEqual(fakeRegisteredPackageRepositories.ActiveRepository, fakeProjectFactory.RepositoriesPassedToCreateProject[0]);
+			Assert.AreEqual(fakeRegisteredPackageRepositories.ActiveRepository, fakeProjectFactory.RepositoriesPassedToCreateProject[1]);
+		}
 	}
 }