diff --git a/modules/domain-node/src/main/java/org/apache/tuscany/sca/Node.java b/modules/domain-node/src/main/java/org/apache/tuscany/sca/Node.java
index b316ae7..a71611e 100644
--- a/modules/domain-node/src/main/java/org/apache/tuscany/sca/Node.java
+++ b/modules/domain-node/src/main/java/org/apache/tuscany/sca/Node.java
@@ -32,6 +32,7 @@
 import org.apache.tuscany.sca.monitor.ValidationException;
 import org.apache.tuscany.sca.runtime.ActivationException;
 import org.apache.tuscany.sca.runtime.ContributionDescription;
+import org.apache.tuscany.sca.runtime.DOMInvoker;
 import org.oasisopen.sca.NoSuchServiceException;
 
 /**
@@ -215,6 +216,8 @@
      * Would also be convenient to get service proxys as from SCAClientFactory
      */
     <T> T getService(Class<T> interfaze, String serviceURI) throws NoSuchServiceException;    
+    
+    DOMInvoker getDOMInvoker(String serviceURI) throws NoSuchServiceException;
 
     /**
      * Get the URIs of any composites that have been started in the domain
diff --git a/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java b/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java
index 52a6c7e..c5ae827 100644
--- a/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java
+++ b/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/NodeImpl.java
@@ -61,6 +61,7 @@
 import org.apache.tuscany.sca.runtime.CompositeActivator;
 import org.apache.tuscany.sca.runtime.ContributionDescription;
 import org.apache.tuscany.sca.runtime.ContributionListener;
+import org.apache.tuscany.sca.runtime.DOMInvoker;
 import org.apache.tuscany.sca.runtime.DomainRegistry;
 import org.apache.tuscany.sca.runtime.RuntimeProperties;
 import org.oasisopen.sca.NoSuchServiceException;
@@ -653,4 +654,9 @@
         endpointsIncludeDomainName = b;
     }
 
+    @Override
+    public DOMInvoker getDOMInvoker(String serviceURI) throws NoSuchServiceException {
+        return ServiceHelper.getDOMInvoker(serviceURI, domainRegistry, extensionPointRegistry, deployer);
+    }
+
 }
diff --git a/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java b/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java
index 3ada1bb..274b15d 100644
--- a/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java
+++ b/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java
@@ -45,10 +45,12 @@
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
 import org.apache.tuscany.sca.runtime.ContributionDescription;
+import org.apache.tuscany.sca.runtime.DOMInvoker;
 import org.apache.tuscany.sca.runtime.DomainRegistry;
 import org.apache.tuscany.sca.runtime.RuntimeComponent;
 import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
 import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
+import org.apache.tuscany.sca.runtime.TuscanyServiceReference;
 import org.oasisopen.sca.NoSuchServiceException;
 import org.oasisopen.sca.ServiceRuntimeException;
 import org.oasisopen.sca.annotation.Remotable;
@@ -85,6 +87,30 @@
         }
     }
 
+    public static DOMInvoker getDOMInvoker(String serviceURI, DomainRegistry domainRegistry, ExtensionPointRegistry extensionPointRegistry, Deployer deployer) throws NoSuchServiceException {
+
+        List<Endpoint> endpoints = domainRegistry.findEndpoint(serviceURI);
+        if (endpoints.size() < 1) {
+            throw new NoSuchServiceException(serviceURI);
+        }
+
+        String serviceName = null;
+        if (serviceURI.contains("/")) {
+            int i = serviceURI.indexOf("/");
+            if (i < serviceURI.length() - 1) {
+                serviceName = serviceURI.substring(i + 1);
+            }
+        }
+
+        Endpoint ep = endpoints.get(0);
+        if (((RuntimeComponent)ep.getComponent()).getComponentContext() != null) {
+            return ((TuscanyServiceReference<?>)((RuntimeComponent)ep.getComponent()).getServiceReference(null, serviceName)).getDOMInvoker();
+        } else {
+            throw new NoSuchServiceException(serviceURI);
+//            return getRemoteProxy(interfaze, ep, domainRegistry, extensionPointRegistry, deployer);
+        }
+    }
+
     private static <T> T getRemoteProxy(Class<T> serviceInterface, Endpoint endpoint, DomainRegistry domainRegistry, ExtensionPointRegistry extensionPointRegistry, Deployer deployer) throws NoSuchServiceException {
         FactoryExtensionPoint factories = extensionPointRegistry.getExtensionPoint(FactoryExtensionPoint.class);
         AssemblyFactory assemblyFactory = factories.getFactory(AssemblyFactory.class);
diff --git a/modules/domain-node/src/test/java/org/apache/tuscany/sca/runtime/DOMInvokerTestCase.java b/modules/domain-node/src/test/java/org/apache/tuscany/sca/runtime/DOMInvokerTestCase.java
new file mode 100644
index 0000000..83688b6
--- /dev/null
+++ b/modules/domain-node/src/test/java/org/apache/tuscany/sca/runtime/DOMInvokerTestCase.java
@@ -0,0 +1,72 @@
+/*
+ * 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.tuscany.sca.runtime;
+
+import java.io.IOException;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.Node;
+import org.apache.tuscany.sca.TuscanyRuntime;
+import org.apache.tuscany.sca.common.xml.dom.DOMHelper;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.impl.NodeImpl;
+import org.junit.Test;
+import org.xml.sax.SAXException;
+
+public class DOMInvokerTestCase {
+
+    private DOMHelper domHelper;
+
+    @Test
+    public void testInstallDeployable() throws Throwable {
+        Node node = TuscanyRuntime.newInstance().createNode("default");
+        node.installContribution("helloworld", "src/test/resources/sample-helloworld.jar", null, null);
+        node.startComposite("helloworld", "helloworld.composite");
+
+        ExtensionPointRegistry registry = ((NodeImpl)node).getExtensionPointRegistry();
+        this.domHelper = DOMHelper.getInstance(registry);
+
+        DOMInvoker domInvoker = node.getDOMInvoker("HelloworldComponent");
+        org.w3c.dom.Node arg = getRequestDOM("petra");
+        org.w3c.dom.Node response = domInvoker.invoke("sayHello", arg);
+        Assert.assertEquals("Hello petra", getResponseString(response));
+    }
+
+    private String getResponseString(org.w3c.dom.Node responseDOM) {
+        String xml = domHelper.saveAsString(responseDOM); 
+        int x = xml.indexOf("<return>") + "<return>".length();
+        int y = xml.indexOf("</return>");
+        return xml.substring(x, y);
+    }
+
+    private org.w3c.dom.Node getRequestDOM(String name) {
+        try {
+
+            String xml = "<ns2:sayHello xmlns:ns2=\"http://sample/\"><arg0>"+ name + "</arg0></ns2:sayHello>";
+            return domHelper.load(xml);
+
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } catch (SAXException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}
diff --git a/modules/domain-node/src/test/java/org/apache/tuscany/sca/runtime/DynamicTestCase.java b/modules/domain-node/src/test/java/org/apache/tuscany/sca/runtime/DynamicTestCase.java
index f05771e..f1c4545 100644
--- a/modules/domain-node/src/test/java/org/apache/tuscany/sca/runtime/DynamicTestCase.java
+++ b/modules/domain-node/src/test/java/org/apache/tuscany/sca/runtime/DynamicTestCase.java
@@ -42,6 +42,7 @@
 import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
 import org.apache.tuscany.sca.implementation.java.IntrospectionException;
 import org.apache.tuscany.sca.implementation.java.JavaImplementation;
 import org.apache.tuscany.sca.implementation.java.JavaImplementationFactory;
@@ -64,6 +65,9 @@
         ExtensionPointRegistry extensionPoints = tuscanyRuntime.getExtensionPointRegistry();
         FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
 
+        UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class);
+        utilities.getUtility(RuntimeProperties.class).getProperties().setProperty(RuntimeProperties.QUIET_LOGGING, "true");
+        
         // Create a contribution
         ContributionFactory contributionFactory = modelFactories.getFactory(ContributionFactory.class);
         Contribution contribution = contributionFactory.createContribution();
@@ -96,10 +100,16 @@
         // Now run the composite with a Tuscany Node
         Node node = tuscanyRuntime.createNode();
         node.installContribution(contribution, null);
-        node.startComposite(contribution.getURI(), composite.getURI());
+        
+        for (int i=0; i<2000; i++) {
+            node.startComposite(contribution.getURI(), composite.getURI());
 
-        // test that the service has started and can be invoked
-        testService(node, contribution.getClassLoader());
+            // test that the service has started and can be invoked
+            testService(node, contribution.getClassLoader());
+            
+            node.stopComposite(contribution.getURI(), composite.getURI());
+        }
+        
 
         node.stop();
         tuscanyRuntime.stop();
@@ -107,7 +117,8 @@
 
     private void testService(Node node, ClassLoader classLoader) throws ClassNotFoundException, NoSuchServiceException, NoSuchDomainException, IllegalArgumentException, InvocationTargetException, IllegalAccessException {
         Class<?> interfaze = classLoader.loadClass("sample.Helloworld");
-        Object clientProxy = node.getService(interfaze, "testComponent/Helloworld");
+        Object clientProxy = node.getService(null, "testComponent/Helloworld");
+//        Object clientProxy = SCAClientFactory.newInstance(null).getService(interfaze, "testComponent/Helloworld");
         Method m = interfaze.getMethods()[0]; // the helloworld interface just has a single method "sayHello"
         Object response = m.invoke(clientProxy, new Object[] {"Ariana"});
         Assert.assertEquals("Hello Ariana", response);
