diff --git a/Lib/idlelib/aboutDialog.py b/Lib/idlelib/aboutDialog.py
index 36c520f..94dd6cb 100644
--- a/Lib/idlelib/aboutDialog.py
+++ b/Lib/idlelib/aboutDialog.py
@@ -1,5 +1,5 @@
-"""
-about box for idle
+"""About Dialog for IDLE
+
 """
 
 from Tkinter import *
@@ -8,107 +8,129 @@
 import idlever
 
 class AboutDialog(Toplevel):
-    """
-    modal about dialog for idle
+    """Modal about dialog for idle
+
     """
     def __init__(self,parent,title):
         Toplevel.__init__(self, parent)
         self.configure(borderwidth=5)
         self.geometry("+%d+%d" % (parent.winfo_rootx()+30,
-                parent.winfo_rooty()+30))
-        self.bg="#707070"
-        self.fg="#ffffff"
-
+                                  parent.winfo_rooty()+30))
+        self.bg = "#707070"
+        self.fg = "#ffffff"
         self.CreateWidgets()
-        self.resizable(height=FALSE,width=FALSE)
+        self.resizable(height=FALSE, width=FALSE)
         self.title(title)
         self.transient(parent)
         self.grab_set()
         self.protocol("WM_DELETE_WINDOW", self.Ok)
         self.parent = parent
         self.buttonOk.focus_set()
-        #key bindings for this dialog
-        self.bind('<Alt-c>',self.CreditsButtonBinding) #credits button
-        self.bind('<Alt-l>',self.LicenseButtonBinding) #license button
         self.bind('<Return>',self.Ok) #dismiss dialog
         self.bind('<Escape>',self.Ok) #dismiss dialog
         self.wait_window()
 
     def CreateWidgets(self):
-        frameMain = Frame(self,borderwidth=2,relief=SUNKEN)
+        frameMain = Frame(self, borderwidth=2, relief=SUNKEN)
         frameButtons = Frame(self)
-        frameButtons.pack(side=BOTTOM,fill=X)
-        frameMain.pack(side=TOP,expand=TRUE,fill=BOTH)
-        self.buttonOk = Button(frameButtons,text='Ok',
-                command=self.Ok)#,default=ACTIVE
-        self.buttonOk.pack(padx=5,pady=5)
-        #self.picture = Image('photo',data=self.pictureData)
-        frameBg = Frame(frameMain,bg=self.bg)
-        frameBg.pack(expand=TRUE,fill=BOTH)
-        labelTitle = Label(frameBg,text='IDLEfork',fg=self.fg,bg=self.bg,
-                font=('courier', 24, 'bold'))
-        labelTitle.grid(row=0,column=0,sticky=W,padx=10,pady=10)
-        #labelPicture = Label(frameBg,text='[picture]')
-        #image=self.picture,bg=self.bg)
-        #labelPicture.grid(row=0,column=1,sticky=W,rowspan=2,padx=0,pady=3)
-        labelVersion = Label(frameBg,text='version  '+idlever.IDLE_VERSION,
-                fg=self.fg,bg=self.bg)
-        labelVersion.grid(row=1,column=0,sticky=W,padx=10,pady=5)
-        labelDesc = Label(frameBg,
-                text="A development version of Python's lightweight\n"+
-                'Integrated DeveLopment Environment, IDLE.',
-                justify=LEFT,fg=self.fg,bg=self.bg)
-        labelDesc.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5)
-        labelCopyright = Label(frameBg,
-                text="Copyright (c) 2001 - 2003 Python Software Foundation\nAll Rights Reserved",
-                justify=LEFT,fg=self.fg,bg=self.bg)
-        labelCopyright.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5)
-        labelLicense = Label(frameBg,
-                text='Released under the Python 2.3 PSF License',
-                justify=LEFT,fg=self.fg,bg=self.bg)
-        labelLicense.grid(row=4,column=0,sticky=W,columnspan=3,padx=10,pady=5)
-        Frame(frameBg,height=5,bg=self.bg).grid(row=5,column=0)
-        labelEmail = Label(frameBg,text='email:  idle-dev@python.org',
-                justify=LEFT,fg=self.fg,bg=self.bg)
+        frameButtons.pack(side=BOTTOM, fill=X)
+        frameMain.pack(side=TOP, expand=TRUE, fill=BOTH)
+        self.buttonOk = Button(frameButtons, text='Close',
+                               command=self.Ok)
+        self.buttonOk.pack(padx=5, pady=5)
+        #self.picture = Image('photo', data=self.pictureData)
+        frameBg = Frame(frameMain, bg=self.bg)
+        frameBg.pack(expand=TRUE, fill=BOTH)
+        labelTitle = Label(frameBg, text='IDLE', fg=self.fg, bg=self.bg,
+                           font=('courier', 24, 'bold'))
+        labelTitle.grid(row=0, column=0, sticky=W, padx=10, pady=10)
+        #labelPicture = Label(frameBg, text='[picture]')
+        #image=self.picture, bg=self.bg)
+        #labelPicture.grid(row=1, column=1, sticky=W, rowspan=2,
+        #                  padx=0, pady=3)
+        byline = "Python's Integrated DeveLopment Environment" + 5*'\n'
+        labelDesc = Label(frameBg, text=byline, justify=LEFT,
+                          fg=self.fg, bg=self.bg)
+        labelDesc.grid(row=2, column=0, sticky=W, columnspan=3, padx=10, pady=5)
+        labelEmail = Label(frameBg, text='email:  idle-dev@python.org',
+                           justify=LEFT, fg=self.fg, bg=self.bg)
         labelEmail.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0)
-        labelWWW = Label(frameBg,text='www:  http://idlefork.sourceforge.net',
-                justify=LEFT,fg=self.fg,bg=self.bg)
-        labelWWW.grid(row=7,column=0,columnspan=2,sticky=W,padx=10,pady=0)
-        Frame(frameBg,borderwidth=1,relief=SUNKEN,
-                height=2,bg=self.bg).grid(row=8,column=0,sticky=EW,
-                                          columnspan=3, padx=5, pady=5)
-        labelPythonVer = Label(frameBg,text='Python version:  '+
-                sys.version.split()[0],fg=self.fg,bg=self.bg)
-        labelPythonVer.grid(row=9,column=0,sticky=W,padx=10,pady=0)
-        #handle weird tk version num in windoze python >= 1.6 (?!?)
+        labelWWW = Label(frameBg, text='www:  http://www.python.org/idle/',
+                         justify=LEFT, fg=self.fg, bg=self.bg)
+        labelWWW.grid(row=7, column=0, columnspan=2, sticky=W, padx=10, pady=0)
+        Frame(frameBg, borderwidth=1, relief=SUNKEN,
+              height=2, bg=self.bg).grid(row=8, column=0, sticky=EW,
+                                         columnspan=3, padx=5, pady=5)
+        labelPythonVer = Label(frameBg, text='Python version:  ' + \
+                               sys.version.split()[0], fg=self.fg, bg=self.bg)
+        labelPythonVer.grid(row=9, column=0, sticky=W, padx=10, pady=0)
+        # handle weird tk version num in windoze python >= 1.6 (?!?)
         tkVer = `TkVersion`.split('.')
         tkVer[len(tkVer)-1] = str('%.3g' % (float('.'+tkVer[len(tkVer)-1])))[2:]
         if tkVer[len(tkVer)-1] == '':
             tkVer[len(tkVer)-1] = '0'
         tkVer = string.join(tkVer,'.')
-        labelTkVer = Label(frameBg,text='Tk version:  '+
-                tkVer,fg=self.fg,bg=self.bg)
-        labelTkVer.grid(row=9,column=1,sticky=W,padx=2,pady=0)
-
-        self.buttonLicense = Button(frameBg,text='View License',underline=5,
-                width=14,highlightbackground=self.bg,command=self.ShowLicense)#takefocus=FALSE
-        self.buttonLicense.grid(row=10,column=0,sticky=W,padx=10,pady=10)
-        self.buttonCredits = Button(frameBg,text='View Credits',underline=5,
-                width=14,highlightbackground=self.bg,command=self.ShowCredits)#takefocus=FALSE
-        self.buttonCredits.grid(row=10,column=1,columnspan=2,sticky=E,padx=10,pady=10)
-
-    def CreditsButtonBinding(self,event):
-        self.buttonCredits.invoke()
-
-    def LicenseButtonBinding(self,event):
-        self.buttonLicense.invoke()
+        labelTkVer = Label(frameBg, text='Tk version:  '+
+                           tkVer, fg=self.fg, bg=self.bg)
+        labelTkVer.grid(row=9, column=1, sticky=W, padx=2, pady=0)
+        py_button_f = Frame(frameBg, bg=self.bg)
+        py_button_f.grid(row=10, column=0, columnspan=2, sticky=NSEW)
+        buttonLicense = Button(py_button_f, text='License', width=8,
+                               highlightbackground=self.bg,
+                               command=self.ShowLicense)
+        buttonLicense.pack(side=LEFT, padx=10, pady=10)
+        buttonCopyright = Button(py_button_f, text='Copyright', width=8,
+                                 highlightbackground=self.bg,
+                                 command=self.ShowCopyright)
+        buttonCopyright.pack(side=LEFT, padx=10, pady=10)
+        buttonCredits = Button(py_button_f, text='Credits', width=8,
+                               highlightbackground=self.bg,
+                               command=self.ShowPythonCredits)
+        buttonCredits.pack(side=LEFT, padx=10, pady=10)
+        Frame(frameBg, borderwidth=1, relief=SUNKEN,
+              height=2, bg=self.bg).grid(row=11, column=0, sticky=EW,
+                                         columnspan=3, padx=5, pady=5)
+        idle_v = Label(frameBg, text='IDLE version  ' + idlever.IDLE_VERSION,
+                       fg=self.fg, bg=self.bg)
+        idle_v.grid(row=12, column=0, sticky=W, padx=10, pady=0)
+        idle_button_f = Frame(frameBg, bg=self.bg)
+        idle_button_f.grid(row=13, column=0, columnspan=3, sticky=NSEW)
+        idle_about_b = Button(idle_button_f, text='README', width=8,
+                                highlightbackground=self.bg,
+                                command=self.ShowIDLEAbout)
+        idle_about_b.pack(side=LEFT, padx=10, pady=10)
+        idle_news_b = Button(idle_button_f, text='NEWS', width=8,
+                                highlightbackground=self.bg,
+                                command=self.ShowIDLENEWS)
+        idle_news_b.pack(side=LEFT, padx=10, pady=10)
+        idle_credits_b = Button(idle_button_f, text='Credits', width=8,
+                                highlightbackground=self.bg,
+                                command=self.ShowIDLECredits)
+        idle_credits_b.pack(side=LEFT, padx=10, pady=10)
 
     def ShowLicense(self):
-        self.ViewFile('About - License','LICENSE.txt')
+        self.display_printer_text(license, 'About - License')
 
-    def ShowCredits(self):
+    def ShowCopyright(self):
+        self.display_printer_text(copyright, 'About - Copyright')
+
+    def ShowPythonCredits(self):
+        self.display_printer_text(credits, 'About - Python Credits')
+
+    def ShowIDLECredits(self):
         self.ViewFile('About - Credits','CREDITS.txt')
 
+    def ShowIDLEAbout(self):
+        self.ViewFile('About - Readme', 'README.txt')
+
+    def ShowIDLENEWS(self):
+        self.ViewFile('About - NEWS', 'NEWS.txt')
+
+    def display_printer_text(self, printer, title):
+        printer._Printer__setup()
+        data = '\n'.join(printer._Printer__lines)
+        textView.TextViewer(self, title, None, data)
+
     def ViewFile(self,viewTitle,viewFile):
         fn=os.path.join(os.path.abspath(os.path.dirname(__file__)),viewFile)
         textView.TextViewer(self,viewTitle,fn)
@@ -117,10 +139,10 @@
         self.destroy()
 
 if __name__ == '__main__':
-    #test the dialog
-    root=Tk()
+    # test the dialog
+    root = Tk()
     def run():
         import aboutDialog
         aboutDialog.AboutDialog(root,'About')
-    Button(root,text='Dialog',command=run).pack()
+    Button(root, text='Dialog', command=run).pack()
     root.mainloop()
diff --git a/Lib/idlelib/textView.py b/Lib/idlelib/textView.py
index 23e8bed..be3ade0 100644
--- a/Lib/idlelib/textView.py
+++ b/Lib/idlelib/textView.py
@@ -1,12 +1,7 @@
-##---------------------------------------------------------------------------##
-##
-## idle - simple text view dialog
-## elguavas
-##
-##---------------------------------------------------------------------------##
+"""Simple text browser for IDLE
+
 """
-simple text browser for idle
-"""
+
 from Tkinter import *
 import tkMessageBox
 
@@ -14,17 +9,19 @@
     """
     simple text viewer dialog for idle
     """
-    def __init__(self,parent,title,fileName):
-        """
-        fileName - string,should be an absoulute filename
+    def __init__(self, parent, title, fileName, data=None):
+        """If data exists, load it into viewer, otherwise try to load file.
+
+        fileName - string, should be an absoulute filename
         """
         Toplevel.__init__(self, parent)
         self.configure(borderwidth=5)
-        self.geometry("+%d+%d" % (parent.winfo_rootx()+10,
-                parent.winfo_rooty()+10))
+        self.geometry("=%dx%d+%d+%d" % (625, 500,
+                                        parent.winfo_rootx() + 10,
+                                        parent.winfo_rooty() + 10))
         #elguavas - config placeholders til config stuff completed
-        self.bg=None
-        self.fg=None
+        self.bg = '#ffffff'
+        self.fg = '#000000'
 
         self.CreateWidgets()
         self.title(title)
@@ -36,7 +33,10 @@
         #key bindings for this dialog
         self.bind('<Return>',self.Ok) #dismiss dialog
         self.bind('<Escape>',self.Ok) #dismiss dialog
-        self.LoadTextFile(fileName)
+        if data:
+            self.textView.insert(0.0, data)
+        else:
+            self.LoadTextFile(fileName)
         self.textView.config(state=DISABLED)
         self.wait_window()
 
@@ -51,16 +51,17 @@
             self.textView.insert(0.0,textFile.read())
 
     def CreateWidgets(self):
-        frameText = Frame(self)
+        frameText = Frame(self, relief=SUNKEN, height=700)
         frameButtons = Frame(self)
-        self.buttonOk = Button(frameButtons,text='Ok',
-                command=self.Ok,takefocus=FALSE,default=ACTIVE)
-        self.scrollbarView = Scrollbar(frameText,orient=VERTICAL,
-                takefocus=FALSE,highlightthickness=0)
-        self.textView = Text(frameText,wrap=WORD,highlightthickness=0)
+        self.buttonOk = Button(frameButtons, text='Close',
+                               command=self.Ok, takefocus=FALSE)
+        self.scrollbarView = Scrollbar(frameText, orient=VERTICAL,
+                                       takefocus=FALSE, highlightthickness=0)
+        self.textView = Text(frameText, wrap=WORD, highlightthickness=0,
+                             fg=self.fg, bg=self.bg)
         self.scrollbarView.config(command=self.textView.yview)
         self.textView.config(yscrollcommand=self.scrollbarView.set)
-        self.buttonOk.pack(padx=5,pady=5)
+        self.buttonOk.pack()
         self.scrollbarView.pack(side=RIGHT,fill=Y)
         self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH)
         frameButtons.pack(side=BOTTOM,fill=X)
