Index: src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java
===================================================================
--- src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java	(revision 150181)
+++ src/main/java/org/apache/synapse/core/axis2/Axis2FlexibleMEPClient.java	(working copy)
@@ -228,6 +228,11 @@
                         endpoint.getCharSetEncoding());
             }
 
+            // HTTP Endpoint : use the specified HTTP method
+            if (endpoint.isHTTPEndpoint()) {
+                axisOutMsgCtx.setProperty(Constants.Configuration.HTTP_METHOD, synapseOutMessageContext.getProperty(Constants.Configuration.HTTP_METHOD));
+            }
+
             // add rest request' suffix URI
             String restSuffix = (String) axisOutMsgCtx.getProperty(NhttpConstants.REST_URL_POSTFIX);
             boolean isRest = SynapseConstants.FORMAT_REST.equals(endpoint.getFormat());
Index: src/main/java/org/apache/synapse/endpoints/HTTPEndpoint.java
===================================================================
--- src/main/java/org/apache/synapse/endpoints/HTTPEndpoint.java	(revision 0)
+++ src/main/java/org/apache/synapse/endpoints/HTTPEndpoint.java	(revision 0)
@@ -0,0 +1,145 @@
+/*
+ *  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.synapse.endpoints;
+
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.rest.RESTConstants;
+import org.apache.synapse.util.xpath.SynapseXPath;
+import com.damnhandy.uri.template.UriTemplate;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+public class HTTPEndpoint extends AbstractEndpoint {
+
+    private UriTemplate uriTemplate;
+
+    private String httpMethod;
+    private SynapseXPath httpMethodExpression;
+
+    /*Todo*/
+    /*Do we need HTTP Headers here?*/
+
+
+    public void onFault(MessageContext synCtx) {
+
+        // is this really a fault or a timeout/connection close etc?
+        if (isTimeout(synCtx)) {
+            getContext().onTimeout();
+        } else if (isSuspendFault(synCtx)) {
+            getContext().onFault();
+        }
+
+        // this should be an ignored error if we get here
+        setErrorOnMessage(synCtx, null, null);
+        super.onFault(synCtx);
+    }
+
+    public void onSuccess() {
+        if (getContext() != null) {
+            getContext().onSuccess();
+        }
+    }
+
+    public void send(MessageContext synCtx) {
+        processUrlTemplate(synCtx);
+        processHttpMethod(synCtx);
+        if (getParentEndpoint() == null && !readyToSend()) {
+            // if the this leaf endpoint is too a root endpoint and is in inactive
+            informFailure(synCtx, SynapseConstants.ENDPOINT_ADDRESS_NONE_READY,
+                    "Currently , Address endpoint : " + getContext());
+        } else {
+            super.send(synCtx);
+        }
+    }
+
+    private void processHttpMethod(MessageContext synCtx) {
+        if (httpMethod != null) {
+            super.getDefinition().setHTTPEndpoint(true);
+            if (httpMethod.equalsIgnoreCase(Constants.Configuration.HTTP_METHOD_POST)) {
+                synCtx.setProperty(Constants.Configuration.HTTP_METHOD,
+                        Constants.Configuration.HTTP_METHOD_POST);
+            } else if (httpMethod.equalsIgnoreCase(Constants.Configuration.HTTP_METHOD_GET)) {
+                synCtx.setProperty(Constants.Configuration.HTTP_METHOD,
+                        Constants.Configuration.HTTP_METHOD_GET);
+            } else if (httpMethod.equalsIgnoreCase(Constants.Configuration.HTTP_METHOD_PUT)) {
+                synCtx.setProperty(Constants.Configuration.HTTP_METHOD,
+                        Constants.Configuration.HTTP_METHOD_PUT);
+            } else if (httpMethod.equalsIgnoreCase(Constants.Configuration.HTTP_METHOD_DELETE)) {
+                synCtx.setProperty(Constants.Configuration.HTTP_METHOD,
+                        Constants.Configuration.HTTP_METHOD_DELETE);
+            } else if (httpMethod.equalsIgnoreCase(Constants.Configuration.HTTP_METHOD_HEAD)) {
+                synCtx.setProperty(Constants.Configuration.HTTP_METHOD,
+                        Constants.Configuration.HTTP_METHOD_HEAD);
+            }
+        }
+    }
+
+    private void processUrlTemplate(MessageContext synCtx) {
+        Map<String, Object> variables = new HashMap<String, Object>();
+
+        /*The properties with uri.var.* are only considered for Outbound REST Endpoints*/
+        Set propertySet = synCtx.getPropertyKeySet();
+        for (Object propertyKey : propertySet) {
+            if (propertyKey.toString() != null
+                    && propertyKey.toString().startsWith(RESTConstants.REST_URI_VARIABLE_PREFIX)
+                    && (synCtx.getProperty(propertyKey.toString()) != null)) {
+                variables.put(propertyKey.toString(), synCtx.getProperty(propertyKey.toString()));
+            }
+        }
+        uriTemplate.set(variables);
+        String evaluatedUri = uriTemplate.expand();
+        if (evaluatedUri != null) {
+            synCtx.setTo(new EndpointReference(evaluatedUri));
+            if (super.getDefinition() != null) {
+                super.getDefinition().setAddress(evaluatedUri);
+            }
+        }
+
+
+    }
+
+    public String getHttpMethod() {
+        return httpMethod;
+    }
+
+    public void setHttpMethod(String httpMethod) {
+        this.httpMethod = httpMethod;
+    }
+
+    public UriTemplate getUriTemplate() {
+        return uriTemplate;
+    }
+
+    public SynapseXPath getHttpMethodExpression() {
+        return httpMethodExpression;
+    }
+
+    public void setUriTemplate(UriTemplate uriTemplate) {
+        this.uriTemplate = uriTemplate;
+    }
+
+    public void setHttpMethodExpression(SynapseXPath httpMethodExpression) {
+        this.httpMethodExpression = httpMethodExpression;
+    }
+}
Index: src/main/java/org/apache/synapse/endpoints/EndpointDefinition.java
===================================================================
--- src/main/java/org/apache/synapse/endpoints/EndpointDefinition.java	(revision 150181)
+++ src/main/java/org/apache/synapse/endpoints/EndpointDefinition.java	(working copy)
@@ -99,6 +99,10 @@
      */
     private boolean forceREST = false;
     /**
+     *  HTTP Endpoint
+     */
+    private boolean isHTTPEndpoint = false;
+    /**
      * use MTOM *
      */
     private boolean useMTOM = false;
@@ -567,6 +571,14 @@
         retryDisabledErrorCodes.add(code);
     }
 
+    public boolean isHTTPEndpoint() {
+        return isHTTPEndpoint;
+    }
+
+    public void setHTTPEndpoint(boolean HTTPEndpoint) {
+        isHTTPEndpoint = HTTPEndpoint;
+    }
+
     public String toString() {
         if (leafEndpoint != null) {
             return leafEndpoint.toString();
@@ -603,4 +615,6 @@
     public AspectConfiguration getAspectConfiguration() {
         return this.aspectConfiguration;
     }
+
+
 }
\ No newline at end of file
Index: src/main/java/org/apache/synapse/config/xml/endpoints/HTTPEndpointFactory.java
===================================================================
--- src/main/java/org/apache/synapse/config/xml/endpoints/HTTPEndpointFactory.java	(revision 0)
+++ src/main/java/org/apache/synapse/config/xml/endpoints/HTTPEndpointFactory.java	(revision 0)
@@ -0,0 +1,99 @@
+/*
+ *  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.synapse.config.xml.endpoints;
+
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.config.xml.XMLConfigConstants;
+import org.apache.synapse.endpoints.Endpoint;
+import org.apache.synapse.endpoints.EndpointDefinition;
+import org.apache.synapse.endpoints.HTTPEndpoint;
+import com.damnhandy.uri.template.UriTemplate;
+
+import javax.xml.namespace.QName;
+import java.util.Properties;
+
+public class HTTPEndpointFactory extends DefaultEndpointFactory {
+
+    private static HTTPEndpointFactory instance = new HTTPEndpointFactory();
+
+    public static HTTPEndpointFactory getInstance() {
+        return instance;
+    }
+
+    @Override
+    public EndpointDefinition createEndpointDefinition(OMElement elem) {
+            DefinitionFactory fac = getEndpointDefinitionFactory();
+        EndpointDefinition endpointDefinition;
+        if (fac == null) {
+            fac = new EndpointDefinitionFactory();
+            endpointDefinition = fac.createDefinition(elem);
+        } else{
+            endpointDefinition = fac.createDefinition(elem);
+        }
+        extractSpecificEndpointProperties(endpointDefinition, elem);
+        return endpointDefinition;
+    }
+
+    @Override
+    protected Endpoint createEndpoint(OMElement epConfig, boolean anonymousEndpoint, Properties properties) {
+        HTTPEndpoint httpEndpoint = new HTTPEndpoint();
+        OMAttribute name = epConfig.getAttribute(
+                new QName(XMLConfigConstants.NULL_NAMESPACE, "name"));
+
+        if (name != null) {
+            httpEndpoint.setName(name.getAttributeValue());
+        }
+
+        OMElement httpElement = epConfig.getFirstChildWithName(
+                new QName(SynapseConstants.SYNAPSE_NAMESPACE, "http"));
+
+        if (httpElement != null) {
+            EndpointDefinition definition = createEndpointDefinition(httpElement);
+
+
+            OMAttribute uriTemplateAttr = httpElement.getAttribute(new QName("uri-template"));
+            if (uriTemplateAttr != null) {
+
+
+                    httpEndpoint.setUriTemplate(UriTemplate.fromTemplate(uriTemplateAttr.getAttributeValue()));
+                    // Set the address to the initial template value.
+                    definition.setAddress(uriTemplateAttr.getAttributeValue());
+
+
+            }
+
+
+            httpEndpoint.setDefinition(definition);
+            processAuditStatus(definition, httpEndpoint.getName(), httpElement);
+
+            OMAttribute methodAttr = httpElement.getAttribute(new QName("method"));
+            if (methodAttr != null) {
+                httpEndpoint.setHttpMethod(methodAttr.getAttributeValue());
+            }
+
+        }
+
+        processProperties(httpEndpoint, epConfig);
+
+        return httpEndpoint;
+    }
+}
Index: src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java
===================================================================
--- src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java	(revision 150181)
+++ src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java	(working copy)
@@ -244,6 +244,12 @@
         	return RecipientListEndpointFactory.getInstance();
         }
 
+        OMElement httpElement = configElement.getFirstChildWithName
+                (new QName(SynapseConstants.SYNAPSE_NAMESPACE, "http"));
+        if (httpElement != null) {
+            return HTTPEndpointFactory.getInstance();
+        }
+
 		OMElement classElement = configElement.getFirstChildWithName
 				(new QName(SynapseConstants.SYNAPSE_NAMESPACE, "class"));
 		if (classElement != null) {
Index: src/main/java/org/apache/synapse/config/xml/endpoints/HTTPEndpointSerializer.java
===================================================================
--- src/main/java/org/apache/synapse/config/xml/endpoints/HTTPEndpointSerializer.java	(revision 0)
+++ src/main/java/org/apache/synapse/config/xml/endpoints/HTTPEndpointSerializer.java	(revision 0)
@@ -0,0 +1,71 @@
+/*
+ *  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.synapse.config.xml.endpoints;
+
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.synapse.SynapseConstants;
+import org.apache.synapse.endpoints.Endpoint;
+import org.apache.synapse.endpoints.EndpointDefinition;
+import org.apache.synapse.endpoints.HTTPEndpoint;
+
+public class HTTPEndpointSerializer extends DefaultEndpointSerializer {
+    @Override
+    protected OMElement serializeEndpoint(Endpoint endpoint) {
+        if (!(endpoint instanceof HTTPEndpoint)) {
+            handleException("Invalid endpoint type.");
+        }
+
+        fac = OMAbstractFactory.getOMFactory();
+        OMElement endpointElement
+                = fac.createOMElement("endpoint", SynapseConstants.SYNAPSE_OMNAMESPACE);
+        HTTPEndpoint httpEndpoint = (HTTPEndpoint) endpoint;
+        EndpointDefinition epDefinitionHttp = httpEndpoint.getDefinition();
+        OMElement httpEPElement = serializeEndpointDefinition(epDefinitionHttp);
+
+        if (httpEndpoint.getHttpMethod() != null) {
+            httpEPElement.addAttribute(
+                    fac.createOMAttribute("method", null, httpEndpoint.getHttpMethod()));
+        }
+
+        if (httpEndpoint.getUriTemplate() != null) {
+            httpEPElement.addAttribute(
+                    fac.createOMAttribute("uri-template", null, httpEndpoint.getUriTemplate().toString()));
+        }
+
+        endpointElement.addChild(httpEPElement);
+
+        serializeCommonAttributes(endpoint, endpointElement);
+
+        return endpointElement;
+    }
+
+    @Override
+    public OMElement serializeEndpointDefinition(EndpointDefinition endpointDefinition) {
+
+        OMElement element = fac.createOMElement("http", SynapseConstants.SYNAPSE_OMNAMESPACE);
+        EndpointDefinitionSerializer serializer = new EndpointDefinitionSerializer();
+        serializer.serializeEndpointDefinition(endpointDefinition, element);
+
+        serializeSpecificEndpointProperties(endpointDefinition, element);
+        return element;
+    }
+}
Index: src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java
===================================================================
--- src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java	(revision 150181)
+++ src/main/java/org/apache/synapse/config/xml/endpoints/EndpointSerializer.java	(working copy)
@@ -138,8 +138,10 @@
             return new TemplateEndpointSerializer();
         } else if(endpoint instanceof RecipientListEndpoint){
         	return new RecipientListEndpointSerializer();
-        } else if(endpoint instanceof ClassEndpoint){
-        	return new ClassEndpointSerializer();
+        } else if (endpoint instanceof HTTPEndpoint) {
+            return new HTTPEndpointSerializer();
+        } else if (endpoint instanceof ClassEndpoint) {
+            return new ClassEndpointSerializer();
         }
 
         throw new SynapseException("Serializer for endpoint " +
Index: pom.xml
===================================================================
--- pom.xml	(revision 150181)
+++ pom.xml	(working copy)
@@ -19,9 +19,9 @@
   -->
 
 <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">
+        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.synapse</groupId>
@@ -183,7 +183,7 @@
             </plugin>
         </plugins>
     </build>
-    
+
     <dependencies>
         <dependency>
             <groupId>org.wso2.securevault</groupId>
@@ -221,7 +221,7 @@
             <artifactId>antlr-runtime</artifactId>
             <version>3.4</version>
         </dependency>
-        
+
         <!-- This is used by the CacheMediator. TODO: since axis2-saaj is based on
              Axiom, it should not be necessary to rely on SAAJ and we should try
              to eliminate this dependency. -->
@@ -229,12 +229,17 @@
             <groupId>org.apache.axis2</groupId>
             <artifactId>axis2-saaj</artifactId>
         </dependency>
-	<dependency>
-	    <groupId>org.wso2.uri.template</groupId>
-	    <artifactId>wso2-uri-templates</artifactId>
-	    <version>1.6.2</version>
-	</dependency>
         <dependency>
+            <groupId>org.wso2.uri.template</groupId>
+            <artifactId>wso2-uri-templates</artifactId>
+            <version>1.6.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.damnhandy</groupId>
+            <artifactId>handy-uri-templates</artifactId>
+            <version>1.1.7</version>
+        </dependency>
+        <dependency>
             <groupId>commons-lang</groupId>
             <artifactId>commons-lang</artifactId>
             <version>2.3</version>
