diff --git a/Lib/idlelib/aboutDialog.py b/Lib/idlelib/aboutDialog.py
index 3a76b0b..b6720ca 100644
--- a/Lib/idlelib/aboutDialog.py
+++ b/Lib/idlelib/aboutDialog.py
@@ -23,9 +23,15 @@
         #elguavas - config placeholders til config stuff completed
         self.bg="#555555"
         self.fg="#ffffff"
-        #no ugly bold default text font on *nix
-        self.textFont=tuple(Label().cget('font').split())[0:2]+('normal',) 
-
+        #no ugly bold default font on *nix 
+        font=Label().cget('font')
+        if os.name=='posix':
+            lFont=font.split()
+            if len(lFont) == 2: lFont=lFont+['normal']
+            else: lFont[2]='normal'
+            font=tuple(lFont)
+        self.textFont=font
+        
         self.CreateWidgets()
         self.resizable(height=FALSE,width=FALSE)
         self.title(title)
@@ -62,29 +68,32 @@
         labelVersion = Label(frameBg,text='version  '+idlever.IDLE_VERSION,
                 fg=self.fg,bg=self.bg,font=self.textFont)
         labelVersion.grid(row=1,column=0,sticky=W,padx=10,pady=5)
-        labelCopyright = Label(frameBg,
+        labelDesc = Label(frameBg,
                 text="A development version of Python's lightweight\n"+
                 'Integrated DeveLopment Environment, IDLE.',
                 justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
-        labelCopyright.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5)
-        labelLicense = Label(frameBg,
-                text='Licenced under the Python 2.1.1 PSF Licence\n'+
-                '(a GPL compatible licence with extra freedoms)',
+        labelDesc.grid(row=2,column=0,sticky=W,columnspan=3,padx=10,pady=5)
+        labelCopyright = Label(frameBg,
+                text="Copyright (c) 2001 Python Software Foundation;\nAll Rights Reserved",
                 justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
-        labelLicense.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5)
-        framePad = Frame(frameBg,height=5,bg=self.bg).grid(row=4,column=0)
+        labelCopyright.grid(row=3,column=0,sticky=W,columnspan=3,padx=10,pady=5)
+        labelLicense = Label(frameBg,
+                text='Released under the Python 2.1.1 PSF Licence',
+                justify=LEFT,fg=self.fg,bg=self.bg,font=self.textFont)
+        labelLicense.grid(row=4,column=0,sticky=W,columnspan=3,padx=10,pady=5)
+        framePad = 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,font=self.textFont)
-        labelEmail.grid(row=5,column=0,columnspan=2,sticky=W,padx=10,pady=0)
+        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,font=self.textFont)
-        labelWWW.grid(row=6,column=0,columnspan=2,sticky=W,padx=10,pady=0)
+        labelWWW.grid(row=7,column=0,columnspan=2,sticky=W,padx=10,pady=0)
         frameDivider = Frame(frameBg,borderwidth=1,relief=SUNKEN,
-                height=2,bg=self.bg).grid(row=7,column=0,sticky=(E,W),columnspan=3,
+                height=2,bg=self.bg).grid(row=8,column=0,sticky=(E,W),columnspan=3,
                 padx=5,pady=5)
         labelPythonVer = Label(frameBg,text='Python version:  '+
                 sys.version.split()[0],fg=self.fg,bg=self.bg,font=self.textFont)
-        labelPythonVer.grid(row=8,column=0,sticky=W,padx=10,pady=0)
+        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:]
@@ -93,7 +102,7 @@
         tkVer = string.join(tkVer,'.')
         labelTkVer = Label(frameBg,text='Tk version:  '+tkVer,fg=self.fg,bg=self.bg,
                 font=self.textFont)
-        labelTkVer.grid(row=8,column=1,sticky=W,padx=2,pady=0)
+        labelTkVer.grid(row=9,column=1,sticky=W,padx=2,pady=0)
         #labelOs = Label(frameBg,text='python os name: '+pyching.os,
         #       font=self.fontText,fg=self.fg,bg=self.bg)
         #labelOs.grid(row=6,column=0,sticky=W,padx=10,pady=0)
@@ -102,12 +111,12 @@
         #labelOsType.grid(row=6,column=1,sticky=W,padx=5,pady=0)
         #framePad = Frame(frameBg,bg=self.bg,height=5).grid(row=7,column=0)
 
-        self.buttonLicense = Button(frameBg,text='View Readme',underline=5,
+        self.buttonLicense = Button(frameBg,text='View License',underline=5,
                 width=14,highlightbackground=self.bg,command=self.ShowLicense)#takefocus=FALSE
-        self.buttonLicense.grid(row=9,column=0,sticky=W,padx=10,pady=10)
+        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=9,column=1,columnspan=2,sticky=E,padx=10,pady=10)
+        self.buttonCredits.grid(row=10,column=1,columnspan=2,sticky=E,padx=10,pady=10)
 
     def CreditsButtonBinding(self,event):
         self.buttonCredits.invoke()
@@ -116,7 +125,7 @@
         self.buttonLicense.invoke()
 
     def ShowLicense(self):
-        self.ViewFile('About - Readme','README.txt')
+        self.ViewFile('About - License','LICENSE.txt')
         
     def ShowCredits(self):
         self.ViewFile('About - Credits','CREDITS.txt')
