Index: b/setup.py
===================================================================
--- a/setup.py
+++ b/setup.py
@@ -42,8 +42,13 @@
     )
     if any(os.environ.get(var) not in (None, "", "0") for var in var_names):
         return
-    yield ("easy_install-{shortver} = setuptools.command.easy_install:main"
-        .format(shortver=sys.version[:3]))
+    if 'XPYVERS' in os.environ:
+        for version in os.environ['XPYVERS'].split():
+            yield ("easy_install-{shortver} = setuptools.command.easy_install:main"
+                   .format(shortver=sys.version[:3]))
+    else:
+        yield ("easy_install-{shortver} = setuptools.command.easy_install:main"
+               .format(shortver=sys.version[:3]))
 
 console_scripts = list(_gen_console_scripts())
 
Index: b/setuptools/command/easy_install.py
===================================================================
--- a/setuptools/command/easy_install.py
+++ b/setuptools/command/easy_install.py
@@ -123,13 +123,15 @@
         ('local-snapshots-ok', 'l',
             "allow building eggs from local checkouts"),
         ('version', None, "print version information and exit"),
+        ('install-layout=', None, "installation layout to choose (known values: deb)"),
+        ('force-installation-into-system-dir', '0', "force installation into /usr"),
         ('no-find-links', None,
             "Don't load find-links defined in packages being installed")
     ]
     boolean_options = [
         'zip-ok', 'multi-version', 'exclude-scripts', 'upgrade', 'always-copy',
         'editable',
-        'no-deps', 'local-snapshots-ok', 'version'
+        'no-deps', 'local-snapshots-ok', 'version', 'force-installation-into-system-dir'
     ]
 
     if site.ENABLE_USER_SITE:
@@ -180,6 +182,10 @@
         self.site_dirs = None
         self.installed_projects = {}
         self.sitepy_installed = False
+        # enable custom installation, known values: deb
+        self.install_layout = None
+        self.force_installation_into_system_dir = None
+
         # Always read easy_install options, even if we are subclassed, or have
         # an independent instance created.  This ensures that defaults will
         # always come from the standard configuration file(s)' "easy_install"
@@ -244,6 +250,10 @@
         self.expand_basedirs()
         self.expand_dirs()
 
+        if self.install_layout:
+            if not self.install_layout.lower() in ['deb']:
+                    raise DistutilsOptionError("unknown value for --install-layout")
+
         self._expand('install_dir','script_dir','build_directory','site_dirs')
         # If a non-default installation directory was specified, default the
         # script directory to match it.
@@ -267,6 +277,15 @@
         if self.user and self.install_purelib:
             self.install_dir = self.install_purelib
             self.script_dir = self.install_scripts
+
+        if self.prefix == '/usr' and not self.force_installation_into_system_dir:
+            raise DistutilsOptionError("""installation into /usr
+
+Trying to install into the system managed parts of the file system. Please
+consider to install to another location, or use the option
+--force-installation-into-system-dir to overwrite this warning.
+""")
+
         # default --record from the install command
         self.set_undefined_options('install', ('record', 'record'))
         # Should this be moved to the if statement below? It's not used
@@ -1207,11 +1226,28 @@
                 self.debug_print("os.makedirs('%s', 0700)" % path)
                 os.makedirs(path, 0x1C0)    # 0700
 
+    if sys.version[:3] in ('2.3', '2.4', '2.5') or 'real_prefix' in sys.__dict__:
+        sitedir_name = 'site-packages'
+    else:
+        sitedir_name = 'dist-packages'
+
     INSTALL_SCHEMES = dict(
         posix = dict(
             install_dir = '$base/lib/python$py_version_short/site-packages',
             script_dir = '$base/bin',
         ),
+        unix_local = dict(
+            install_dir = '$base/local/lib/python$py_version_short/%s' % sitedir_name,
+            script_dir  = '$base/local/bin',
+        ),
+        posix_local = dict(
+            install_dir = '$base/local/lib/python$py_version_short/%s' % sitedir_name,
+            script_dir  = '$base/local/bin',
+        ),
+        deb_system = dict(
+            install_dir = '$base/lib/python3/%s' % sitedir_name,
+            script_dir  = '$base/bin',
+        ),
     )
 
     DEFAULT_SCHEME = dict(
@@ -1222,11 +1258,18 @@
     def _expand(self, *attrs):
         config_vars = self.get_finalized_command('install').config_vars
 
-        if self.prefix:
+        if self.prefix or self.install_layout:
+            if self.install_layout and self.install_layout.lower() in ['deb']:
+                    scheme_name = "deb_system"
+                    self.prefix = '/usr'
+            elif self.prefix or 'real_prefix' in sys.__dict__:
+                scheme_name = os.name
+            else:
+                scheme_name = "posix_local"
             # Set default install_dir/scripts from --prefix
             config_vars = config_vars.copy()
             config_vars['base'] = self.prefix
-            scheme = self.INSTALL_SCHEMES.get(os.name,self.DEFAULT_SCHEME)
+            scheme = self.INSTALL_SCHEMES.get(scheme_name,self.DEFAULT_SCHEME)
             for attr,val in scheme.items():
                 if getattr(self,attr,None) is None:
                     setattr(self,attr,val)
@@ -1258,9 +1301,14 @@
                                          "site-packages"),
                             os.path.join(prefix, "lib", "site-python")])
             else:
+                if sys.version[:3] in ('2.3', '2.4', '2.5'):
+                    sdir = "site-packages"
+                else:
+                    sdir = "dist-packages"
                 sitedirs.extend(
-                    [prefix, os.path.join(prefix, "lib", "site-packages")]
-                )
+                    [os.path.join(prefix, "local/lib", "python" + sys.version[:3], sdir),
+                     os.path.join(prefix, "lib", "python" + sys.version[:3], sdir)]
+                    )
             if sys.platform == 'darwin':
                 # for framework builds *only* we add the standard Apple
                 # locations. Currently only per-user, but /Library and
Index: b/setuptools/command/install_egg_info.py
===================================================================
--- a/setuptools/command/install_egg_info.py
+++ b/setuptools/command/install_egg_info.py
@@ -1,7 +1,7 @@
 from setuptools import Command
 from setuptools.archive_util import unpack_archive
 from distutils import log, dir_util
-import os, pkg_resources
+import os, sys, pkg_resources
 
 class install_egg_info(Command):
     """Install an .egg-info directory for the package"""
@@ -14,13 +14,30 @@
 
     def initialize_options(self):
         self.install_dir = None
+        self.install_layout = None
+        self.prefix_option = None
 
     def finalize_options(self):
         self.set_undefined_options('install_lib',('install_dir','install_dir'))
+        self.set_undefined_options('install',('install_layout','install_layout'))
+        if sys.hexversion > 0x2060000:
+            self.set_undefined_options('install',('prefix_option','prefix_option'))
         ei_cmd = self.get_finalized_command("egg_info")
         basename = pkg_resources.Distribution(
             None, None, ei_cmd.egg_name, ei_cmd.egg_version
         ).egg_name()+'.egg-info'
+
+        if self.install_layout:
+            if not self.install_layout.lower() in ['deb']:
+                raise DistutilsOptionError(
+                    "unknown value for --install-layout")
+            basename = basename.replace('-py%s' % pkg_resources.PY_MAJOR, '')
+        elif self.prefix_option or 'real_prefix' in sys.__dict__:
+            # don't modify for virtualenv
+            pass
+        else:
+            basename = basename.replace('-py%s' % pkg_resources.PY_MAJOR, '')
+
         self.source = ei_cmd.egg_info
         self.target = os.path.join(self.install_dir, basename)
         self.outputs = [self.target]
