diff -r d70bb583451d -r c21ffeaaba4a .classpath
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.classpath	Sun May 16 22:13:08 2010 +0200
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry exported="true" kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry exported="true" kind="lib" path="lib/j.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/bsh-2.0b4.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff -r d70bb583451d -r c21ffeaaba4a .project
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.project	Sun May 16 22:13:08 2010 +0200
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.sciencecommons.protege.lisp</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff -r d70bb583451d -r c21ffeaaba4a .settings/org.eclipse.jdt.core.prefs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/org.eclipse.jdt.core.prefs	Sun May 16 22:13:08 2010 +0200
@@ -0,0 +1,3 @@
+#Thu Apr 22 07:05:40 CEST 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
diff -r d70bb583451d -r c21ffeaaba4a META-INF/MANIFEST.MF
--- a/META-INF/MANIFEST.MF	Tue Apr 20 18:17:39 2010 +0200
+++ b/META-INF/MANIFEST.MF	Sun May 16 22:13:08 2010 +0200
@@ -1,50 +1,19 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
-Bundle-Name: Protege Lisp  Based Plugin
+Bundle-Name: Protege Lisp Based Plugin
 Bundle-SymbolicName: org.sciencecommons.protege.lisp;singleton:=true
 Bundle-Version: 1.0.0.qualifier
 Bundle-Vendor: Alan Ruttenberg
 Bundle-Activator: org.sciencecommons.protege.lisp.Activator
-Export-Package: org.armedbear.lisp,
- org.armedbear.lisp.java,
- org.armedbear.lisp.java.awt,
- org.armedbear.lisp.java.swing,
- org.armedbear.lisp.util
-Import-Package: org.osgi.framework,
- org.apache.log4j,
- javax.swing,
- javax.swing.border,
- javax.swing.colorchooser,
+Export-Package: org.armedbear.lisp
+Import-Package: javax.swing,
  javax.swing.event,
- javax.swing.filechooser,
- javax.swing.plaf,
- javax.swing.plaf.basic,
- javax.swing.plaf.metal,
- javax.swing.plaf.multi,
- javax.swing.plaf.synth,
- javax.swing.table,
  javax.swing.text,
- javax.swing.text.html,
- javax.swing.text.html.parser,
- javax.swing.text.rtf,
- javax.swing.tree,
- javax.swing.undo,
- org.w3c.dom,
- org.w3c.dom.bootstrap,
- org.w3c.dom.events,
- org.w3c.dom.ls,
+ org.armedbear.lisp,
+ org.osgi.framework,
  org.xml.sax,
- org.xml.sax.ext,
- org.xml.sax.helpers,
- org.armedbear.lisp,
- org.armedbear.lisp.java,
- org.armedbear.lisp.java.awt,
- org.armedbear.lisp.java.swing,
- org.armedbear.lisp.util
-Bundle-ClassPath: .,lib/j.jar,lib/abcl.jar,lib/bsh-2.0b4.jar
-Require-Bundle: org.eclipse.equinox.common,
- org.eclipse.equinox.registry,
- org.protege.common;bundle-version="4.1.0",
- org.semanticweb.owl.owlapi;bundle-version="3.0.0",
- org.protege.editor.core.application;bundle-version="4.1.0",
- org.protege.editor.owl;bundle-version="4.1.0"
+ org.xml.sax.helpers
+Bundle-ClassPath: .,lib/j.jar,lib/bsh-2.0b4.jar
+Require-Bundle: org.protege.editor.core.application;bundle-version="4.1.0",
+ org.protege.editor.owl;bundle-version="4.1.0",
+ org.armedbear.lisp;bundle-version="1.0.0"
diff -r d70bb583451d -r c21ffeaaba4a build.properties
--- a/build.properties	Tue Apr 20 18:17:39 2010 +0200
+++ b/build.properties	Sun May 16 22:13:08 2010 +0200
@@ -3,6 +3,5 @@
 bin.includes = META-INF/,\
                .,\
 	       lib/j.jar,\
-               lib/abcl.jar,\
 	       lib/bsh-2.0b4.jar
 
diff -r d70bb583451d -r c21ffeaaba4a build.xml
--- a/build.xml	Tue Apr 20 18:17:39 2010 +0200
+++ b/build.xml	Sun May 16 22:13:08 2010 +0200
@@ -50,6 +50,8 @@
    <property name="owl.editor.jar"
 	     location="${protege.plugins}/org.protege.editor.owl.jar"/>
 
+   <property name="abcl.jar"
+             location="${protege.plugins}/abcl.jar"/>
 
    <target name = "init">
      <tstamp>
@@ -97,6 +99,7 @@
        <pathelement location="${equinox.registry}"/>
        <pathelement location="${owl.editor.jar}"/>
        <pathelement location="${owl.lib}"/>
+       <pathelement location="${abcl.jar}"/>
        <fileset dir="${lib}"/>
        <fileset dir="${genlib}"/>
      </path>
diff -r d70bb583451d -r c21ffeaaba4a src/org/sciencecommons/protege/lisp/Activator.java
--- a/src/org/sciencecommons/protege/lisp/Activator.java	Tue Apr 20 18:17:39 2010 +0200
+++ b/src/org/sciencecommons/protege/lisp/Activator.java	Sun May 16 22:13:08 2010 +0200
@@ -10,11 +10,9 @@
      * to do any one-time startup of the environment.
      */
     public void start(BundleContext context) throws Exception {
-	//      LispContext.getInstance();
     }
 
     public void stop(BundleContext context) throws Exception {
-        // LispContext.getInstance().dispose();
     }
 
 }
diff -r d70bb583451d -r c21ffeaaba4a src/org/sciencecommons/protege/lisp/LispContext.java
--- a/src/org/sciencecommons/protege/lisp/LispContext.java	Tue Apr 20 18:17:39 2010 +0200
+++ b/src/org/sciencecommons/protege/lisp/LispContext.java	Sun May 16 22:13:08 2010 +0200
@@ -1,80 +1,54 @@
 package org.sciencecommons.protege.lisp;
 
-import org.armedbear.lisp.Interpreter;
-import org.armedbear.lisp.Lisp;
-import org.armedbear.lisp.Symbol;
-import org.armedbear.lisp.LispObject;
-import bsh.util.JConsole;
-import java.io.InputStreamReader;
 import snow.swing.ConsoleDocument;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
 import javax.swing.text.JTextComponent;
 
+import org.armedbear.lisp.Interpreter;
+
 
 /*
  * The singleton approach is used here because we are relying on
  * the bundle being a singleton bundle.
  */
 public class LispContext {
-    private static LispContext instance;
-    public Interpreter interpreter;
-    //    public JConsole console;
-    public JScrollPane console;
-    public Thread lispThread;
+  private static LispContext instance;
+  public Interpreter interpreter;
+  public JScrollPane console;
+  public Thread lispThread;
 
-    private LispContext() {
-	//	console = new JConsole();
-	console = new JScrollPane();
-	Runnable r = new Runnable()
-	    {
-// 		public void run()
-// 		{
-// 		    System.setIn(console.getInputStream());
-// 		    System.setOut(console.getOut());
-// 		    System.setErr(console.getErr());
-// 		    String[] args = {"--noinit"};
-// 				    //		    String[] args = {};
-// 		    interpreter = Interpreter.createDefaultInstance(args);
-// 		    Symbol.LOAD_VERBOSE.setSymbolValue(LispObject.getInstance(true));
-// 		    if (interpreter == null)
-// 			{ console.print("null interpreter!"); }
-// 		    interpreter.eval("(print \"Starting up protege lisp interpreter\")");
-// 		    //		    Lisp.resetIO(console.getInputStream(),console.getOut());
-// 		    //		    interpreter.eval("(load \"/Users/alanr/repos/slimenew/slime/swank-loader.lisp\")");
-// 		    interpreter.eval("(progn (loop do (print (read-char))))");
-// 		    interpreter.run();
-// 		};
+  private LispContext() {
+    console = new JScrollPane();
+    Runnable r = new Runnable() {
+        public void run() {
+          try {		
+            String[] args = {"--noinit"};
+            interpreter = Interpreter.createInstance();
+          } catch (Throwable e) {
+            e.printStackTrace();
+            System.exit(1);
+          }
+          final ConsoleDocument d = new ConsoleDocument(interpreter.eval("#'top-level::top-level-loop"));
+          final JTextComponent txt = new JTextArea(d);
+          d.setupTextComponent(txt);
+          console.setViewportView(txt);
+          // interpreter.run();
+        }
+      };
+    Thread t = new Thread(null, r, "interpreter", 4194304L);
+    t.start();	
+  }
 
-		public void run()
-		{
-		    try {		
-			String[] args = {"--noinit"};
-			interpreter = Interpreter.createInstance();
-		    } catch (Throwable e) {
-			e.printStackTrace();
-			System.exit(1);
-		    }
-		    final ConsoleDocument d = new ConsoleDocument(interpreter.eval("#'top-level::top-level-loop"));
-		    final JTextComponent txt = new JTextArea(d);
-		    d.setupTextComponent(txt);
-		    console.setViewportView(txt);
-		    // interpreter.run();
-		}
-		
-	    };
-		new Thread(null, r, "interpreter", 4194304L).start();
+  public static LispContext getInstance() {
+    if (instance == null) {
+      instance = new LispContext();
     }
-    
-    public static LispContext getInstance() {
-	if (instance == null) {
-	    instance = new LispContext();
-	}
-        return instance;
-    }
-    
-    public void dispose() {
-	interpreter.dispose();
-        instance = null;
-    }
+    return instance;
+  }
+
+  public void dispose() {
+    interpreter.dispose();
+    instance = null;
+  }
 }
diff -r d70bb583451d -r c21ffeaaba4a src/org/sciencecommons/protege/lisp/LispShellView.java
--- a/src/org/sciencecommons/protege/lisp/LispShellView.java	Tue Apr 20 18:17:39 2010 +0200
+++ b/src/org/sciencecommons/protege/lisp/LispShellView.java	Sun May 16 22:13:08 2010 +0200
@@ -1,43 +1,19 @@
 package org.sciencecommons.protege.lisp;
 
+import java.awt.BorderLayout;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.HashSet;
+
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
 import org.armedbear.lisp.Interpreter;
-import org.armedbear.j.Editor;
-import bsh.util.JConsole;
-import java.io.InputStream;
-import java.io.OutputStream;
-import javax.swing.JScrollPane;
-
 import org.protege.editor.core.ui.util.UIUtil;
 import org.protege.editor.core.ui.view.DisposableAction;
 import org.protege.editor.owl.ui.view.AbstractOWLViewComponent;
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.io.IOException;
-import java.util.HashSet;/*
-
-* Copyright (C) 2007, University of Manchester
-*
-* Modifications to the initial code base are copyright of their
-* respective authors, or their employers as appropriate.  Authorship
-* of the modifications may be determined from the ChangeLog placed at
-* the end of this file.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-*/
 
 /**
  * Author: drummond<br>
@@ -51,93 +27,81 @@
  * 2010-04-01
 
  */
-public class LispShellView extends AbstractOWLViewComponent {
+public class LispShellView 
+  extends AbstractOWLViewComponent 
+{
+  private Interpreter interpreter;
+  private JScrollPane console;
+  private File lastRunScript = null;
 
-    private Interpreter interpreter;
-    //    private JConsole console;
-    private JScrollPane console;
-    private File lastRunScript = null;
+  private DisposableAction runScriptAction = new DisposableAction("Load file", null){
 
-    private DisposableAction runScriptAction = new DisposableAction("Load file", null){
+      public void actionPerformed(ActionEvent event) {
+        handleRunScript();
+      }
 
-        public void actionPerformed(ActionEvent event) {
-            handleRunScript();
-        }
-
-        public void dispose() {
-        }
+      public void dispose() {
+      }
     };
 
-    private DisposableAction reRunScriptAction = new DisposableAction("Reload file", null){
+  private DisposableAction reRunScriptAction = new DisposableAction("Reload file", null){
 
-        public void actionPerformed(ActionEvent event) {
-            handleReRunScript();
-        }
+      public void actionPerformed(ActionEvent event) {
+        handleReRunScript();
+      }
 
-        public void dispose() {
-        }
+      public void dispose() {
+      }
     };
 
 
-    private void handleRunScript() {
-        Window f = (Window) SwingUtilities.getAncestorOfClass(Window.class, this);
-        File file = UIUtil.openFile(f, "Select a file to load", new HashSet<String>());
-        if (file != null){
-            lastRunScript = file;
-	    reRunScriptAction.setEnabled(true);
-	    runScript(file);
-        }
+  private void handleRunScript() {
+    Window f = (Window) SwingUtilities.getAncestorOfClass(Window.class, this);
+    File file = UIUtil.openFile(f, "Select a file to load", new HashSet<String>());
+    if (file != null){
+      lastRunScript = file;
+      reRunScriptAction.setEnabled(true);
+      runScript(file);
     }
+  }
 
 
-    private void handleReRunScript() {
-        if (lastRunScript != null){
-	    runScript(lastRunScript);
-        }
+  private void handleReRunScript() {
+    if (lastRunScript != null){
+      runScript(lastRunScript);
     }
+  }
 
-    private void runScript(File script){
-	        if (script != null){
-		    //            try {
-		    LispContext.getInstance().interpreter.eval("(load \""+script.toString()+"\")");
-		    LispContext.getInstance().interpreter.eval("(force-output t)");
-		}
-		//                if (result != null){
-		//  console.println(result);
-                //}
-	//            }
-	    //            catch (IOException e) {
-	    //                throw new RuntimeException(e);
-	    //            }
-	    //            catch (EvalError evalError) {
-	    // console.print(evalError, Color.RED);
-	    //            }
-	//        }
+  private void runScript(File script){
+    if (script != null){
+      LispContext.getInstance().interpreter.eval("(load \""+script.toString()+"\")");
+      LispContext.getInstance().interpreter.eval("(force-output t)");
     }
+  }
 
 
-    protected void initialiseOWLView() throws Exception {
-        installUIClasses();
-        org.armedbear.j.Editor.main(new String[0]);
-        setLayout(new BorderLayout());
+  protected void initialiseOWLView() throws Exception {
+    installUIClasses();
+    setLayout(new BorderLayout());
 
-        console = LispContext.getInstance().console;
-        add(console, BorderLayout.CENTER);
-        addAction(runScriptAction, "A", "A");
-        addAction(reRunScriptAction, "A", "B");
+    console = LispContext.getInstance().console;
+    add(console, BorderLayout.CENTER);
+    addAction(runScriptAction, "A", "A");
+    addAction(reRunScriptAction, "A", "B");
 
-        reRunScriptAction.setEnabled(false);
-    }
+    reRunScriptAction.setEnabled(false);
+
+  }
     
-    private void installUIClasses() {
-        UIManager.getDefaults().put(org.armedbear.j.ButtonUI.class.getCanonicalName(), org.armedbear.j.ButtonUI.class);
-        UIManager.getDefaults().put(org.armedbear.j.LabelUI.class.getCanonicalName(), org.armedbear.j.LabelUI.class);
-        UIManager.getDefaults().put(org.armedbear.j.ScrollBarUI.class.getCanonicalName(), org.armedbear.j.ScrollBarUI.class);
-        UIManager.getDefaults().put(org.armedbear.j.ToolBarUI.class.getCanonicalName(), org.armedbear.j.ToolBarUI.class);
-        UIManager.getDefaults().put(org.armedbear.j.ToolTipUI.class.getCanonicalName(), org.armedbear.j.ToolTipUI.class);
-    }
+  private void installUIClasses() {
+    UIManager.getDefaults().put(org.armedbear.j.ButtonUI.class.getCanonicalName(), org.armedbear.j.ButtonUI.class);
+    UIManager.getDefaults().put(org.armedbear.j.LabelUI.class.getCanonicalName(), org.armedbear.j.LabelUI.class);
+    UIManager.getDefaults().put(org.armedbear.j.ScrollBarUI.class.getCanonicalName(), org.armedbear.j.ScrollBarUI.class);
+    UIManager.getDefaults().put(org.armedbear.j.ToolBarUI.class.getCanonicalName(), org.armedbear.j.ToolBarUI.class);
+    UIManager.getDefaults().put(org.armedbear.j.ToolTipUI.class.getCanonicalName(), org.armedbear.j.ToolTipUI.class);
+  }
 
-    protected void disposeOWLView() {
-        // do nothing
-    }
+  protected void disposeOWLView() {
+    // do nothing
+  }
 }
diff -r d70bb583451d -r c21ffeaaba4a src/snow/swing/ConsoleDocument.java
--- a/src/snow/swing/ConsoleDocument.java	Tue Apr 20 18:17:39 2010 +0200
+++ b/src/snow/swing/ConsoleDocument.java	Sun May 16 22:13:08 2010 +0200
@@ -59,253 +59,253 @@
 
 public class ConsoleDocument extends DefaultStyledDocument {
 
-    private StringBuffer inputBuffer = new StringBuffer();
+  private StringBuffer inputBuffer = new StringBuffer();
 	
-    private Reader reader = new Reader() {
+  private Reader reader = new Reader() {
 
-	    @Override
-	    public void close() throws RuntimeException {}
+      @Override
+      public void close() throws RuntimeException {}
 
-	    @Override
-	    public synchronized int read(char[] cbuf, int off, int len) throws RuntimeException {
-		try {
-		    int length = Math.min(inputBuffer.length(), len);
-		    while(length <= 0) {
-			wait();
-			length = Math.min(inputBuffer.length(), len);
-		    }
-		    inputBuffer.getChars(0, length, cbuf, off);
-		    inputBuffer.delete(0, length);
-		    return length;
-		} catch (InterruptedException e) {
-		    throw new RuntimeException(e);
-		}
-	    }
-	};
+      @Override
+      public synchronized int read(char[] cbuf, int off, int len) throws RuntimeException {
+        try {
+          int length = Math.min(inputBuffer.length(), len);
+          while(length <= 0) {
+            wait();
+            length = Math.min(inputBuffer.length(), len);
+          }
+          inputBuffer.getChars(0, length, cbuf, off);
+          inputBuffer.delete(0, length);
+          return length;
+        } catch (InterruptedException e) {
+          throw new RuntimeException(e);
+        }
+      }
+    };
 	
-    private Writer writer = new Writer() {
+  private Writer writer = new Writer() {
 	    
-	    @Override
-	    public void close() throws RuntimeException {}
+      @Override
+      public void close() throws RuntimeException {}
 
-	    @Override
-	    public void flush() throws RuntimeException {}
+      @Override
+      public void flush() throws RuntimeException {}
 
-	    @Override
-	    public void write(final char[] cbuf, final int off, final int len) throws RuntimeException {
-		try {
-		    final int insertOffs;
-		    synchronized(reader) {
-			if(inputBuffer.toString().matches("^\\s*$")) {
-			    int length = inputBuffer.length();
-			    inputBuffer.delete(0, length);
-			}
-			insertOffs = getLength() - inputBuffer.length();
-			reader.notifyAll();
-		    }
-		    Runnable r = new Runnable() {
-			    public void run() {
-				synchronized(reader) {
-				    try {
-					superInsertString(insertOffs,
-							  new String(cbuf, off, len),
-							  null);
-				    } catch(Exception e) {
-					assert(false); //BadLocationException should not happen here
-				    }
-				}
-			    }
-			};
-		    SwingUtilities.invokeAndWait(r);
-		}  catch (Exception e) {
-		    throw new RuntimeException(e);
-		}
-	    }
-	};
+      @Override
+      public void write(final char[] cbuf, final int off, final int len) throws RuntimeException {
+        try {
+          final int insertOffs;
+          synchronized(reader) {
+            if(inputBuffer.toString().matches("^\\s*$")) {
+              int length = inputBuffer.length();
+              inputBuffer.delete(0, length);
+            }
+            insertOffs = getLength() - inputBuffer.length();
+            reader.notifyAll();
+          }
+          Runnable r = new Runnable() {
+              public void run() {
+                synchronized(reader) {
+                  try {
+                    superInsertString(insertOffs,
+                                      new String(cbuf, off, len),
+                                      null);
+                  } catch(Exception e) {
+                    assert(false); //BadLocationException should not happen here
+                  }
+                }
+              }
+            };
+          SwingUtilities.invokeAndWait(r);
+        }  catch (Exception e) {
+          throw new RuntimeException(e);
+        }
+      }
+    };
 	
-	private boolean disposed = false;
-	private final Thread replThread;
+  private boolean disposed = false;
+  private final Thread replThread;
 	
-    public ConsoleDocument(LispObject replFunction) {
-	final LispObject replWrapper = makeReplWrapper(new Stream(Symbol.SYSTEM_STREAM, new BufferedReader(reader)),
-						       new Stream(Symbol.SYSTEM_STREAM, new BufferedWriter(writer)),
-						       replFunction);
-	replThread = new Thread("REPL-thread-" + System.identityHashCode(this)) {
-		public void run() {
-		    while(true) {
-			replWrapper.execute();
-			yield();
-		    }
-		}
-	    };
-	replThread.start();
+  public ConsoleDocument(LispObject replFunction) {
+    final LispObject replWrapper = makeReplWrapper(new Stream(Symbol.SYSTEM_STREAM, new BufferedReader(reader)),
+                                                   new Stream(Symbol.SYSTEM_STREAM, new BufferedWriter(writer)),
+                                                   replFunction);
+    replThread = new Thread("REPL-thread-" + System.identityHashCode(this)) {
+        public void run() {
+          while(true) {
+            replWrapper.execute();
+            yield();
+          }
+        }
+      };
+    replThread.start();
+  }
+
+  @Override
+  public void insertString(int offs, String str, AttributeSet a)
+    throws BadLocationException {
+    synchronized(reader) {
+      int bufferStart = getLength() - inputBuffer.length();
+      if(offs < bufferStart) {
+        throw new BadLocationException("Can only insert after " + bufferStart, offs);
+      }
+      superInsertString(offs, str, a);
+      inputBuffer.insert(offs - bufferStart, str);
+      if(processInputP(inputBuffer, str)) {
+        reader.notifyAll();
+      }
     }
+  }
+	
+  protected void superInsertString(int offs, String str, AttributeSet a)
+    throws BadLocationException {
+    super.insertString(offs, str, a);
+  }
+	
+  /**
+   * Guaranteed to run with exclusive access to the buffer.
+   * @param sb NB sb MUST NOT be destructively modified!!
+   * @return
+   */
+  protected boolean processInputP(StringBuffer sb, String str) {
+    if(str.indexOf("\n") == -1) {
+      return false;
+    }
+    int parenCount = 0;
+    int len = sb.length();
+    for(int i = 0; i < len; i++) {
+      char c = sb.charAt(i);
+      if(c == '(') {
+        parenCount++;
+      } else if(c == ')') {
+        parenCount--;
+        if(parenCount == 0) {
+          return true;
+        }
+      }
+    }
+    return parenCount <= 0;
+  }
+	
+  @Override
+  public void remove(int offs, int len) throws BadLocationException {
+    synchronized(reader) {
+      int bufferStart = getLength() - inputBuffer.length();
+      if(offs < bufferStart) {
+        throw new BadLocationException("Can only remove after " + bufferStart, offs);
+      }
+      super.remove(offs, len);
+      inputBuffer.delete(offs - bufferStart, offs - bufferStart + len);
+    }
+  }
+	
+  public Reader getReader() {
+    return reader;
+  }
+	
+  public Writer getWriter() {
+    return writer;
+  }
+	
+  public void setupTextComponent(final JTextComponent txt) {
+    addDocumentListener(new DocumentListener() {
 
-    @Override
-    public void insertString(int offs, String str, AttributeSet a)
-	throws BadLocationException {
-	synchronized(reader) {
-	    int bufferStart = getLength() - inputBuffer.length();
-	    if(offs < bufferStart) {
-		throw new BadLocationException("Can only insert after " + bufferStart, offs);
-	    }
-	    superInsertString(offs, str, a);
-	    inputBuffer.insert(offs - bufferStart, str);
-	    if(processInputP(inputBuffer, str)) {
-		reader.notifyAll();
-	    }
-	}
+        //			@Override
+        public void changedUpdate(DocumentEvent e) {
+        }
+
+        // @Override
+        public void insertUpdate(DocumentEvent e) {
+          int len = getLength();
+          if(len - e.getLength() == e.getOffset()) { //The insert was at the end of the document
+            txt.setCaretPosition(getLength());
+          }
+        }
+
+        // @Override
+        public void removeUpdate(DocumentEvent e) {
+        }
+      });
+    txt.setCaretPosition(getLength());
+  }
+	
+  public void dispose() {
+    disposed = true;
+    for(DocumentListener listener : getDocumentListeners()) {
+      removeDocumentListener(listener);
     }
+    try {
+      reader.close();
+      writer.close();
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+    replThread.interrupt(); //really?
+  }
 	
-    protected void superInsertString(int offs, String str, AttributeSet a)
-	throws BadLocationException {
-	super.insertString(offs, str, a);
+  private final LispObject debuggerHook = new Function() {
+	    
+      @Override
+      public LispObject execute(LispObject condition, LispObject debuggerHook) {
+        if(disposed) {
+          return PACKAGE_SYS.findSymbol("%DEBUGGER-HOOK-FUNCTION").execute(condition, debuggerHook);
+        } else {
+          return NIL;
+        }
+      }
+	    
+    };
+	
+  public LispObject makeReplWrapper(final Stream in, final Stream out, final LispObject fn) {
+    return new Function() {	
+      @Override
+      public LispObject execute() {
+        SpecialBindingsMark lastSpecialBinding = LispThread.currentThread().markSpecialBindings();
+        try {
+          TwoWayStream ioStream = new TwoWayStream(in, out);
+          LispThread.currentThread().bindSpecial(Symbol.DEBUGGER_HOOK, debuggerHook);
+          LispThread.currentThread().bindSpecial(Symbol.STANDARD_INPUT, in);
+          LispThread.currentThread().bindSpecial(Symbol.STANDARD_OUTPUT, out);
+          LispThread.currentThread().bindSpecial(Symbol.ERROR_OUTPUT, out);
+          LispThread.currentThread().bindSpecial(Symbol.TERMINAL_IO, ioStream);
+          LispThread.currentThread().bindSpecial(Symbol.DEBUG_IO, ioStream);
+          LispThread.currentThread().bindSpecial(Symbol.QUERY_IO, ioStream);
+          return fn.execute();
+        } finally {
+          LispThread.currentThread().resetSpecialBindings(lastSpecialBinding);
+        }
+      }
+	    
+    };
+  }
+	
+  public void disposeOnClose(final Window parent) {
+    parent.addWindowListener(new WindowAdapter() {
+        @Override
+        public void windowClosing(WindowEvent e) {
+          dispose();
+          parent.removeWindowListener(this);
+        }
+      });
+  }
+	
+  public static void main(String[] args) {
+    LispObject repl = null;
+    try {		
+      repl = Interpreter.createInstance().eval("#'top-level::top-level-loop");
+    } catch (Throwable e) {
+      e.printStackTrace();
+      System.exit(1);
     }
-	
-	/**
-	 * Guaranteed to run with exclusive access to the buffer.
-	 * @param sb NB sb MUST NOT be destructively modified!!
-	 * @return
-	 */
-	protected boolean processInputP(StringBuffer sb, String str) {
-		if(str.indexOf("\n") == -1) {
-			return false;
-		}
-		int parenCount = 0;
-		int len = sb.length();
-		for(int i = 0; i < len; i++) {
-			char c = sb.charAt(i);
-			if(c == '(') {
-				parenCount++;
-			} else if(c == ')') {
-				parenCount--;
-				if(parenCount == 0) {
-					return true;
-				}
-			}
-		}
-		return parenCount <= 0;
-	}
-	
-    @Override
-    public void remove(int offs, int len) throws BadLocationException {
-	synchronized(reader) {
-	    int bufferStart = getLength() - inputBuffer.length();
-	    if(offs < bufferStart) {
-		throw new BadLocationException("Can only remove after " + bufferStart, offs);
-	    }
-	    super.remove(offs, len);
-	    inputBuffer.delete(offs - bufferStart, offs - bufferStart + len);
-	}
-    }
-	
-	public Reader getReader() {
-		return reader;
-	}
-	
-	public Writer getWriter() {
-		return writer;
-	}
-	
-	public void setupTextComponent(final JTextComponent txt) {
-		addDocumentListener(new DocumentListener() {
-
-			//			@Override
-			public void changedUpdate(DocumentEvent e) {
-			}
-
-			// @Override
-			public void insertUpdate(DocumentEvent e) {
-				int len = getLength();
-				if(len - e.getLength() == e.getOffset()) { //The insert was at the end of the document
-					txt.setCaretPosition(getLength());
-				}
-			}
-
-			// @Override
-			public void removeUpdate(DocumentEvent e) {
-			}
-		});
-		txt.setCaretPosition(getLength());
-	}
-	
-	public void dispose() {
-		disposed = true;
-		for(DocumentListener listener : getDocumentListeners()) {
-			removeDocumentListener(listener);
-		}
-		try {
-			reader.close();
-			writer.close();
-		} catch (Exception e) {
-			throw new RuntimeException(e);
-		}
-		replThread.interrupt(); //really?
-	}
-	
-    private final LispObject debuggerHook = new Function() {
-	    
-	    @Override
-	    public LispObject execute(LispObject condition, LispObject debuggerHook) {
-		if(disposed) {
-		    return PACKAGE_SYS.findSymbol("%DEBUGGER-HOOK-FUNCTION").execute(condition, debuggerHook);
-		} else {
-		    return NIL;
-		}
-	    }
-	    
-	};
-	
-    public LispObject makeReplWrapper(final Stream in, final Stream out, final LispObject fn) {
-	return new Function() {	
-	    @Override
-	    public LispObject execute() {
-		SpecialBindingsMark lastSpecialBinding = LispThread.currentThread().markSpecialBindings();
-		try {
-		    TwoWayStream ioStream = new TwoWayStream(in, out);
-		    LispThread.currentThread().bindSpecial(Symbol.DEBUGGER_HOOK, debuggerHook);
-		    LispThread.currentThread().bindSpecial(Symbol.STANDARD_INPUT, in);
-		    LispThread.currentThread().bindSpecial(Symbol.STANDARD_OUTPUT, out);
-		    LispThread.currentThread().bindSpecial(Symbol.ERROR_OUTPUT, out);
-		    LispThread.currentThread().bindSpecial(Symbol.TERMINAL_IO, ioStream);
-		    LispThread.currentThread().bindSpecial(Symbol.DEBUG_IO, ioStream);
-		    LispThread.currentThread().bindSpecial(Symbol.QUERY_IO, ioStream);
-		    return fn.execute();
-		} finally {
-		    LispThread.currentThread().resetSpecialBindings(lastSpecialBinding);
-		}
-	    }
-	    
-	};
-    }
-	
-    public void disposeOnClose(final Window parent) {
-	parent.addWindowListener(new WindowAdapter() {
-		@Override
-		public void windowClosing(WindowEvent e) {
-		    dispose();
-		    parent.removeWindowListener(this);
-		}
-	    });
-    }
-	
-    public static void main(String[] args) {
-	LispObject repl = null;
-	try {		
-	    repl = Interpreter.createInstance().eval("#'top-level::top-level-loop");
-	} catch (Throwable e) {
-	    e.printStackTrace();
-	    System.exit(1);
-	}
-	final ConsoleDocument d = new ConsoleDocument(repl);
-	final JTextComponent txt = new JTextArea(d);
-	d.setupTextComponent(txt);
-	JFrame f = new JFrame();
-	f.add(new JScrollPane(txt));
-	d.disposeOnClose(f);
-	f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
-	f.pack();
-	f.setVisible(true);
-    }
+    final ConsoleDocument d = new ConsoleDocument(repl);
+    final JTextComponent txt = new JTextArea(d);
+    d.setupTextComponent(txt);
+    JFrame f = new JFrame();
+    f.add(new JScrollPane(txt));
+    d.disposeOnClose(f);
+    f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
+    f.pack();
+    f.setVisible(true);
+  }
 	
 }

