diff --git a/asterixdb/asterix-app/pom.xml b/asterixdb/asterix-app/pom.xml
index 282181c..597e328 100644
--- a/asterixdb/asterix-app/pom.xml
+++ b/asterixdb/asterix-app/pom.xml
@@ -191,14 +191,6 @@
   </build>
   <dependencies>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-servlet</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.hyracks</groupId>
       <artifactId>hyracks-control-cc</artifactId>
     </dependency>
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
index 7955ad6..92f3501 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
@@ -25,8 +25,6 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import javax.servlet.Servlet;
-
 import org.apache.asterix.active.ActiveLifecycleListener;
 import org.apache.asterix.api.http.server.ApiServlet;
 import org.apache.asterix.api.http.server.ClusterApiServlet;
@@ -76,9 +74,7 @@
 import org.apache.hyracks.control.common.controllers.CCConfig;
 import org.apache.hyracks.http.api.IServlet;
 import org.apache.hyracks.http.server.HttpServer;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.eclipse.jetty.servlet.ServletMapping;
+import org.apache.hyracks.http.server.WebManager;
 
 public class CCApplicationEntryPoint implements ICCApplicationEntryPoint {
 
@@ -208,7 +204,7 @@
     }
 
     protected void addLet(HttpServer server, Lets let) {
-        server.addLet(createServLet(server, let, let.getPath()));
+        server.addLet(createServlet(server, let, let.getPath()));
     }
 
     protected HttpServer setupQueryWebServer(ExternalProperties externalProperties) throws Exception {
@@ -220,15 +216,6 @@
         return queryWebServer;
     }
 
-    protected void addServlet(ServletContextHandler context, Servlet servlet, String... paths) {
-        final ServletHolder holder = new ServletHolder(servlet);
-        context.getServletHandler().addServlet(holder);
-        ServletMapping mapping = new ServletMapping();
-        mapping.setServletName(holder.getName());
-        mapping.setPathSpecs(paths);
-        context.getServletHandler().addServletMapping(mapping);
-    }
-
     protected HttpServer setupFeedServer(ExternalProperties externalProperties) throws Exception {
         HttpServer feedServer = new HttpServer(webManager.getBosses(), webManager.getWorkers(),
                 externalProperties.getFeedServerPort());
@@ -237,7 +224,7 @@
         return feedServer;
     }
 
-    protected IServlet createServLet(HttpServer server, Lets key, String... paths) {
+    protected IServlet createServlet(HttpServer server, Lets key, String... paths) {
         switch (key) {
             case AQL:
                 return new FullApiServlet(server.ctx(), paths, ccExtensionManager.getAqlCompilationProvider(),
diff --git a/asterixdb/asterix-client-helper/pom.xml b/asterixdb/asterix-client-helper/pom.xml
index be9693f..9a7bb64 100644
--- a/asterixdb/asterix-client-helper/pom.xml
+++ b/asterixdb/asterix-client-helper/pom.xml
@@ -129,7 +129,6 @@
         <configuration>
           <usedDependencies>
             <usedDependency>org.codehaus.mojo.appassembler:appassembler-booter</usedDependency>
-            <usedDependency>javax.servlet:javax.servlet-api</usedDependency>
           </usedDependencies>
         </configuration>
       </plugin>
@@ -169,10 +168,6 @@
       <artifactId>args4j</artifactId>
     </dependency>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.codehaus.mojo.appassembler</groupId>
       <artifactId>appassembler-booter</artifactId>
       <version>1.10</version>
diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/GetClusterStateCommand.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/GetClusterStateCommand.java
index e0fcb06..197df25 100644
--- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/GetClusterStateCommand.java
+++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/GetClusterStateCommand.java
@@ -22,13 +22,11 @@
 import java.net.HttpURLConnection;
 import java.nio.charset.StandardCharsets;
 
-import javax.servlet.http.HttpServletResponse;
+import org.apache.asterix.clienthelper.Args;
+import org.apache.commons.io.IOUtils;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.asterix.clienthelper.Args;
-import org.apache.commons.io.IOUtils;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public class GetClusterStateCommand extends RemoteCommand {
 
@@ -48,7 +46,7 @@
         // 0 = ACTIVE, 1 = DOWN, 2 = UNUSABLE, 3 = OTHER
         try {
             conn = openConnection(args.getClusterStatePath(), Method.GET);
-            if (conn.getResponseCode() == HttpServletResponse.SC_OK) {
+            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                 String result = IOUtils.toString(conn.getInputStream(), StandardCharsets.UTF_8.name());
                 ObjectMapper om = new ObjectMapper();
                 JsonNode json = om.readTree(result);
diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java
index 688f4ad..8010b39 100644
--- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java
+++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/ShutdownCommand.java
@@ -19,8 +19,7 @@
 package org.apache.asterix.clienthelper.commands;
 
 import java.io.IOException;
-
-import javax.servlet.http.HttpServletResponse;
+import java.net.HttpURLConnection;
 
 import org.apache.asterix.clienthelper.Args;
 
@@ -46,7 +45,7 @@
         int statusCode = tryPost(shutdownPath);
         // TODO (mblow): interrogate result to determine acceptance, not rely on HTTP 200
         switch (statusCode) {
-            case HttpServletResponse.SC_ACCEPTED:
+            case HttpURLConnection.HTTP_ACCEPTED:
                 clusterLog("accepted shutdown request.");
                 return 0;
             case -1:
diff --git a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/WaitForClusterCommand.java b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/WaitForClusterCommand.java
index dad9f8c..96193ce 100644
--- a/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/WaitForClusterCommand.java
+++ b/asterixdb/asterix-client-helper/src/main/java/org/apache/asterix/clienthelper/commands/WaitForClusterCommand.java
@@ -23,13 +23,11 @@
 import java.nio.charset.StandardCharsets;
 import java.util.concurrent.TimeUnit;
 
-import javax.servlet.http.HttpServletResponse;
+import org.apache.asterix.clienthelper.Args;
+import org.apache.commons.io.IOUtils;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.asterix.clienthelper.Args;
-import org.apache.commons.io.IOUtils;
-import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public class WaitForClusterCommand extends RemoteCommand {
 
@@ -41,9 +39,8 @@
     @SuppressWarnings("squid:S2142") // interrupted exception
     public int execute() throws IOException {
         final int timeoutSecs = args.getTimeoutSecs();
-        log("Waiting "
-                + (timeoutSecs > 0 ? "up to " + timeoutSecs + " seconds " : "")
-                + "for cluster " + hostPort + " to be available.");
+        log("Waiting " + (timeoutSecs > 0 ? "up to " + timeoutSecs + " seconds " : "") + "for cluster " + hostPort
+                + " to be available.");
 
         long startTime = System.currentTimeMillis();
         long timeoutMillis = TimeUnit.SECONDS.toMillis(timeoutSecs);
@@ -65,7 +62,7 @@
             HttpURLConnection conn;
             try {
                 conn = openConnection(args.getClusterStatePath(), Method.GET);
-                if (conn.getResponseCode() == HttpServletResponse.SC_OK) {
+                if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                     String result = IOUtils.toString(conn.getInputStream(), StandardCharsets.UTF_8.name());
                     ObjectMapper om = new ObjectMapper();
                     JsonNode json = om.readTree(result);
@@ -79,9 +76,8 @@
                 // ignore exception, try again
             }
         }
-        log("Cluster " + hostPort + " was not available before timeout of " + timeoutSecs
-                + " seconds was exhausted" + (lastState != null ? " (state: " + lastState + ")" : "")
-                + "; check logs for more information");
+        log("Cluster " + hostPort + " was not available before timeout of " + timeoutSecs + " seconds was exhausted"
+                + (lastState != null ? " (state: " + lastState + ")" : "") + "; check logs for more information");
         return 1;
     }
 }
diff --git a/asterixdb/asterix-common/pom.xml b/asterixdb/asterix-common/pom.xml
index 731ac14..c2f1c6a 100644
--- a/asterixdb/asterix-common/pom.xml
+++ b/asterixdb/asterix-common/pom.xml
@@ -264,21 +264,6 @@
       <artifactId>log4j</artifactId>
     </dependency>
     <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-server</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-servlet</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
       <groupId>com.rometools</groupId>
       <artifactId>rome</artifactId>
       <version>1.5.1</version>
@@ -300,6 +285,19 @@
       <artifactId>guava</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.hyracks</groupId>
+      <artifactId>hyracks-data-std</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hyracks</groupId>
+      <artifactId>hyracks-http</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.netty</groupId>
+      <artifactId>netty-all</artifactId>
+      <version>4.1.6.Final</version>
+    </dependency>
+    <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
     </dependency>
@@ -308,10 +306,6 @@
       <artifactId>jackson-core</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.hyracks</groupId>
-      <artifactId>hyracks-data-std</artifactId>
-    </dependency>
-    <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-annotations</artifactId>
     </dependency>
diff --git a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/server/RSSFeedServlet.java b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/server/RSSFeedServlet.java
index f025017..6d8e2f2 100644
--- a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/server/RSSFeedServlet.java
+++ b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/server/RSSFeedServlet.java
@@ -24,10 +24,14 @@
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Level;
 
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import org.apache.asterix.common.config.GlobalConfig;
+import org.apache.hyracks.http.api.IServletRequest;
+import org.apache.hyracks.http.api.IServletResponse;
+import org.apache.hyracks.http.server.AbstractServlet;
+import org.apache.hyracks.http.server.util.ServletUtils;
 
 import com.rometools.rome.feed.synd.SyndContent;
 import com.rometools.rome.feed.synd.SyndContentImpl;
@@ -38,9 +42,11 @@
 import com.rometools.rome.io.FeedException;
 import com.rometools.rome.io.SyndFeedOutput;
 
-public class RSSFeedServlet extends HttpServlet {
+import io.netty.handler.codec.http.HttpMethod;
+import io.netty.handler.codec.http.HttpResponseStatus;
 
-    private static final long serialVersionUID = 1L;
+public class RSSFeedServlet extends AbstractServlet {
+
     private static final String DEFAULT_FEED_TYPE = "default.feed.type";
     private static final String FEED_TYPE = "type";
     private static final String MIME_TYPE = "application/xml; charset=UTF-8";
@@ -49,30 +55,45 @@
     private static final DateFormat DATE_PARSER = new SimpleDateFormat("yyyy-MM-dd");
     private String defaultFeedType;
 
-    @Override
-    public void init() {
-        defaultFeedType = getServletConfig().getInitParameter(DEFAULT_FEED_TYPE);
+    public RSSFeedServlet(ConcurrentMap<String, Object> ctx, String[] paths) {
+        super(ctx, paths);
+        defaultFeedType = (String) ctx.get(DEFAULT_FEED_TYPE);
         defaultFeedType = (defaultFeedType != null) ? defaultFeedType : "atom_0.3";
     }
 
-    @Override
-    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
+    protected void doGet(IServletRequest req, IServletResponse res) throws IOException {
         try {
             SyndFeed feed = getFeed(req);
             String feedType = req.getParameter(FEED_TYPE);
             feedType = (feedType != null) ? feedType : defaultFeedType;
             feed.setFeedType(feedType);
-            res.setContentType(MIME_TYPE);
+            ServletUtils.setContentType(res, MIME_TYPE);
             SyndFeedOutput output = new SyndFeedOutput();
-            output.output(feed, res.getWriter());
+            output.output(feed, res.writer());
         } catch (FeedException | ParseException ex) {
+            GlobalConfig.ASTERIX_LOGGER.log(Level.WARNING, ex.getMessage(), ex);
             String msg = COULD_NOT_GENERATE_FEED_ERROR;
-            log(msg, ex);
-            res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg);
+            res.writer().print(msg);
+            res.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR);
         }
     }
 
-    protected SyndFeed getFeed(HttpServletRequest req) throws IOException, FeedException, ParseException {
+    @Override
+    public void handle(IServletRequest req, IServletResponse res) {
+        if (req.getHttpRequest().method() == HttpMethod.GET) {
+            try {
+                doGet(req, res);
+            } catch (IOException e) {
+                // Servlet methods should not throw exceptions
+                // http://cwe.mitre.org/data/definitions/600.html
+                GlobalConfig.ASTERIX_LOGGER.log(Level.SEVERE, e.getMessage(), e);
+            }
+        } else {
+            res.setStatus(HttpResponseStatus.METHOD_NOT_ALLOWED);
+        }
+    }
+
+    protected SyndFeed getFeed(IServletRequest req) throws IOException, FeedException, ParseException {
         SyndFeed feed = new SyndFeedImpl();
         feed.setTitle("Sample Feed (created with ROME)");
         feed.setLink("http://rome.dev.java.net");
diff --git a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/server/RSSTestServer.java b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/server/RSSTestServer.java
index 5855e1e..f40999b 100644
--- a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/server/RSSTestServer.java
+++ b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/server/RSSTestServer.java
@@ -18,20 +18,18 @@
  */
 package org.apache.asterix.test.server;
 
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
+import org.apache.hyracks.http.server.HttpServer;
+import org.apache.hyracks.http.server.WebManager;
 
 public class RSSTestServer implements ITestServer {
 
-    private Server rssServer;
+    private WebManager webManager;
 
     public RSSTestServer(int port) {
-        rssServer = new Server(port);
-        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
-        context.setContextPath("/");
-        rssServer.setHandler(context);
-        context.addServlet(new ServletHolder(new RSSFeedServlet()), "/");
+        webManager = new WebManager();
+        HttpServer rssServer = new HttpServer(webManager.getBosses(), webManager.getWorkers(), port);
+        rssServer.addLet(new RSSFeedServlet(null, new String[] { "/" }));
+        webManager.add(rssServer);
     }
 
     @Override
@@ -40,13 +38,12 @@
 
     @Override
     public void start() throws Exception {
-        rssServer.start();
+        webManager.start();
     }
 
     @Override
     public void stop() throws Exception {
-        rssServer.stop();
-        rssServer.join();
+        webManager.stop();
     }
 
 }
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 3133231..c684539 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -67,7 +67,6 @@
     <algebricks.version>0.3.1-SNAPSHOT</algebricks.version>
     <hyracks.version>0.3.1-SNAPSHOT</hyracks.version>
     <hadoop.version>2.2.0</hadoop.version>
-    <jetty.version>9.3.11.v20160721</jetty.version>
     <jacoco.version>0.7.6.201602180812</jacoco.version>
   </properties>
 
@@ -652,16 +651,6 @@
   <dependencyManagement>
     <dependencies>
       <dependency>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-server</artifactId>
-        <version>${jetty.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.eclipse.jetty</groupId>
-        <artifactId>jetty-servlet</artifactId>
-        <version>${jetty.version}</version>
-      </dependency>
-      <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-simple</artifactId>
         <version>1.7.5</version>
@@ -966,11 +955,6 @@
         <type>test-jar</type>
       </dependency>
       <dependency>
-        <groupId>javax.servlet</groupId>
-        <artifactId>javax.servlet-api</artifactId>
-        <version>3.1.0</version>
-      </dependency>
-      <dependency>
         <groupId>commons-io</groupId>
         <artifactId>commons-io</artifactId>
         <version>2.5</version>
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml
index 0b8d6fe..c960da9 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/pom.xml
@@ -77,14 +77,25 @@
       <groupId>org.apache.hyracks</groupId>
       <artifactId>hyracks-control-common</artifactId>
       <version>${project.version}</version>
-      <type>jar</type>
-      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jetty</groupId>
       <artifactId>jetty-server</artifactId>
     </dependency>
     <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>javax.servlet-api</artifactId>
+      <version>3.1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-servlet</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-http</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.apache.wicket</groupId>
       <artifactId>wicket-core</artifactId>
       <version>1.5.2</version>
@@ -96,26 +107,18 @@
       </exclusions>
     </dependency>
     <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <version>3.1.0</version>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-servlet</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.wicket</groupId>
       <artifactId>wicket-request</artifactId>
       <version>1.5.2</version>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-http</artifactId>
+      <groupId>org.apache.wicket</groupId>
+      <artifactId>wicket-util</artifactId>
+      <version>1.5.2</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
     </dependency>
     <dependency>
       <groupId>org.ini4j</groupId>
@@ -128,11 +131,6 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.wicket</groupId>
-      <artifactId>wicket-util</artifactId>
-      <version>1.5.2</version>
-    </dependency>
-    <dependency>
       <groupId>args4j</groupId>
       <artifactId>args4j</artifactId>
       <version>2.0.12</version>
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/WebManager.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/WebManager.java
similarity index 94%
rename from asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/WebManager.java
rename to hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/WebManager.java
index 070a530..235e1ea 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/WebManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/WebManager.java
@@ -16,13 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.asterix.hyracks.bootstrap;
+package org.apache.hyracks.http.server;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.hyracks.http.server.HttpServer;
-
 import io.netty.channel.EventLoopGroup;
 import io.netty.channel.nio.NioEventLoopGroup;
 
