diff --git a/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Expander.java b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Expander.java
new file mode 100644
index 0000000..253a5e3
--- /dev/null
+++ b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Expander.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.felix.gogo.jline;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+import org.apache.felix.gogo.runtime.Closure;
+import org.apache.felix.gogo.runtime.CommandSessionImpl;
+import org.apache.felix.service.command.CommandSession;
+import org.jline.reader.impl.DefaultExpander;
+
+public class Expander extends DefaultExpander {
+
+    private final CommandSession session;
+
+    public Expander(CommandSession session) {
+        this.session = session;
+    }
+
+    @Override
+    public String expandVar(String word) {
+        try {
+            Object o = org.apache.felix.gogo.runtime.Expander.expand(
+                    word,
+                    new Closure((CommandSessionImpl) session, null, null));
+            if (o instanceof Collection) {
+                return ((Collection<Object>) o).stream()
+                        .map(String::valueOf)
+                        .collect(Collectors.joining(" "));
+            }
+            else if (o != null) {
+                return o.toString();
+            }
+        } catch (Exception e) {
+            // ignore
+        }
+        return word;
+    }
+
+}
diff --git a/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java
index 81c612d..7e962e6 100644
--- a/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java
+++ b/gogo/jline/src/main/java/org/apache/felix/gogo/jline/Shell.java
@@ -42,7 +42,6 @@
 import org.apache.felix.gogo.runtime.Closure;
 import org.apache.felix.gogo.runtime.CommandProxy;
 import org.apache.felix.gogo.runtime.CommandSessionImpl;
-import org.apache.felix.gogo.runtime.Expander;
 import org.apache.felix.gogo.runtime.Job;
 import org.apache.felix.gogo.runtime.Job.Status;
 import org.apache.felix.gogo.runtime.Reflective;
@@ -140,7 +139,7 @@
         Object prompt = session.get(name);
         if (prompt != null) {
             try {
-                Object o = Expander.expand(
+                Object o = org.apache.felix.gogo.runtime.Expander.expand(
                         prompt.toString(),
                         new Closure((CommandSessionImpl) session, null, null));
                 if (o != null) {
@@ -291,6 +290,7 @@
                     .highlighter(new Highlighter(session))
                     .history(new FileHistory(new File(System.getProperty("user.home"), ".gogo.history")))
                     .parser(new Parser())
+                    .expander(new Expander(newSession))
                     .build();
             newSession.put(Shell.VAR_READER, reader);
             newSession.put(Shell.VAR_COMPLETIONS, new HashMap());
