diff --git a/Lib/idlelib/setup.py b/Lib/idlelib/setup.py
index 75a839c..2305adc 100644
--- a/Lib/idlelib/setup.py
+++ b/Lib/idlelib/setup.py
@@ -4,6 +4,8 @@
 from distutils.command.install_lib import install_lib
 import idlever
 
+idle_name = "idle"
+
 try:
     pos = sys.argv.index("--check-tkinter")
 except ValueError:
@@ -17,17 +19,19 @@
         raise SystemExit
 
 try:
-    package_dir = os.path.join(os.environ["SRCDIR"], "Tools", "idle")
+    package_dir = os.path.join(os.environ["SRCDIR"], "Tools", idle_name)
 except KeyError:
     package_dir = "."
 
-# name of idle package
-idlelib = "idlelib"
+# name of package to be installed in site-packages
+pkgname = idle_name + "lib"
 
-# the normal build_py would not incorporate the .txt files
-txt_files = ['config-unix.txt','config-win.txt','config.txt', 'help.txt']
+# the normal build_py would not incorporate the .txt or config files
+txt_files = ['extend.txt', 'help.txt', 'CREDITS.txt', 'LICENSE.txt']
+txt_files += ['config-extensions.def', 'config-highlight.def',
+              'config-keys.def', 'config-main.def']
 Icons = glob.glob1("Icons","*.gif")
-class idle_build_py(build_py):
+class IDLE_Builder(build_py):
     def get_plain_outfile(self, build_dir, package, file):
         # like get_module_outfile, but does not append .py
         outfile_path = [build_dir] + list(package) + [file]
@@ -36,26 +40,26 @@
     def run(self):
         # Copies all .py files, then also copies the txt and gif files
         build_py.run(self)
-        assert self.packages == [idlelib]
+        assert self.packages == [pkgname]
         for name in txt_files:
-            outfile = self.get_plain_outfile(self.build_lib, [idlelib], name)
+            outfile = self.get_plain_outfile(self.build_lib, [pkgname], name)
             dir = os.path.dirname(outfile)
             self.mkpath(dir)
             self.copy_file(os.path.join(package_dir, name), outfile,
                            preserve_mode = 0)
         for name in Icons:
             outfile = self.get_plain_outfile(self.build_lib,
-                                             [idlelib,"Icons"], name)
+                                             [pkgname, "Icons"], name)
             dir = os.path.dirname(outfile)
             self.mkpath(dir)
-            self.copy_file(os.path.join("Icons",name),
+            self.copy_file(os.path.join("Icons", name),
                            outfile, preserve_mode = 0)
 
     def get_source_files(self):
-        # returns the .py files, the .txt files, and the icons
+        # returns the .py files, the .txt and .def files, and the icons
         icons = [os.path.join(package_dir, "Icons",name) for name in Icons]
         txts = [os.path.join(package_dir, name) for name in txt_files]
-        return build_py.get_source_files(self)+txt_files+icons
+        return build_py.get_source_files(self) + txt_files + icons
 
     def get_outputs(self, include_bytecode=1):
         # returns the built files
@@ -64,42 +68,46 @@
             return outputs
         for name in txt_files:
             filename = self.get_plain_outfile(self.build_lib,
-                                              [idlelib], name)
+                                              [pkgname], name)
             outputs.append(filename)
         for name in Icons:
             filename = self.get_plain_outfile(self.build_lib,
-                                              [idlelib,"Icons"], name)
+                                              [pkgname, "Icons"], name)
             outputs.append(filename)
         return outputs
 
 # Arghhh. install_lib thinks that all files returned from build_py's
 # get_outputs are bytecode files
 
-class idle_install_lib(install_lib):
+class IDLE_Installer(install_lib):
     def _bytecode_filenames(self, files):
         files = [n for n in files if n.endswith('.py')]
-        return install_lib._bytecode_filenames(self,files)
+        return install_lib._bytecode_filenames(self, files)
 
-setup(name="IDLE",
+setup(name="IDLEfork",
       version = idlever.IDLE_VERSION,
-      description = "IDLE Fork, the Forked Python IDE",
-      author = "Guido van Rossum",
-      author_email = "guido@python.org",
-      #url =
+      description = "IDLEfork, the Developmental Python IDE",
+      author = "Guido van Rossum et. al.",
+      author_email = "idle-dev@python.org",
+      url = "https://sourceforge.net/projects/idlefork/",
       long_description =
-"""IDLE is a Tkinter based IDE for Python. It is written in 100% pure
-Python and works both on Windows and Unix. It features a multi-window
-text editor with multiple undo, Python colorizing, and many other things,
-as well as a Python shell window and a debugger.
+"""IDLE is a Tkinter based IDE for Python. It is written in 100% pure Python
+and works both on Windows and Unix. It features a multi-window text editor with
+multiple undo, Python colorizing, and many other things, as well as a Python
+shell window and a debugger.
 
-IDLE Fork is a separate line of development which was initiated by D. Scherer
-at CMU as part of Visual Python.  It features execution in a separate
-process, with a fresh environment for each run. For further details, 
-refer to idlefork.sourceforge.net.""",
+IDLEfork is a separate line of development which was initiated by D. Scherer
+at CMU as part of Visual Python.  It features execution in a separate process
+which is newly initiated for each run.  At version 0.9 the RPC was changed to
+incorporate code by GvR, which supports the debugger.  IDLEfork also
+incorporates a GUI configuration utilility.  For further details, refer to
+idlefork.sourceforge.net.
 
-      cmdclass = {'build_py':idle_build_py,
-                  'install_lib':idle_install_lib},
-      package_dir = {idlelib: package_dir},
-      packages = [idlelib],
-      scripts = [os.path.join(package_dir, 'idle')]
+""",
+
+      cmdclass = {'build_py':IDLE_Builder,
+                  'install_lib':IDLE_Installer},
+      package_dir = {pkgname: package_dir},
+      packages = [pkgname],
+      scripts = [os.path.join(package_dir, idle_name)]
       )
