diff --git a/service/pom.xml b/service/pom.xml
new file mode 100644
index 0000000..5936dc7
--- /dev/null
+++ b/service/pom.xml
@@ -0,0 +1,65 @@
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<parent>
+		<groupId>org.apache.felix</groupId>
+		<artifactId>felix-parent</artifactId>
+		<version>1.2.1</version>
+		<relativePath>../pom.xml</relativePath>
+	</parent>
+	
+  <modelVersion>4.0.0</modelVersion>
+  <name>Apache Felix File Service</name>
+  <description>Combines OSGi service definitions developed collaboratively at Apache Felix</description>
+  <url>http://felix.apache.org/site/service.html</url>
+  <version>0.0.1-SNAPSHOT</version>
+  <groupId>org.apache.felix</groupId>
+  <artifactId>service</artifactId>
+  <dependencies>
+    <dependency>
+    	<groupId>org.apache.felix</groupId>
+    	<artifactId>org.osgi.core</artifactId>
+    	<version>1.4.0</version>
+    	<type>bundle</type>
+    	<scope>compile</scope>
+    </dependency>
+    <dependency>
+    	<groupId>org.apache.felix</groupId>
+    	<artifactId>org.osgi.compendium</artifactId>
+    	<version>1.4.0</version>
+    	<type>bundle</type>
+    	<scope>compile</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <version>2.0.0</version>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+           <_include>bnd.bnd</_include>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/service/src/main/java/org/apache/felix/service/terminal/Terminal.java b/service/src/main/java/org/apache/felix/service/terminal/Terminal.java
new file mode 100644
index 0000000..33e203b
--- /dev/null
+++ b/service/src/main/java/org/apache/felix/service/terminal/Terminal.java
@@ -0,0 +1,268 @@
+/*
+ * 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.service.terminal;
+
+import java.io.*;
+
+/**
+ * Terminal.
+ * 
+ * The Terminal interface describes a minimal terminal that can easily be mapped
+ * to command line editing tools.
+ * 
+ * A Terminal is associated with an Input Stream and an Output Stream. The Input
+ * Stream represents the keyboard and the Output Stream the screen.
+ * 
+ * A terminal does not block the input, each character is returned as it is
+ * typed, no buffering or line editing takes place, characters are also not
+ * echoed. However, the Input Stream is not restricted to bytes only, it can
+ * also return translated key strokes. Integers from 1000 are used for those.
+ * Not all keys have to be supported by an implementation.
+ * 
+ * A number of functions is provided to move the cursor and erase
+ * characters/lines/screens. Any text outputed to the Output Stream is
+ * immediately added to the cursor position, which is then moved forwards. The
+ * control characters (LF,CR,TAB,BS) perform their normal actions. However lines
+ * do not wrap. Text typed that is longer than the window will not be visible,
+ * it is the responsibility of the sender to ensure this does not happen.
+ * 
+ * A screen is considered to be {@link #height()} lines that each have
+ * {@link #width()} characters. For cursor positioning, the screen is assumed to
+ * be starting at 0,0 and increases its position from left to right and from top
+ * to bottom. Positioning outside the screen bounds is undefined.
+ */
+public interface Terminal {
+	/**
+	 * Cursor up key
+	 */
+	int CURSOR_UP = 1000;
+	/**
+	 * Cursor down key.
+	 */
+	int CURSOR_DOWN = 1001;
+	/**
+	 * Cursors forward key. Usually right.
+	 */
+	int CURSOR_FORWARD = 1002;
+
+	/**
+	 * Cursors backward key. Usually left.
+	 */
+	int CURSOR_BACKWARD = 1003;
+
+	/**
+	 * Page up key
+	 */
+	int PAGE_UP = 1004;
+	/**
+	 * Page down key
+	 */
+	int PAGE_DOWN = 1005;
+	/**
+	 * Home key
+	 */
+	int HOME = 1006;
+	/**
+	 * End key
+	 */
+	int END = 1007;
+	/**
+	 * Insert key
+	 */
+	int INSERT = 1008;
+	/**
+	 * Delete key
+	 */
+	int DELETE = 1009;
+	/**
+	 * Break key
+	 */
+	int BREAK = 1009;
+	/**
+	 * Function key 1
+	 */
+	int F1 = 1101;
+	/**
+	 * Function key 2
+	 */
+	int F2 = 1102;
+	/**
+	 * Function key 3
+	 */
+	int F3 = 1103;
+	/**
+	 * Function key 4
+	 */
+	int F4 = 1104;
+	/**
+	 * Function key 5
+	 */
+	int F5 = 1105;
+	/**
+	 * Function key 6
+	 */
+	int F6 = 1106;
+	/**
+	 * Function key 7
+	 */
+	int F7 = 1107;
+	/**
+	 * Function key 8
+	 */
+	int F8 = 1108;
+	/**
+	 * Function key 9
+	 */
+	int F9 = 1109;
+	/**
+	 * Function key 10
+	 */
+	int F10 = 1110;
+	/**
+	 * Function key 11
+	 */
+	int F11 = 1111;
+	/**
+	 * Function key 12
+	 */
+	int F12 = 1112;
+
+	enum Attribute {
+		BLINK, UNDERLINE, STRIKE_THROUGH, BOLD, DIM, REVERSED;
+	}
+
+	enum Color {
+		NONE, BLACK, GREEN, YELLOW, MAGENTA, CYAN, BLUE, RED, WHITE;
+	}
+
+	/**
+	 * Return the associated Input Stream that represents the keyboard. Note
+	 * that this InputStream can return values > 256, these characters are
+	 * defined in this interface as special keys. This Input Stream should not
+	 * be closed by the client. If the client is done, it should unget the
+	 * services.
+	 * 
+	 * @return the current Input Stream.
+	 */
+	InputStream getInputStream();
+
+	/**
+	 * Return the Output Stream that is associated with the screen. Any writes
+	 * Clear the complete screen and position the cursor at 0,0.
+	 * 
+	 * @throws Exception
+	 */
+	void clear() throws Exception;
+
+	/**
+	 * Leave the cursor where it is but clear the remainder of the line.
+	 */
+	void eraseEndOfLine();
+
+	/**
+	 * Move the cursor up one line, this must not cause a scroll if the cursor
+	 * moves off the screen.
+	 * 
+	 * @throws Exception
+	 */
+	void up() throws Exception;
+
+	/**
+	 * Move the cursor down one line, this must not cause a scroll if the
+	 * cursors moves off the screen.
+	 * 
+	 * @throws Exception
+	 */
+	void down() throws Exception;
+
+	/**
+	 * Move the cursor backward. Must not wrap to previous line.
+	 * 
+	 * @throws Exception
+	 */
+	void backward() throws Exception;
+
+	/**
+	 * Move the cursor forward. Must not wrap to next line if the cursor becomes
+	 * higher than the width.
+	 * 
+	 * @throws Exception
+	 */
+	void forward() throws Exception;
+
+	/**
+	 * Return the actual width of the screen. Some screens can change their size
+	 * and this method must return the actual width.
+	 * 
+	 * @return the width of the screen.
+	 * 
+	 * @throws Exception
+	 */
+	int width() throws Exception;
+
+	/**
+	 * Return the actual height of the screen. Some screens can change their
+	 * size and this method must return the actual height.
+	 * 
+	 * @return the height of the screen.
+	 * 
+	 * @throws Exception
+	 */
+	int height() throws Exception;
+
+	/**
+	 * Return the current cursor position.
+	 * 
+	 * The position is returned as an array of 2 elements. The first element is
+	 * the x position and the second elements is the y position. Both are zero
+	 * based.
+	 * 
+	 * @return the current position or null if not possible.
+	 * 
+	 * @throws Exception
+	 */
+	int[] getPosition() throws Exception;
+
+	/**
+	 * Position the cursor on the screen. Positioning starts at 0,0 and the
+	 * maxium value is given by {@link #width()}, {@link #height()}. The visible
+	 * cursor is moved to this position and text insertion will continue from
+	 * that position.
+	 * 
+	 * @param x
+	 *            The x position, must be from 0-width
+	 * @param y
+	 *            The y position, must be from 0-height
+	 * @throws IllegalArgumenException
+	 *             when x or y is not in range
+	 * @throws Exception
+	 */
+	boolean position(int x, int y) throws Exception;
+
+	/**
+	 * Set the attributes of the text to outputed. This method
+	 * must reset all current attributes. That is, attributes
+	 * are not inherited from the current position.
+	 * 
+	 * @param foreground The foreground color
+	 * @param background The background color (around the character)
+	 * @param attr A number of attributes.
+	 */
+	boolean attributes(Color foreground, Color background, Attribute... attr);
+}
diff --git a/service/src/main/java/org/apache/felix/service/terminal/packageinfo b/service/src/main/java/org/apache/felix/service/terminal/packageinfo
new file mode 100644
index 0000000..73918b4
--- /dev/null
+++ b/service/src/main/java/org/apache/felix/service/terminal/packageinfo
@@ -0,0 +1 @@
+version 0.0.1
\ No newline at end of file
