diff --git a/.classpath b/.classpath
index 582cc2d..477dfc9 100644
--- a/.classpath
+++ b/.classpath
@@ -44,6 +44,9 @@
 	<classpathentry kind="src" path="services/ns/src/main/java"/>
 	<classpathentry kind="src" path="services/ns/target/generated-sources/main/etch/java"/>
 	<classpathentry kind="src" path="services/ns/src/test/java"/>
+	<classpathentry kind="src" path="services/log/src/main/java"/>
+	<classpathentry kind="src" path="services/log/src/test/java"/>
+	<classpathentry kind="src" path="services/log/target/generated-sources/main/etch/java"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/ETCH_DEPENDENT_JARS"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/scripts/compEtchFilesForJava.bat b/scripts/compEtchFilesForJava.bat
index 6de5c51..7013c7d 100644
--- a/scripts/compEtchFilesForJava.bat
+++ b/scripts/compEtchFilesForJava.bat
@@ -24,6 +24,7 @@
 
 @set testsdir=tests\src\main\etch
 @set examplesdir=examples
+@set servicesdir=services
 
 @set x=%CD%\
 @pushd %testsdir%
@@ -66,3 +67,14 @@
 @popd
 
 @popd
+@pushd %servicesdir%
+
+@pushd log\src\main\etch
+@call %x%scripts\etch-eclipse.bat %q% %b% %n% %d% %i%        LogService.etch
+@popd
+
+@pushd ns\src\main\etch
+@call %x%scripts\etch-eclipse.bat %q% %b% %n% %d% %i%        NameService.etch
+@popd
+
+@popd
diff --git a/services/log/src/main/etch/LogService.etch b/services/log/src/main/etch/LogService.etch
new file mode 100644
index 0000000..0f76937
--- /dev/null
+++ b/services/log/src/main/etch/LogService.etch
@@ -0,0 +1,54 @@
+/* $Id$
+ *
+ * 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.
+ */
+
+module org.apache.etch.services.log
+
+@Timeout( 4000 )
+service LogService
+{
+	boolean canOpenLog( string name )
+	
+	@Authorize( canOpenLog, name )
+	void openLog( string name )
+	
+	void closeLog()
+	
+	boolean isLogOpen()
+	
+	@Oneway
+	@Authorize( isLogOpen )
+	void writeLog( string entryId, object[] params )
+	
+	@Authorize( isLogOpen )
+	boolean isLogEnabled( string entryId )
+	
+	@Authorize( isLogOpen )
+	string[] getLogEnabled()
+	
+	@Authorize( isLogOpen )
+	void subscribeLogEnabled()
+	
+	@Authorize( isLogOpen )
+	void unsubscribeLogEnabled()
+	
+	@Oneway
+	@Direction( Client )
+	void logEnabledChanged( string[] entryIds )
+}
diff --git a/services/log/src/main/java/org/apache/etch/services/log/ImplLogServiceClient.java b/services/log/src/main/java/org/apache/etch/services/log/ImplLogServiceClient.java
new file mode 100644
index 0000000..209aa46
--- /dev/null
+++ b/services/log/src/main/java/org/apache/etch/services/log/ImplLogServiceClient.java
@@ -0,0 +1,49 @@
+/* $Id$
+ *
+ * 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.etch.services.log;
+
+/**
+ * Your custom implementation of BaseLogServiceClient. Add methods here to provide
+ * implementations of messages from the server.
+ */
+public class ImplLogServiceClient extends BaseLogServiceClient
+{
+	/**
+	 * Constructs the ImplLogServiceClient.
+	 *
+	 * @param server a connection to the server session. Use this to send a
+	 * message to the server.
+	 */
+	public ImplLogServiceClient( RemoteLogServiceServer server )
+	{
+		this.server = server;
+	}
+	
+	/**
+	 * A connection to the server session. Use this to send a
+	 * message to the server.
+	 */
+	@SuppressWarnings( "unused" )
+	private final RemoteLogServiceServer server;
+
+	// TODO insert methods here to provide implementations of LogServiceClient
+	// messages from the server.
+}
\ No newline at end of file
diff --git a/services/log/src/main/java/org/apache/etch/services/log/ImplLogServiceServer.java b/services/log/src/main/java/org/apache/etch/services/log/ImplLogServiceServer.java
new file mode 100644
index 0000000..71a9a0a
--- /dev/null
+++ b/services/log/src/main/java/org/apache/etch/services/log/ImplLogServiceServer.java
@@ -0,0 +1,49 @@
+/* $Id$
+ *
+ * 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.etch.services.log;
+
+/**
+ * Your custom implementation of BaseLogServiceServer. Add methods here to provide
+ * implementations of messages from the client.
+ */
+public class ImplLogServiceServer extends BaseLogServiceServer
+{
+	/**
+	 * Constructs the ImplLogServiceServer.
+	 *
+	 * @param client a connection to the client session. Use this to send a
+	 * message to the client.
+	 */
+	public ImplLogServiceServer( RemoteLogServiceClient client )
+	{
+		this.client = client;
+	}
+	
+	/**
+	 * A connection to the client session. Use this to send a
+	 * message to the client.
+	 */
+	@SuppressWarnings( "unused" )
+	private final RemoteLogServiceClient client;
+
+	// TODO insert methods here to provide implementations of LogServiceServer
+	// messages from the client.
+}
\ No newline at end of file
diff --git a/services/log/src/main/java/org/apache/etch/services/log/MainLogServiceClient.java b/services/log/src/main/java/org/apache/etch/services/log/MainLogServiceClient.java
new file mode 100644
index 0000000..0933bd4
--- /dev/null
+++ b/services/log/src/main/java/org/apache/etch/services/log/MainLogServiceClient.java
@@ -0,0 +1,57 @@
+/* $Id$
+ *
+ * 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.etch.services.log;
+
+/**
+ * Main program for LogServiceClient. This program makes a connection to the
+ * listener created by MainLogServiceListener.
+ */
+public class MainLogServiceClient implements LogServiceHelper.LogServiceClientFactory
+{
+	/**
+	 * Main program for LogServiceClient.
+	 * 
+	 * @param args command line arguments.
+	 * @throws Exception
+	 */
+	public static void main( String[] args ) throws Exception
+	{
+		// TODO Change to correct URI
+		String uri = "tcp://localhost:4001";
+		
+		RemoteLogServiceServer server = LogServiceHelper.newServer( uri, null,
+			new MainLogServiceClient() );
+
+		// Connect to the service
+		server._startAndWaitUp( 4000 );
+
+		// TODO Insert Your Code Here
+
+		// Disconnect from the service
+		server._stopAndWaitDown( 4000 );
+	}
+
+	public LogServiceClient newLogServiceClient( RemoteLogServiceServer server )
+		throws Exception
+	{
+		return new ImplLogServiceClient( server );
+	}
+}
diff --git a/services/log/src/main/java/org/apache/etch/services/log/MainLogServiceListener.java b/services/log/src/main/java/org/apache/etch/services/log/MainLogServiceListener.java
new file mode 100644
index 0000000..eefbf9c
--- /dev/null
+++ b/services/log/src/main/java/org/apache/etch/services/log/MainLogServiceListener.java
@@ -0,0 +1,54 @@
+/* $Id$
+ *
+ * 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.etch.services.log;
+
+import org.apache.etch.bindings.java.support.ServerFactory;
+import org.apache.etch.util.core.io.Transport;
+
+/**
+ * Main program for LogServiceServer. This program makes a listener to accept
+ * connections from MainLogServiceClient.
+ */
+public class MainLogServiceListener implements LogServiceHelper.LogServiceServerFactory
+{
+	/**
+	 * Main program for LogServiceServer.
+	 * 
+	 * @param args command line arguments.
+	 * @throws Exception
+	 */
+	public static void main( String[] args ) throws Exception
+	{
+		// TODO Change to correct URI
+		String uri = "tcp://0.0.0.0:4001";
+		
+		ServerFactory listener = LogServiceHelper.newListener( uri, null,
+			new MainLogServiceListener() );
+
+		// Start the Listener
+		listener.transportControl( Transport.START_AND_WAIT_UP, 4000 );
+	}
+
+	public LogServiceServer newLogServiceServer( RemoteLogServiceClient client )
+	{
+		return new ImplLogServiceServer( client );
+	}
+}
diff --git a/services/ns/src/main/etch/ns.etch b/services/ns/src/main/etch/NameService.etch
similarity index 100%
rename from services/ns/src/main/etch/ns.etch
rename to services/ns/src/main/etch/NameService.etch
