diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index 28dc256..27bae5f 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -11,6 +11,7 @@
 import traceback
 import types
 import warnings
+import exceptions
 
 import linecache
 from code import InteractiveInterpreter
@@ -340,6 +341,7 @@
         if clt is None:
             return
         response = clt.pollresponse(self.active_seq)
+        # Reschedule myself in 50 ms
         self.tkconsole.text.after(50, self.poll_subprocess)
         if response:
             self.tkconsole.resetoutput()
@@ -362,14 +364,24 @@
                         line = linecache.getline(fn, ln)
                         tb[i] = fn, ln, nm, line
                 traceback.print_list(tb, file=file)
-                if mod and mod != "exceptions":
-                    name = mod + "." + name
-                print >>file, name + ":", " ".join(map(str, args))
+                # try to reinstantiate the exception, stuff in the args:
+                try:
+                    etype = eval(mod + '.' + name)
+                    val = etype()
+                    val.args = args
+                except TypeError:  # string exception!
+                    etype = name
+                    val = args
+                lines = traceback.format_exception_only(etype, val)
+                for line in lines[:-1]:
+                    traceback._print(file, line, '')
+                traceback._print(file, lines[-1], '')
                 if self.tkconsole.getvar("<<toggle-jit-stack-viewer>>"):
                     self.remote_stack_viewer()
             elif how == "ERROR":
-                print >>sys.__stderr__, "Oops:", how, what
-                print >>file, "Oops:", how, what
+                errmsg = "PyShell.ModifiedInterpreter: Subprocess ERROR:\n"
+                print >>sys.__stderr__, errmsg, what
+                print >>file, errmsg, what
             self.tkconsole.endexecuting()
 
     def kill_subprocess(self):
@@ -416,6 +428,8 @@
             code = compile(source, filename, "exec")
         except (OverflowError, SyntaxError):
             self.tkconsole.resetoutput()
+            console = self.tkconsole.console
+            print >>console, 'Traceback (most recent call last):'
             InteractiveInterpreter.showsyntaxerror(self, filename)
             self.tkconsole.showprompt()
         else:
diff --git a/Lib/idlelib/rpc.py b/Lib/idlelib/rpc.py
index 4bbf0bb..3f1a746 100644
--- a/Lib/idlelib/rpc.py
+++ b/Lib/idlelib/rpc.py
@@ -90,8 +90,6 @@
 
 class SocketIO:
 
-    debugging = False
-
     def __init__(self, sock, objtable=None, debugging=None):
         self.mainthread = threading.currentThread()
         if debugging is not None:
@@ -113,11 +111,10 @@
     def debug(self, *args):
         if not self.debugging:
             return
-        s = str(threading.currentThread().getName())
+        s = self.location + " " + str(threading.currentThread().getName())
         for a in args:
             s = s + " " + str(a)
-        s = s + "\n"
-        sys.__stderr__.write(s)
+        print>>sys.__stderr__, s
 
     def register(self, oid, object):
         self.objtable[oid] = object
@@ -159,7 +156,7 @@
             typ, val, tb = info = sys.exc_info()
             sys.last_type, sys.last_value, sys.last_traceback = info
             if isinstance(typ, type(Exception)):
-                # Class exceptions
+                # Class exception
                 mod = typ.__module__
                 name = typ.__name__
                 if issubclass(typ, Exception):
@@ -167,29 +164,29 @@
                 else:
                     args = (str(val),)
             else:
-                # String exceptions
+                # User string exception
                 mod = None
                 name = typ
-                args = (str(val),)
+                if val is None: val = ''
+                args = str(val)
             tb = traceback.extract_tb(tb)
+            self.debug("localcall:EXCEPTION: ", mod, name, args, tb)
             return ("EXCEPTION", (mod, name, args, tb))
 
     def remotecall(self, oid, methodname, args, kwargs):
-        self.debug("remotecall:", oid, methodname, args, kwargs) 
+        self.debug("remotecall:") 
         seq = self.asynccall(oid, methodname, args, kwargs)
-        ret = self.asyncreturn(seq)
-        self.debug("return:", ret)
-        return ret
+        return self.asyncreturn(seq)
 
     def asynccall(self, oid, methodname, args, kwargs):
-        self.debug("asyncall:", oid, methodname, args, kwargs)
         request = ("call", (oid, methodname, args, kwargs))
         seq = self.putrequest(request)
+        self.debug(("asyncall:%d:" % seq), oid, methodname, args, kwargs)
         return seq
 
     def asyncreturn(self, seq):
         response = self.getresponse(seq)
-        self.debug("asyncreturn:", response)
+        self.debug(("asyncreturn:%d:" % seq), response)
         return self.decoderesponse(response)
 
     def decoderesponse(self, response):
@@ -197,6 +194,7 @@
         if how == "OK":
             return what
         if how == "EXCEPTION":
+            self.debug("decoderesponse: Internal EXCEPTION:", what)
             mod, name, args, tb = what
             self.traceback = tb
             if mod: # not string exception
@@ -217,6 +215,7 @@
             # do the best we can:
             raise name, args
         if how == "ERROR":
+            self.debug("decoderesponse: Internal ERROR:", what)            
             raise RuntimeError, what
         raise SystemError, (how, what)
 
@@ -274,6 +273,7 @@
         return seq
 
     def putmessage(self, message):
+        ##self.debug("putmessage: ", message)
         try:
             s = pickle.dumps(message)
         except:
@@ -345,6 +345,7 @@
             wait = 0.0
             seq, resq = message
             if resq[0] == "call":
+                self.debug("call_localcall:%d:" % seq)
                 response = self.localcall(resq)
                 self.putmessage((seq, response))
                 continue
@@ -377,7 +378,8 @@
 
 class RPCHandler(SocketServer.BaseRequestHandler, SocketIO):
 
-    debugging = 0
+    debugging = False
+    location = "#S"  # Server
 
     def __init__(self, sock, addr, svr):
         svr.current_handler = self ## cgt xxx
@@ -393,6 +395,9 @@
 
 class RPCClient(SocketIO):
 
+    debugging = False
+    location = "#C"  # Client
+
     nextseq = 1 # Requests coming from the client are odd numbered
 
     def __init__(self, address, family=socket.AF_INET, type=socket.SOCK_STREAM):
