diff --git a/src/org/armedbear/lisp/Stream.java b/src/org/armedbear/lisp/Stream.java
index c641ede..de7cf1a 100644
--- a/src/org/armedbear/lisp/Stream.java
+++ b/src/org/armedbear/lisp/Stream.java
@@ -543,17 +543,16 @@ public class Stream extends StructureObject {
     }
 
     public LispObject readSymbol() {
-        final Readtable rt =
-            (Readtable) Symbol.CURRENT_READTABLE.symbolValue(LispThread.currentThread());
-        StringBuilder sb = new StringBuilder();
-        _readToken(sb, rt);
-        return new Symbol(sb.toString());
+        return readSymbol((Readtable) Symbol.CURRENT_READTABLE
+            .symbolValue(LispThread.currentThread()));
     }
 
     public LispObject readSymbol(Readtable rt) {
         StringBuilder sb = new StringBuilder();
-        _readToken(sb, rt);
-        return new Symbol(sb.toString());
+        BitSet flags = _readToken(sb, rt);
+
+        return new Symbol(rt.getReadtableCase() == Keyword.INVERT ?
+            invert(sb.toString(), flags) : sb.toString());
     }
 
     public LispObject readStructure(ReadtableAccessor rta) {
