*Fix
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_debugger.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_debugger.rb
index a6202b2..123cb54 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_debugger.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_debugger.rb
@@ -21,9 +21,9 @@
             @source_manager = SourceManager.new                            
         end
 
-        def terminate         
-			capture_manager.terminate
-            thread_manager.terminate                      
+        def terminate
+			capture_manager.terminate                
+            thread_manager.terminate
         end                              
         
         def create_thread_wrapper(thread)
@@ -47,16 +47,12 @@
             false     
         end
         
-        def handle_main_thread_exception(exception)   
-            backtrace = exception.backtrace.delete_if { |s| s.index(get_debugger_id) != nil }
-	        trace = backtrace.shift + ': ' + exception.message + "\n"
-	        other_traces = backtrace.join("\n\t")
-	        unless other_traces.empty?
-	            trace += "\t" + other_traces
-	        end
-	        capture_manager.stderr_capturer.write(trace)
-        end        
-        
+        def handle_exception(ex)
+            message = ex.backtrace.delete_if { |s| s.index(get_debugger_id) != nil }
+            message[0] += ': ' + ex.message + ' (' + ex.class.name + ')'
+            $stderr.write( message.join("\n")+"\n" )
+        end
+                    
         # methods to override
         def get_debugger_id
             raise NotImplementedError.new('You MUST implement this method in ancessors')
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_runner.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_runner.rb
index e615407..4edf73c 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_runner.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/abstract_runner.rb
@@ -27,20 +27,32 @@
                 log('Creating debugger...')
                 debugger = create_debugger
               
+                at_exit {
+                    log('---->>>>>    AT EXIT:')
+                    # redirect exception to stderr if available
+                    unless $!.nil?
+                        log('Exitting with exception:')
+                        log("\tMessage: " + $!.message)
+                        log("\tBacktrace: " + $!.backtrace.join("\n"))
+                        debugger.handle_exception($!)
+                    end      
+                    begin    
+                        debugger.terminate unless debugger.nil?
+                        log('Debugger terminated')                    
+                        shutdownLogger()                                   
+                    rescue Exception
+                        log('Exception in at_exit:')
+                        log("\tMessage: " + $!.message)
+                        log("\tBacktrace: " + $!.backtrace.join("\n"))
+                    end            
+                }
+                
                 log('Starting debugger...')
-                debugger.debug(Params.instance.script)
-                log('Debug finished')
+                debugger.start
 	        rescue Exception
 		        log('Exception during debugging:')
 		        log("\tMessage: " + $!.message)
 		        log("\tBacktrace: " + $!.backtrace.join("\n"))
-                debugger.handle_main_thread_exception($!)
-            ensure
-                unless debugger.nil?
-                    log('Terminating debugger...')
-                    debugger.terminate unless debugger.nil?
-                end
-                shutdownLogger()               
             end            
         end
         
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/logger.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/logger.rb
index ccdb7bf..d2c77c6 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/logger.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/logger.rb
@@ -17,6 +17,9 @@
        def puts(s)
            @logger.log(s)
        end
+       def close
+           @logger.close
+       end
     end
     
     module Logger
@@ -36,6 +39,12 @@
 	        end
         end
         
+        def close
+	        @@monitor.synchronize do 
+	            @@logger.close
+	        end
+        end            
+        
         def logger
             LoggerAdaptor.new(self)
         end
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/capture.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/capture.rb
index 08e5a2c..e4d52bd 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/capture.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/capture.rb
@@ -67,10 +67,11 @@
             $stdout = @stdout_capturer
             $stderr = @stderr_capturer
             
-            @terminatig = false
+            @terminating = false
             @flusher = debugger.create_debug_thread do
                 begin
-	                while (@terminatig == false)
+                    log('Capture flusher started')
+                    while (@terminating == false)
 	                    sleep 1
 	                    @stdout_capturer.redirected.each_pair do |thread, message|
 	                        send(thread, 'stdout', message) 
@@ -79,6 +80,7 @@
 	                        send(thread, 'stderr', message) 
 	                    end                                        
 	                end
+                    log('Capture flusher terminated')
                 rescue Exception
 			        log('Exception in capture flusher:')
 			        log("\tMessage: " + $!.message)
@@ -102,7 +104,8 @@
         def terminate()
             $stdout = STDOUT
             $stderr = STDERR
-            @terminatig = true
+            @terminating = true
+            @flusher.wakeup()
             @flusher.join
         end
         
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/io_socket.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/io_socket.rb
index 4ab440c..d5aae61 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/io_socket.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/io_socket.rb
@@ -43,7 +43,7 @@
         end
 
         def receive()
-            line = ''
+            line = ''       
             begin
    	            #IDE: command [SPACE] [args] -- data [NULL]
 	            while((ch = @socket.getc) != 0)
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/stack.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/stack.rb
index c6a2349..e382989 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/stack.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/managers/stack.rb
@@ -12,7 +12,7 @@
     # StackManager interface
     class AbstractStackManager
 	    # Evaluation
-	    def eval(text, index = 0)
+	    def eval(text, index)
 	        raise NotImplementedError.new('You MUST implement this method in ancessors')
 	    end
 	
diff --git a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/thread_manager.rb b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/thread_manager.rb
index c608fb7..fffbcb3 100644
--- a/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/thread_manager.rb
+++ b/plugins/org.eclipse.dltk.ruby.abstractdebugger/debugger/dbgp/thread_manager.rb
@@ -27,13 +27,14 @@
 	                log('Thread manager cleanup started')
 	                while (@terminated != true)
 	                    cleanup           
-	                    sleep 1
+	                    sleep 1                     
 	                end
                 rescue Exception
                     log('Exception in thread manager cleanup:')
                     log("\tMessage: " + $!.message)
                     log("\tBacktrace: " + $!.backtrace.join("\n"))                
-                ensure log('Thread manager cleanup terminated')
+                ensure 
+                    log('Thread manager cleanup terminated')
                 end
             end                   
         end
@@ -55,8 +56,6 @@
                 log('Exception')
 		        log("\tMessage: " + $!.message)
 		        log("\tBacktrace: " + $!.backtrace.join("\n"))                
-            ensure
-                log('Done')
             end
         end