diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/README b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/README
new file mode 100644
index 0000000..333179e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/README
@@ -0,0 +1,2 @@
+
+This tests for clients with  @WebserviceRefs  and other annotations like MTOM, etc
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/build.properties b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/build.properties
new file mode 100644
index 0000000..2e76a39
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/build.properties
@@ -0,0 +1,24 @@
+<!--
+
+    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available at
+    https://www.gnu.org/software/classpath/license.html.
+
+    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+-->
+ 
+
+<property name="module" value="wsRef-webservice-features"/>
+<property name="appname" value="${module}"/>         
+<property name="assemble" value="${build.classes.dir}/archive"/>
+<property name="web.xml" value="./web.xml"/>
+
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/build.xml b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/build.xml
new file mode 100644
index 0000000..8797c23
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/build.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0"?>
+<!--
+
+    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available at
+    https://www.gnu.org/software/classpath/license.html.
+
+    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+-->
+
+<!DOCTYPE project [
+<!ENTITY commonSetup SYSTEM "file:./../../../../config/properties.xml">
+<!ENTITY commonBuild SYSTEM "file:./../../../../config/common.xml">
+<!ENTITY commonRun SYSTEM "file:./../../../../config/run.xml">
+<!ENTITY jaxwsTools SYSTEM "file:../../annotations/jaxwstools.xml">
+<!ENTITY testproperties SYSTEM "file:./build.properties">
+]>
+
+<project name="wsRef-webservicefeatures" default="all" basedir=".">
+
+    &commonSetup;
+    &commonBuild;
+    &commonRun;
+    &testproperties;
+    &jaxwsTools;
+
+  
+    <path id="classpath">
+        <fileset dir="${env.S1AS_HOME}/modules">
+                      <include name="*.jar"/>
+        </fileset>
+        <fileset dir="${env.S1AS_HOME}/modules/endorsed">
+                      <include name="*.jar"/>
+        </fileset>
+        <fileset dir="${env.APS_HOME}/lib">
+                      <include name="*.jar"/>
+        </fileset>
+    </path>
+
+    <path id="bootclasspath">
+        <fileset dir="${env.S1AS_HOME}/modules/endorsed">
+                      <include name="*.jar"/>
+        </fileset>
+    </path>
+    <target name="all" depends="clean, setup, undeploy"/>
+
+    <target name="clean" depends="init-common">
+      <antcall target="clean-common"/>
+      <delete dir="${env.S1AS_HOME}/build/localwsdl"/>
+    </target>
+
+    <target name="setup" depends="assemble-web,  deploy-app, assemble-client, deploy-client,runtest1"/>
+
+    <target name="compile" depends="init-common">
+          <antcall target="compile-common">
+            <param name="src" value="endpoint"/>
+          </antcall>
+        </target>
+
+    <target name="assemble-web" depends="init-common, compile">
+          <antcall target="pkg-war">
+            <param name="war.classes" value="${build.classes.dir}"/>
+            <param name="war.file" value="${assemble.dir}/${appname}-web.war"/>
+           </antcall>
+    </target>
+
+     <target name="runtest1" depends="init-common">
+      <mkdir dir="${build.classes.dir}/client"/>
+      <javac srcdir="." destdir="${build.classes.dir}/client"
+            classpath="${env.APS_HOME}/lib/reporter.jar"
+            includes="client/**"/>
+      <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${build.classes.dir}/client"/>
+      <java classname="client.TestClient">
+        <classpath>
+          <pathelement path="${build.classes.dir}/client"/>
+        </classpath>
+        <arg value="http://${http.host}:${http.port}/wsejbclient/RequestProcessor"/>
+      </java>
+    </target>
+
+
+     <target name="assemble-client" depends="init-common">
+      <mkdir dir="${build.classes.dir}/webclient/WEB-INF/classes"/>
+      <antcall target="wsimport">
+        <param name="wsimport.args"
+          value="-p client -Xendorsed -keep -d ${build.classes.dir}/webclient/WEB-INF/classes http://${http.host}:${http.port}/HelloService/Hello?WSDL"/>
+      </antcall>
+      <javac srcdir="." destdir="${build.classes.dir}/webclient/WEB-INF/classes"
+            includes="webclient/**">
+         <classpath refid="classpath"/>
+         <compilerarg value="-Djava.endorsed.dirs=${env.S1AS_HOME}/modules/endorsed"/>
+      </javac>
+
+      <copy file="client-web.xml" tofile="${build.classes.dir}/webclient/WEB-INF/web.xml"/>
+      <jar destfile="${assemble.dir}/wsejbclient.war" basedir="${build.classes.dir}/webclient" includes="**"/>
+    </target>
+
+
+    <target name="deploy-client" depends="init-common">
+      <property name="client.war" value="${assemble.dir}/wsejbclient.war"/>
+      <echo message="Deploying wsclient.war from ${basedir}." level="verbose"/>
+      <exec executable="${ASADMIN}">
+        <arg line="deploy"/>
+        <arg line="--user ${admin.user}"/>
+        <arg line="--passwordfile ${admin.password.file}"/>
+        <arg line="--host ${admin.host}"/>
+        <arg line="--port ${admin.port}"/>
+        <arg line="${client.war}"/>
+      </exec>
+    </target>   
+
+    <target name="undeploy-client" depends="init-common">
+      <exec executable="${ASADMIN}">
+        <arg line="undeploy"/>
+        <arg line="--user ${admin.user}"/>
+        <arg line="--passwordfile ${admin.password.file}"/>
+        <arg line="--host ${admin.host}"/>
+        <arg line="--port ${admin.port}"/>
+        <arg line="wsejbclient"/>
+      </exec>
+    </target>
+
+    <target name="deploy-app">
+      <antcall target="deploy-war-common">
+        <param name="contextroot" value="${appname}"/>
+      </antcall>
+    </target>
+
+
+
+    <target name="undeploy" depends="init-common">
+        <antcall target="undeploy-war-common"/>
+        <antcall target="undeploy-client"/>
+    </target>
+
+    
+</project>
+
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/client-web.xml b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/client-web.xml
new file mode 100644
index 0000000..027dfce
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/client-web.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available at
+    https://www.gnu.org/software/classpath/license.html.
+
+    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+-->
+
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:j2ee="http://java.sun.com/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
+         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+  <description>A test application</description>
+  <display-name>WebTier</display-name>
+  <servlet>
+    <display-name>centralServlet</display-name>
+    <servlet-name>RequestProcessor</servlet-name>
+    <servlet-class>client.Client</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>RequestProcessor</servlet-name>
+    <url-pattern>/RequestProcessor</url-pattern>
+  </servlet-mapping>
+
+  <session-config>
+    <session-timeout>54</session-timeout>
+  </session-config>
+</web-app>
+
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/client/TestClient.java b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/client/TestClient.java
new file mode 100644
index 0000000..ffd76f5
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/client/TestClient.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package client;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
+
+public class TestClient {
+
+    private static SimpleReporterAdapter stat =
+        new SimpleReporterAdapter("appserv-tests");
+
+    public boolean found1 = false;
+    public boolean found2 = false;
+
+    public static void main (String[] args) {
+        stat.addDescription("WSREF-features");
+        TestClient client = new TestClient();
+        client.doTest(args);
+        stat.printSummary("WSREF-features");
+    }
+
+    public void doTest(String[] args) {
+
+        String url = args[0];
+        try {
+            int code = invokeServlet(url);
+            report(code);
+	} catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+
+    private int invokeServlet(String url) throws Exception {
+        log("Invoking url = " + url);
+        URL u = new URL(url);
+        HttpURLConnection c1 = (HttpURLConnection)u.openConnection();
+        int code = c1.getResponseCode();
+        InputStream is = c1.getInputStream();
+        BufferedReader input = new BufferedReader (new InputStreamReader(is));
+        String line = null;
+        while ((line = input.readLine()) != null) {
+            log(line);
+            if(line.indexOf("So the RESULT OF HELLO SERVICE IS") != -1)
+		found1 = true;
+            if(line.indexOf("[Hello All]") != -1)
+		found2 = true;
+        }
+        return code;
+    }
+
+    private void report(int code) {
+        if(code != 200) {
+            log("Incorrect return code: " + code);
+            fail();
+        }
+        if(!found1) {
+            fail();
+        }
+        if(!found2) {
+            fail();
+        }
+        pass();
+    }
+
+    private void log(String message) {
+        System.out.println("[client.TestClient]:: " + message);
+    }
+
+    private void pass() {
+        stat.addStatus("WSREF-features", stat.PASS);
+    }
+
+    private void fail() {
+        stat.addStatus("WSREF-features", stat.FAIL);
+    }
+}
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/endpoint/Hello.java b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/endpoint/Hello.java
new file mode 100644
index 0000000..c4edf73
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/endpoint/Hello.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package endpoint;
+
+import javax.jws.WebService;
+import javax.jws.WebMethod;
+
+@javax.ejb.Stateless
+@WebService(
+    name="Hello",
+    serviceName="HelloService",
+    targetNamespace="http://example.com/Hello"
+)
+public class Hello {
+	public Hello() {}
+
+	@WebMethod(operationName="sayHello", action="urn:SayHello")
+	public String sayHello(String who) {
+		return "Hello " + who;
+	}
+}
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/web.xml b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/web.xml
new file mode 100644
index 0000000..aae527e
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/web.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available at
+    https://www.gnu.org/software/classpath/license.html.
+
+    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+-->
+
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+	xmlns:j2ee="http://java.sun.com/xml/ns/javaee"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+			http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+
+
+
+</web-app>
+
diff --git a/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/webclient/Client.java b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/webclient/Client.java
new file mode 100644
index 0000000..b6aa70c
--- /dev/null
+++ b/appserver/tests/appserv-tests/devtests/webservice/ejb_annotations/wsRef-webservice-features/webclient/Client.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package client;
+
+import javax.servlet.*;
+import javax.servlet.http.*;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.xml.ws.*;
+import javax.xml.ws.soap.*;
+
+public class Client extends HttpServlet {
+
+        @javax.xml.ws.WebServiceRef(HelloService.class)
+        @MTOM(enabled=true)
+        @RespectBinding
+        @Addressing (required = false,enabled=true)
+ 
+        Hello hiport;
+
+       public void doGet(HttpServletRequest req, HttpServletResponse resp) 
+		throws javax.servlet.ServletException {
+           doPost(req, resp);
+       }
+
+       public void doPost(HttpServletRequest req, HttpServletResponse resp)
+              throws javax.servlet.ServletException {
+            try {
+                com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true;
+                String ret = hiport.sayHello("All");
+                PrintWriter out = resp.getWriter();
+                resp.setContentType("text/html");
+                out.println("<html>");
+                out.println("<head>");
+                out.println("<title>TestServlet</title>");
+                out.println("</head>");
+                out.println("<body>");
+                out.println("<p>");
+                out.println("So the RESULT OF HELLO SERVICE IS :");
+                out.println("</p>");
+                out.println("[" + ret + "]");
+                out.println("</body>");
+                out.println("</html>");
+                out.flush();
+                out.close();
+            } catch(Exception e) {
+                e.printStackTrace();
+            }
+       }
+}
+
