diff --git a/modules/http/pom.xml b/modules/http/pom.xml
deleted file mode 100644
index 7c6a2a1..0000000
--- a/modules/http/pom.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-  ~ 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">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.axis2</groupId>
-        <artifactId>axis2-transports</artifactId>
-        <version>1.7.0-SNAPSHOT</version>
-        <relativePath>../../pom.xml</relativePath>
-    </parent>
-    <artifactId>axis2-transport-http-tests</artifactId>
-    <name>Apache Axis2 - Transport - HTTP Tests</name>
-    <description>This inclues all the available transports in Axis2</description>
-    <packaging>jar</packaging>
-
-    <scm>
-        <connection>scm:svn:http://svn.apache.org/repos/asf/axis/axis2/java/transports/trunk/modules/http</connection>
-        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/axis/axis2/java/transports/trunk/modules/http</developerConnection>
-        <url>http://svn.apache.org/viewvc/axis/axis2/java/transports/trunk/modules/http</url>
-    </scm>
-
-    <build>
-        <sourceDirectory>src</sourceDirectory>
-        <testSourceDirectory>test</testSourceDirectory>
-        <plugins>
-          <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-surefire-plugin</artifactId>
-              <configuration>
-                  <systemProperties>
-                      <property>
-                          <name>log4j.configuration</name>
-                          <value>file:../../log4j.properties</value>
-                      </property>
-                  </systemProperties>
-              </configuration>
-          </plugin>
-        </plugins>
-        <resources>
-            <resource>
-                <directory>conf</directory>
-                <excludes>
-                    <exclude>**/*.properties</exclude>
-                </excludes>
-                <filtering>false</filtering>
-            </resource>
-            <resource>
-                <directory>src</directory>
-                <excludes>
-                    <exclude>**/*.java</exclude>
-                </excludes>
-            </resource>
-        </resources>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-transport-http</artifactId>
-            <version>${axis2.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.axis2</groupId>
-            <artifactId>axis2-transport-testkit</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/modules/http/test/org/apache/axis2/transport/http/HttpTransportDescriptionFactory.java b/modules/http/test/org/apache/axis2/transport/http/HttpTransportDescriptionFactory.java
deleted file mode 100644
index d25f564..0000000
--- a/modules/http/test/org/apache/axis2/transport/http/HttpTransportDescriptionFactory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *  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.axis2.transport.http;
-
-import org.apache.axis2.description.Parameter;
-import org.apache.axis2.description.TransportInDescription;
-import org.apache.axis2.description.TransportOutDescription;
-import org.apache.axis2.transport.testkit.axis2.TransportDescriptionFactory;
-import org.apache.axis2.transport.testkit.http.HttpTestEnvironment;
-import org.apache.axis2.transport.testkit.tests.Setup;
-import org.apache.axis2.transport.testkit.util.LifecycleFixTransportListenerProxy;
-
-public class HttpTransportDescriptionFactory implements TransportDescriptionFactory {
-    private int port;
-    
-    @Setup @SuppressWarnings("unused")
-    private void setUp(HttpTestEnvironment env) {
-        port = env.getServerPort();
-    }
-
-    public TransportInDescription createTransportInDescription() throws Exception {
-        TransportInDescription desc = new TransportInDescription("http");
-        desc.setReceiver(new LifecycleFixTransportListenerProxy(new SimpleHTTPServer(), port));
-        desc.addParameter(new Parameter(SimpleHTTPServer.PARAM_PORT, String.valueOf(port)));
-        return desc;
-    }
-
-    public TransportOutDescription createTransportOutDescription() throws Exception {
-        TransportOutDescription desc = new TransportOutDescription("http");
-        desc.setSender(new CommonsHTTPTransportSender());
-        return desc;
-    }
-}
diff --git a/modules/http/test/org/apache/axis2/transport/http/SimpleHTTPServerTest.java b/modules/http/test/org/apache/axis2/transport/http/SimpleHTTPServerTest.java
deleted file mode 100644
index db6d59e..0000000
--- a/modules/http/test/org/apache/axis2/transport/http/SimpleHTTPServerTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *  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.axis2.transport.http;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.apache.axis2.transport.testkit.ManagedTestSuite;
-import org.apache.axis2.transport.testkit.axis2.TransportDescriptionFactory;
-import org.apache.axis2.transport.testkit.http.HttpTransportTestSuiteBuilder;
-
-public class SimpleHTTPServerTest extends TestCase {
-    public static TestSuite suite() throws Exception {
-        ManagedTestSuite suite = new ManagedTestSuite(SimpleHTTPServerTest.class);
-        
-        TransportDescriptionFactory tdf = new HttpTransportDescriptionFactory();
-        
-        new HttpTransportTestSuiteBuilder(suite, tdf).build();
-        
-        return suite;
-    }
-}
diff --git a/pom.xml b/pom.xml
index 26070d3..a326612 100644
--- a/pom.xml
+++ b/pom.xml
@@ -147,7 +147,6 @@
     </scm>
 
     <modules>
-        <module>modules/http</module>
         <module>modules/sms</module>
         <module>modules/all</module>
     </modules>
