diff --git a/Lib/packaging/database.py b/Lib/packaging/database.py
index c1bd729..0aaa0cd 100644
--- a/Lib/packaging/database.py
+++ b/Lib/packaging/database.py
@@ -351,7 +351,7 @@
                 except IOError:
                     requires = None
             self.metadata = Metadata(path=path)
-            self.name = self.metadata['name']
+            self.name = self.metadata['Name']
             self.version = self.metadata['Version']
 
         else:
diff --git a/Lib/packaging/depgraph.py b/Lib/packaging/depgraph.py
index b3c555a..843aab4 100644
--- a/Lib/packaging/depgraph.py
+++ b/Lib/packaging/depgraph.py
@@ -72,7 +72,7 @@
         self.missing[distribution].append(requirement)
 
     def _repr_dist(self, dist):
-        return '%r %s' % (dist.name, dist.metadata['Version'])
+        return '%r %s' % (dist.name, dist.version)
 
     def repr_node(self, dist, level=1):
         """Prints only a subgraph"""
@@ -145,7 +145,7 @@
         graph.add_distribution(dist)
         provides = (dist.metadata['Provides-Dist'] +
                     dist.metadata['Provides'] +
-                    ['%s (%s)' % (dist.name, dist.metadata['Version'])])
+                    ['%s (%s)' % (dist.name, dist.version)])
 
         for p in provides:
             comps = p.strip().rsplit(" ", 1)
diff --git a/Lib/packaging/install.py b/Lib/packaging/install.py
index 51e70df..b6816e5 100644
--- a/Lib/packaging/install.py
+++ b/Lib/packaging/install.py
@@ -85,7 +85,7 @@
     dist.parse_config_files()
     try:
         dist.run_command('install_dist')
-        name = dist.metadata['name']
+        name = dist.metadata['Name']
         return database.get_distribution(name) is not None
     except (IOError, os.error, PackagingError, CCompilerError) as msg:
         raise ValueError("Failed to install, " + str(msg))
@@ -118,10 +118,10 @@
     """
     path = os.path.abspath(path)
     if os.path.isdir(path):
-        logger.info('Installing from source directory: %s', path)
+        logger.info('Installing from source directory: %r', path)
         return _run_install_from_dir(path)
     elif _is_archive_file(path):
-        logger.info('Installing from archive: %s', path)
+        logger.info('Installing from archive: %r', path)
         _unpacked_dir = tempfile.mkdtemp()
         try:
             shutil.unpack_archive(path, _unpacked_dir)
@@ -129,7 +129,7 @@
         finally:
             shutil.rmtree(_unpacked_dir)
     else:
-        logger.warning('No projects to install.')
+        logger.warning('No project to install.')
         return False
 
 
@@ -191,7 +191,7 @@
 
             # reverting
             for installed_dist in installed_dists:
-                logger.info('Reverting %s', installed_dist)
+                logger.info('Reverting %r', installed_dist)
                 remove(installed_dist.name, paths)
             raise e
     return installed_dists
@@ -314,12 +314,12 @@
         if predicate.name.lower() != installed_project.name.lower():
             continue
         found = True
-        logger.info('Found %s %s', installed_project.name,
-                    installed_project.metadata['version'])
+        logger.info('Found %r %s', installed_project.name,
+                    installed_project.version)
 
         # if we already have something installed, check it matches the
         # requirements
-        if predicate.match(installed_project.metadata['version']):
+        if predicate.match(installed_project.version):
             return infos
         break
 
@@ -336,7 +336,7 @@
     try:
         release = index.get_release(requirements)
     except (ReleaseNotFound, ProjectNotFound):
-        raise InstallationException('Release not found: "%s"' % requirements)
+        raise InstallationException('Release not found: %r' % requirements)
 
     if release is None:
         logger.info('Could not find a matching project')
@@ -386,7 +386,7 @@
     """
     dist = get_distribution(project_name, use_egg_info=True, paths=paths)
     if dist is None:
-        raise PackagingError('Distribution "%s" not found' % project_name)
+        raise PackagingError('Distribution %r not found' % project_name)
     files = dist.list_installed_files(local=True)
     rmdirs = []
     rmfiles = []
@@ -423,7 +423,7 @@
 
     if not success:
         logger.info('%r cannot be removed.', project_name)
-        logger.info('Error: %s' % str(error))
+        logger.info('Error: %s', error)
         return False
 
     logger.info('Removing %r: ', project_name)
@@ -523,7 +523,7 @@
 
     except InstallationConflict as e:
         if logger.isEnabledFor(logging.INFO):
-            projects = ['%r %s' % (p.name, p.version) for p in e.args[0]]
+            projects = ('%r %s' % (p.name, p.version) for p in e.args[0])
             logger.info('%r conflicts with %s', project, ','.join(projects))
 
     return True
diff --git a/Lib/packaging/tests/test_database.py b/Lib/packaging/tests/test_database.py
index 3eeda83..119fa23 100644
--- a/Lib/packaging/tests/test_database.py
+++ b/Lib/packaging/tests/test_database.py
@@ -302,7 +302,7 @@
             self.assertIsInstance(dist, Distribution)
             if (dist.name in dict(fake_dists) and
                 dist.path.startswith(self.fake_dists_path)):
-                found_dists.append((dist.name, dist.metadata['version'], ))
+                found_dists.append((dist.name, dist.version))
             else:
                 # check that it doesn't find anything more than this
                 self.assertFalse(dist.path.startswith(self.fake_dists_path))
@@ -323,7 +323,7 @@
             self.assertIsInstance(dist, (Distribution, EggInfoDistribution))
             if (dist.name in dict(fake_dists) and
                 dist.path.startswith(self.fake_dists_path)):
-                found_dists.append((dist.name, dist.metadata['version']))
+                found_dists.append((dist.name, dist.version))
             else:
                 self.assertFalse(dist.path.startswith(self.fake_dists_path))
 
@@ -489,17 +489,17 @@
 
         checkLists([], _yield_distributions(False, False, sys.path))
 
-        found = [(dist.name, dist.metadata['Version'])
+        found = [(dist.name, dist.version)
                  for dist in _yield_distributions(False, True, sys.path)
                  if dist.path.startswith(self.fake_dists_path)]
         checkLists(eggs, found)
 
-        found = [(dist.name, dist.metadata['Version'])
+        found = [(dist.name, dist.version)
                  for dist in _yield_distributions(True, False, sys.path)
                  if dist.path.startswith(self.fake_dists_path)]
         checkLists(dists, found)
 
-        found = [(dist.name, dist.metadata['Version'])
+        found = [(dist.name, dist.version)
                  for dist in _yield_distributions(True, True, sys.path)
                  if dist.path.startswith(self.fake_dists_path)]
         checkLists(dists + eggs, found)
diff --git a/Lib/packaging/tests/test_install.py b/Lib/packaging/tests/test_install.py
index 35733c8..cf0817c 100644
--- a/Lib/packaging/tests/test_install.py
+++ b/Lib/packaging/tests/test_install.py
@@ -29,7 +29,7 @@
         self.metadata['Requires-Dist'] = deps
 
     def __repr__(self):
-        return '<InstalledDist %s>' % self.metadata['Name']
+        return '<InstalledDist %r>' % self.metadata['Name']
 
 
 class ToInstallDist:
