Fixing https://issues.apache.org/jira/browse/STRATOS-910 - this needs to be properly tested with latest Kubernetes binaries.
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
index 8837406..a510e41 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
@@ -43,12 +43,12 @@
  */
 public class ContainerClusterContextToKubernetesContainer implements Function<ContainerClusterContext, Container> {
 
-    private static final Log log = LogFactory.getLog(ContainerClusterContextToKubernetesContainer.class);
+    private static final Log LOG = LogFactory.getLog(ContainerClusterContextToKubernetesContainer.class);
     private FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance();
 
     @Override
-    public Container apply(ContainerClusterContext memberContext) {
-        String clusterId = memberContext.getClusterId();
+    public Container apply(ContainerClusterContext context) {
+        String clusterId = context.getClusterId();
         ClusterContext clusterContext = dataHolder.getClusterContext(clusterId);
 
         Container container = new Container();
@@ -57,7 +57,7 @@
         Cartridge cartridge = dataHolder.getCartridge(clusterContext.getCartridgeType());
 
         if (cartridge == null) {
-            log.error("Cannot find a Cartridge of type : " + clusterContext.getCartridgeType());
+            LOG.error("Container extraction failed from "+context+". Cannot find a Cartridge of type : " + clusterContext.getCartridgeType());
             return null;
         }
 
@@ -65,7 +65,7 @@
 
         container.setPorts(getPorts(clusterContext, cartridge));
 
-        container.setEnv(getEnvironmentVars(memberContext, clusterContext));
+        container.setEnv(getEnvironmentVars(context, clusterContext));
 
         return container;
     }
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
index 61fe0ee..610f23e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
@@ -18,9 +18,16 @@
  */
 package org.apache.stratos.cloud.controller.functions;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.pojo.Cartridge;
 import org.apache.stratos.cloud.controller.pojo.ClusterContext;
 import org.apache.stratos.cloud.controller.pojo.ContainerClusterContext;
 import org.apache.stratos.cloud.controller.pojo.KubernetesClusterContext;
+import org.apache.stratos.cloud.controller.pojo.PortMapping;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.common.constants.StratosConstants;
@@ -30,35 +37,55 @@
 import com.google.common.base.Function;
 
 /**
- * Is responsible for converting a {@link ContainerClusterContext} object to a Kubernetes
- * {@link Service} Object.
+ * Is responsible for converting a {@link ContainerClusterContext} object to a list of Kubernetes
+ * {@link Service} Objects.
  */
-public class ContainerClusterContextToKubernetesService implements Function<ContainerClusterContext, Service> {
+public class ContainerClusterContextToKubernetesService implements Function<ContainerClusterContext, List<Service>> {
 
+    private static final Log LOG = LogFactory.getLog(ContainerClusterContextToKubernetesService.class);
     private FasterLookUpDataHolder dataHolder = FasterLookUpDataHolder.getInstance();
 
     @Override
-    public Service apply(ContainerClusterContext memberContext) {
+    public List<Service> apply(ContainerClusterContext context) {
 
-        String clusterId = memberContext.getClusterId();
+        List<Service> services = new ArrayList<Service>();
+        String clusterId = context.getClusterId();
         ClusterContext clusterContext = dataHolder.getClusterContext(clusterId);
+        
+        Cartridge cartridge = dataHolder.getCartridge(clusterContext.getCartridgeType());
+
+        if (cartridge == null) {
+            LOG.error("Cannot find a Cartridge of type : " + clusterContext.getCartridgeType());
+            return services;
+        }
 
         String kubernetesClusterId = CloudControllerUtil.getProperty(
                 clusterContext.getProperties(), StratosConstants.KUBERNETES_CLUSTER_ID);
         KubernetesClusterContext kubClusterContext = dataHolder
                 .getKubernetesClusterContext(kubernetesClusterId);
 
-        Service service = new Service();
-        service.setApiVersion("v1beta1");
-        service.setId(CloudControllerUtil.getCompatibleId(clusterId));
-        service.setKind("Service");
-        int hostPort = kubClusterContext.getAnAvailableHostPort();
-        service.setPort(hostPort);
-        Selector selector = new Selector();
-        selector.setName(clusterId);
-        service.setSelector(selector);
+        // For each Cartridge port, we generate a Kubernetes service proxy
+        for (PortMapping portMapping : cartridge.getPortMappings()) {
+            // gets the container port
+            String containerPort = portMapping.getPort();
+            
+            // build the Service
+            Service service = new Service();
+            service.setApiVersion("v1beta1");
+            // id of the service generated using "clusterId-containerPort"
+            service.setId(CloudControllerUtil.getCompatibleId(clusterId+"-"+containerPort));
+            service.setKind("Service");
+            service.setContainerPort(containerPort);
+            int hostPort = kubClusterContext.getAnAvailableHostPort();
+            service.setPort(hostPort);
+            Selector selector = new Selector();
+            selector.setName(clusterId);
+            service.setSelector(selector);
+            
+            services.add(service);
+        }
 
-        return service;
+        return services;
     }
 
 }
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 227790a..21684fd 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -1348,25 +1348,31 @@
 						+ controller + " via Kubernetes layer.");
 			}
 			
-			// secondly let's create a kubernetes service proxy to load balance these containers
+			// secondly let's create a kubernetes service proxies to load balance these containers
 			ContainerClusterContextToKubernetesService serviceFunction = new ContainerClusterContextToKubernetesService();
-			Service service = serviceFunction.apply(containerClusterContext);
+			List<Service> services = serviceFunction.apply(containerClusterContext);
 			
-			if (LOG.isDebugEnabled()) {
-				LOG.debug("Cloud Controller is delegating request to start a service "+service+
-						" for "+ containerClusterContext + " to Kubernetes layer.");
+			if (services.isEmpty()) {
+			    LOG.error("No Kubernetes Service Proxy generated for "+containerClusterContext);
 			}
 			
-			kubApi.createService(service);
+			for (Service service : services) {
+			    if (LOG.isDebugEnabled()) {
+			        LOG.debug("Cloud Controller is delegating request to start a service "+service+
+			                " for "+ containerClusterContext + " to Kubernetes layer.");
+			    }
+			    
+			    kubApi.createService(service);
+			    // add service port into the context
+			    updateAllocatedServiceHostPortProperty(ctxt, service.getContainerPort(), service.getPort());
+			    
+			    if (LOG.isDebugEnabled()) {
+			        LOG.debug("Cloud Controller successfully started the service "
+			                + service + " via Kubernetes layer.");
+			    }
+            }
 			
-			// set host port and update
-			ctxt.addProperty(StratosConstants.ALLOCATED_SERVICE_HOST_PORT, service.getPort());
-			dataHolder.addClusterContext(ctxt);
 			
-			if (LOG.isDebugEnabled()) {
-				LOG.debug("Cloud Controller successfully started the service "
-						+ controller + " via Kubernetes layer.");
-			}
 			
 			// create a label query
 			Label l = new Label();
@@ -1409,10 +1415,11 @@
                 MemberContext context = podToMemberContextFunc.apply(pod);
                 context.setCartridgeType(cartridgeType);
                 context.setClusterId(clusterId);
-                
-                context.setProperties(CloudControllerUtil.addProperty(context
-                        .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
-                        String.valueOf(service.getPort())));
+                Object portMap = CloudControllerUtil.getPropertyObject(ctxt.getProperties(), 
+                        StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
+                @SuppressWarnings("unchecked")
+                List<PortMapping> map = (List<PortMapping>) portMap;
+                context.setPortToServicePortMappings(map != null ? map.toArray(new PortMapping[0]) : new PortMapping[0]);
                 
                 dataHolder.addMemberContext(context);
                 
@@ -1440,7 +1447,26 @@
         }
 	}
 
-	private String validateProperty(String property, ClusterContext ctxt) {
+	@SuppressWarnings("unchecked")
+    private void updateAllocatedServiceHostPortProperty(ClusterContext ctxt, String containerPort, int servicePort) {
+	    List<PortMapping> ports;
+	    Object value;
+	    String key = StratosConstants.ALLOCATED_SERVICE_HOST_PORT;
+	    if ((value = CloudControllerUtil.getPropertyObject(ctxt.getProperties(), key)) != null) {
+	        ports = (List<PortMapping>) value;
+	    } else {
+	        ports = new ArrayList<PortMapping>();
+	    }
+	    PortMapping mapping = new PortMapping();
+	    mapping.setPort(containerPort);
+	    mapping.setProxyPort(String.valueOf(servicePort));
+	    ports.add(mapping);
+	    ctxt.addProperty(key, ports);
+	    
+        dataHolder.addClusterContext(ctxt);
+    }
+
+    private String validateProperty(String property, ClusterContext ctxt) {
 
 	    String propVal = CloudControllerUtil.getProperty(ctxt.getProperties(), property);
         handleNullObject(propVal, "Property validation failed. Cannot find '"+property+"' in " + ctxt);
@@ -1492,15 +1518,24 @@
         KubernetesClusterContext kubClusterContext = dataHolder.getKubernetesClusterContext(kubernetesClusterId);
 		handleNullObject(kubClusterContext, "Kubernetes units termination failed. Cannot find a matching Kubernetes Cluster for cluster id: " 
                             +kubernetesClusterId);
+		
+		Object portMap = CloudControllerUtil.getPropertyObject(ctxt.getProperties(), 
+                StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
+        @SuppressWarnings("unchecked")
+        List<PortMapping> portMappings = (List<PortMapping>) portMap;
 
 		KubernetesApiClient kubApi = kubClusterContext.getKubApi();
-		// delete the service
-		try {
-			kubApi.deleteService(CloudControllerUtil.getCompatibleId(clusterId));
-		} catch (KubernetesClientException e) {
-			// we're not going to throw this error, but proceed with other deletions
-			LOG.error("Failed to delete Kubernetes service with id: "+clusterId, e);
-		}
+		
+		for (PortMapping portMapping : portMappings) {
+		    // delete the service
+		    String id = CloudControllerUtil.getCompatibleId(clusterId+"-"+portMapping.getPort());
+		    try {
+                kubApi.deleteService(id);
+		    } catch (KubernetesClientException e) {
+		        // we're not going to throw this error, but proceed with other deletions
+		        LOG.error("Failed to delete Kubernetes service with id: "+id, e);
+		    }
+        }
 		
 		// set replicas=0 for the replication controller
 		try {
@@ -1541,15 +1576,18 @@
 			throw new InvalidClusterException(msg, e);
 		}
 		
-		String allocatedPort = CloudControllerUtil.getProperty(ctxt.getProperties(), 
-				StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
+		List<Integer> allocatedPorts = new ArrayList<Integer>();
 		
-		if (allocatedPort != null) {
-			kubClusterContext.deallocateHostPort(Integer
-					.parseInt(allocatedPort));
+		for (PortMapping portMapping : portMappings) {
+		    if (portMapping.getProxyPort() != null) {
+		        allocatedPorts.add(Integer.parseInt(portMapping.getProxyPort()));
+		    }
+        }
+		
+		if (!allocatedPorts.isEmpty()) {
+			kubClusterContext.deallocateHostPorts(allocatedPorts);
 		} else {
-			LOG.warn("Host port dealloacation failed due to a missing property: "
-					+ StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
+			LOG.warn("No allocated Service host ports found.");
 		}
 		
 		List<MemberContext> membersToBeRemoved = dataHolder.getMemberContextsOfClusterId(clusterId);
@@ -1640,7 +1678,7 @@
             
             if (LOG.isDebugEnabled()) {
                 
-                LOG.debug(String.format("Pods created : %s for cluster : %s",allPods.length, clusterId));
+                LOG.debug(String.format("Pods count : %s for cluster : %s",allPods.length, clusterId));
             }
             
             List<MemberContext> memberContexts = new ArrayList<MemberContext>();
@@ -1656,10 +1694,11 @@
                     context.setCartridgeType(cartridgeType);
                     context.setClusterId(clusterId);
                     
-                    context.setProperties(CloudControllerUtil.addProperty(context
-                            .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
-                            CloudControllerUtil.getProperty(ctxt.getProperties(), 
-                                    StratosConstants.ALLOCATED_SERVICE_HOST_PORT)));
+                    Object portMap = CloudControllerUtil.getPropertyObject(ctxt.getProperties(), 
+                            StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
+                    @SuppressWarnings("unchecked")
+                    List<PortMapping> map = (List<PortMapping>) portMap;
+                    context.setPortToServicePortMappings(map != null ? map.toArray(new PortMapping[0]) : new PortMapping[0]);
                     
                     // wait till Pod status turns to running and send member spawned.
                     ScheduledThreadExecutor exec = ScheduledThreadExecutor.getInstance();
@@ -1694,7 +1733,7 @@
             // persist in registry
             persist();
 
-            LOG.info("Kubernetes entities are successfully starting up. "+memberContexts);
+            LOG.info("Kubernetes entities are successfully updated. "+memberContexts);
 
             return memberContexts.toArray(new MemberContext[0]);
 
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterContext.java
index cb48739..0755465 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/ClusterContext.java
@@ -122,7 +122,7 @@
 		this.properties = properties;
 	}
 	
-	public void addProperty(String key, int value) {
+	public void addProperty(String key, Object value) {
 		this.properties.put(key, value);
 	}
 	
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java
index 0976eb0..307e53f 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java
@@ -99,8 +99,8 @@
 				ports = portBoundaries();
 			} catch (Exception ignore) {
 				// on an exception, we use the default range
-				log.warn("Unable to find a port range, hence using the default. [4000-5000]"
-						+ " Exception");
+				log.warn("Unable to find a port range, hence using the default: [4000-5000]."
+						+ " Exception: "+ignore.getMessage());
 			}
 
 			// populate the ports
@@ -115,6 +115,14 @@
 			availableHostPorts.add(port);
 		}
 	}
+	
+	public void deallocateHostPorts (List<Integer> ports) {
+	    for (Integer port : ports) {
+	        if (!availableHostPorts.contains(port)) {
+	            availableHostPorts.add(port);
+	        }
+        }
+    }
 
 	private void populatePorts(int i, int j) {
 
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
index 72b4914..8818bea 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/MemberContext.java
@@ -21,6 +21,8 @@
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 
 import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * Holds information about a Member.
@@ -53,6 +55,8 @@
     private String lbClusterId;
     //network partition id
     private String networkPartitionId;
+    // port to kubernetes proxy port mappings
+    private PortMapping[] portToServicePortMappings;
 
     private Properties properties;
     
@@ -70,6 +74,7 @@
     private void init() {
         this.properties = new Properties();
         this.properties.setProperties(new Property[0]);
+        this.setPortToServicePortMappings(new PortMapping[0]);
     }
     
     public String getMemberId() {
@@ -167,28 +172,37 @@
 
 	@Override
 	public boolean equals(Object obj) {
-		if (this == obj)
+		if (this == obj) {
 			return true;
-		if (obj == null)
+		}
+		if (obj == null) {
 			return false;
-		if (getClass() != obj.getClass())
+		}
+		if (getClass() != obj.getClass()) {
 			return false;
+		}
 		MemberContext other = (MemberContext) obj;
 		if (clusterId == null) {
-			if (other.clusterId != null)
+			if (other.clusterId != null) {
 				return false;
-		} else if (!clusterId.equals(other.clusterId))
+			}
+		} else if (!clusterId.equals(other.clusterId)) {
 			return false;
+		}
 		if (memberId == null) {
-			if (other.memberId != null)
+			if (other.memberId != null) {
 				return false;
-		} else if (!memberId.equals(other.memberId))
+			}
+		} else if (!memberId.equals(other.memberId)) {
 			return false;
+		}
 		if (nodeId == null) {
-			if (other.nodeId != null)
+			if (other.nodeId != null) {
 				return false;
-		} else if (!nodeId.equals(other.nodeId))
+			}
+		} else if (!nodeId.equals(other.nodeId)) {
 			return false;
+		}
 		return true;
 	}
 
@@ -210,12 +224,20 @@
 
     @Override
     public String toString() {
-        return "MemberContext [memberId=" + memberId + ", nodeId=" + nodeId + ", instanceId="
-                + instanceId + ", clusterId=" + clusterId + ", partition=" + partition
-                + ", cartridgeType=" + cartridgeType + ", privateIpAddress=" + privateIpAddress
-                + ", publicIpAddress=" + publicIpAddress + ", allocatedIpAddress="
-                + allocatedIpAddress + ", initTime=" + initTime + ", lbClusterId=" + lbClusterId
-                + ", networkPartitionId=" + networkPartitionId + ", properties=" + properties + "]";
+        return "MemberContext [memberId=" + memberId + ", nodeId=" + nodeId + ", instanceId=" + instanceId
+                + ", clusterId=" + clusterId + ", partition=" + partition + ", cartridgeType=" + cartridgeType
+                + ", privateIpAddress=" + privateIpAddress + ", publicIpAddress=" + publicIpAddress
+                + ", allocatedIpAddress=" + allocatedIpAddress + ", initTime=" + initTime + ", lbClusterId="
+                + lbClusterId + ", networkPartitionId=" + networkPartitionId + ", properties=" + properties
+                + ", portToServicePortMappings=" + portToServicePortMappings + "]";
+    }
+
+    public PortMapping[] getPortToServicePortMappings() {
+        return portToServicePortMappings;
+    }
+
+    public void setPortToServicePortMappings(PortMapping[] portToServicePortMappings) {
+        this.portToServicePortMappings = portToServicePortMappings;
     }
     
 }
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/PortMapping.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/PortMapping.java
index 63e222b..3aa20ed 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/PortMapping.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/PortMapping.java
@@ -66,4 +66,29 @@
         return "Protocol: " + protocol + ", Port: " + port + ", Proxy Port: " + proxyPort;
     }
 
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((port == null) ? 0 : port.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        PortMapping other = (PortMapping) obj;
+        if (port == null) {
+            if (other.port != null)
+                return false;
+        } else if (!port.equals(other.port))
+            return false;
+        return true;
+    }
+
 }
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
index aa98e5d..bb06a72 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cloud.controller.topology;
 
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -38,6 +39,8 @@
 import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent;
 import org.apache.stratos.messaging.util.Constants;
 
+import edu.emory.mathcs.backport.java.util.Arrays;
+
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -259,11 +262,13 @@
 			member.setProperties(CloudControllerUtil.toJavaUtilProperties(context.getProperties()));
             try {
                 // Update port mappings with generated service proxy port
-                // TODO: Need to properly fix with the latest Kubernetes version
-                String serviceHostPortStr = CloudControllerUtil.getProperty(context.getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
-                if(StringUtils.isEmpty(serviceHostPortStr)) {
+                PortMapping[] portToServicePorts = context.getPortToServicePortMappings(); 
+                if(ArrayUtils.isEmpty(portToServicePorts)) {
                     log.warn("Kubernetes service host port not found for member: [member-id] " + memberId);
                 }
+                
+                @SuppressWarnings("unchecked")
+                List<PortMapping> portToServicePortList = (List<PortMapping>) Arrays.asList(portToServicePorts);
 
                 Cartridge cartridge = FasterLookUpDataHolder.getInstance().
                         getCartridge(serviceName);
@@ -271,9 +276,10 @@
                 Port port;
                 // Adding ports to the member
                 for (PortMapping portMapping : portMappings) {
-                    if (cluster.isKubernetesCluster() && (StringUtils.isNotEmpty(serviceHostPortStr))) {
+                    if (cluster.isKubernetesCluster() && !portToServicePortList.isEmpty() && portToServicePortList.contains(portMapping)) {
+                        PortMapping portToServicePort = portToServicePortList.get(portToServicePortList.indexOf(portMapping));
                         port = new Port(portMapping.getProtocol(),
-                                Integer.parseInt(serviceHostPortStr),
+                                Integer.parseInt(portToServicePort.getProxyPort()),
                                 Integer.parseInt(portMapping.getProxyPort()));
                         member.addPort(port);
                     } else {
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
index fe2493d..5834428 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
@@ -306,6 +306,21 @@
     	return null;
     }
 	
+	public static Object getPropertyObject(Properties properties, String key) {
+        if (key != null && properties != null) {
+            for (Iterator<Entry<Object, Object>> iterator = properties.entrySet().iterator(); iterator.hasNext();) {
+                Entry<Object, Object> type = (Entry<Object, Object>) iterator.next();
+                String propName = type.getKey().toString();
+                Object propValue = type.getValue();
+                if (key.equals(propName)) {
+                    return propValue;
+                }
+            }
+        }
+        
+        return null;
+    }
+	
 	public static String getProperty(org.apache.stratos.cloud.controller.pojo.Properties properties, String key) {
 		Properties props = toJavaUtilProperties(properties);
 		
@@ -397,10 +412,10 @@
 		return "[" +partitionStr+ "]";
 	}
 	
-	public static String getCompatibleId(String clusterId) {
-		if (clusterId.indexOf('.') != -1) {
-			clusterId = clusterId.replace('.', '-');
+	public static String getCompatibleId(String id) {
+		if (id.indexOf('.') != -1) {
+			id = id.replace('.', '-');
 		}
-		return clusterId;
+		return id;
 	}
 }
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
index 95ff6e3..08fbbd6 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/constants/StratosConstants.java
@@ -152,6 +152,7 @@
     public static final String KUBERNETES_MIN_REPLICAS = "KUBERNETES_REPLICAS_MIN";
     public static final String KUBERNETES_MAX_REPLICAS = "KUBERNETES_REPLICAS_MAX";
     public static final String KUBERNETES_PORT_RANGE = "KUBERNETES_PORT_RANGE";
+    // value of following property is a List<PortMapping>
     public static final String ALLOCATED_SERVICE_HOST_PORT = "ALLOCATED_SERVICE_HOST_PORT";
     
     //drools related constants
diff --git a/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl b/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
index 26ecead..9416746 100644
--- a/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
+++ b/service-stubs/org.apache.stratos.cloud.controller.service.stub/src/main/resources/CloudControllerService.wsdl
@@ -1,4 +1,4 @@
-<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://impl.controller.cloud.stratos.apache.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ax228="http://util.java/xsd" xmlns:ax220="http://exception.controller.cloud.stratos.apache.org/xsd" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ax222="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" xmlns:ax223="http://pojo.controller.cloud.stratos.apache.org/xsd" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://impl.controller.cloud.stratos.apache.org">
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns="http://impl.controller.cloud.stratos.apache.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ax229="http://util.java/xsd" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ax221="http://exception.controller.cloud.stratos.apache.org/xsd" xmlns:ax223="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:ax224="http://pojo.controller.cloud.stratos.apache.org/xsd" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://impl.controller.cloud.stratos.apache.org">
     <wsdl:documentation>CloudControllerService</wsdl:documentation>
     <wsdl:types>
         <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://util.java/xsd">
@@ -53,21 +53,21 @@
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
-        <xs:schema xmlns:ax221="http://exception.controller.cloud.stratos.apache.org/xsd" xmlns:ax227="http://pojo.controller.cloud.stratos.apache.org/xsd" xmlns:ax225="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.controller.cloud.stratos.apache.org">
+        <xs:schema xmlns:ax228="http://pojo.controller.cloud.stratos.apache.org/xsd" xmlns:ax222="http://exception.controller.cloud.stratos.apache.org/xsd" xmlns:ax226="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://impl.controller.cloud.stratos.apache.org">
             <xs:import namespace="http://exception.controller.cloud.stratos.apache.org/xsd"></xs:import>
             <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"></xs:import>
             <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"></xs:import>
             <xs:element name="CloudControllerServiceInvalidPartitionException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidPartitionException" nillable="true" type="ax220:InvalidPartitionException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidPartitionException" nillable="true" type="ax221:InvalidPartitionException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="validatePartition">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"></xs:element>
+                        <xs:element minOccurs="0" name="partition" nillable="true" type="ax223:Partition"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -81,7 +81,7 @@
             <xs:element name="CloudControllerServiceInvalidCartridgeTypeException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidCartridgeTypeException" nillable="true" type="ax220:InvalidCartridgeTypeException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidCartridgeTypeException" nillable="true" type="ax221:InvalidCartridgeTypeException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -89,7 +89,7 @@
                 <xs:complexType>
                     <xs:sequence>
                         <xs:element minOccurs="0" name="cartridgeType" nillable="true" type="xs:string"></xs:element>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="partitions" nillable="true" type="ax222:Partition"></xs:element>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="partitions" nillable="true" type="ax223:Partition"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -103,7 +103,7 @@
             <xs:element name="CloudControllerServiceUnregisteredCartridgeException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="UnregisteredCartridgeException" nillable="true" type="ax220:UnregisteredCartridgeException"></xs:element>
+                        <xs:element minOccurs="0" name="UnregisteredCartridgeException" nillable="true" type="ax221:UnregisteredCartridgeException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -118,14 +118,14 @@
             <xs:element name="updateContainersResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"></xs:element>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax224:MemberContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceUnregisteredClusterException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="UnregisteredClusterException" nillable="true" type="ax220:UnregisteredClusterException"></xs:element>
+                        <xs:element minOccurs="0" name="UnregisteredClusterException" nillable="true" type="ax221:UnregisteredClusterException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -153,7 +153,7 @@
             <xs:element name="CloudControllerServiceInvalidMemberException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidMemberException" nillable="true" type="ax220:InvalidMemberException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidMemberException" nillable="true" type="ax221:InvalidMemberException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -167,7 +167,7 @@
             <xs:element name="CloudControllerServiceMemberTerminationFailedException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="MemberTerminationFailedException" nillable="true" type="ax220:MemberTerminationFailedException"></xs:element>
+                        <xs:element minOccurs="0" name="MemberTerminationFailedException" nillable="true" type="ax221:MemberTerminationFailedException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -178,10 +178,17 @@
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
+            <xs:element name="terminateContainerResponse">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax224:MemberContext"></xs:element>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
             <xs:element name="CloudControllerServiceInvalidClusterException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidClusterException" nillable="true" type="ax220:InvalidClusterException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidClusterException" nillable="true" type="ax221:InvalidClusterException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -199,45 +206,52 @@
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
+            <xs:element name="terminateAllContainersResponse">
+                <xs:complexType>
+                    <xs:sequence>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax224:MemberContext"></xs:element>
+                    </xs:sequence>
+                </xs:complexType>
+            </xs:element>
             <xs:element name="CloudControllerServiceInvalidIaasProviderException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidIaasProviderException" nillable="true" type="ax220:InvalidIaasProviderException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidIaasProviderException" nillable="true" type="ax221:InvalidIaasProviderException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startInstance">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="memberContext" nillable="true" type="ax223:MemberContext"></xs:element>
+                        <xs:element minOccurs="0" name="memberContext" nillable="true" type="ax224:MemberContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startInstanceResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"></xs:element>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax224:MemberContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startContainers">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="containerClusterContext" nillable="true" type="ax223:ContainerClusterContext"></xs:element>
+                        <xs:element minOccurs="0" name="containerClusterContext" nillable="true" type="ax224:ContainerClusterContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="startContainersResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax223:MemberContext"></xs:element>
+                        <xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="ax224:MemberContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="registerService">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="registrant" nillable="true" type="ax223:Registrant"></xs:element>
+                        <xs:element minOccurs="0" name="registrant" nillable="true" type="ax224:Registrant"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -270,7 +284,7 @@
             <xs:element name="getClusterContextResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:ClusterContext"></xs:element>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax224:ClusterContext"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
@@ -284,31 +298,31 @@
             <xs:element name="getCartridgeInfoResponse">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="return" nillable="true" type="ax223:CartridgeInfo"></xs:element>
+                        <xs:element minOccurs="0" name="return" nillable="true" type="ax224:CartridgeInfo"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="CloudControllerServiceInvalidCartridgeDefinitionException">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="InvalidCartridgeDefinitionException" nillable="true" type="ax220:InvalidCartridgeDefinitionException"></xs:element>
+                        <xs:element minOccurs="0" name="InvalidCartridgeDefinitionException" nillable="true" type="ax221:InvalidCartridgeDefinitionException"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
             <xs:element name="deployCartridgeDefinition">
                 <xs:complexType>
                     <xs:sequence>
-                        <xs:element minOccurs="0" name="cartridgeConfig" nillable="true" type="ax223:CartridgeConfig"></xs:element>
+                        <xs:element minOccurs="0" name="cartridgeConfig" nillable="true" type="ax224:CartridgeConfig"></xs:element>
                     </xs:sequence>
                 </xs:complexType>
             </xs:element>
         </xs:schema>
-        <xs:schema xmlns:ax229="http://util.java/xsd" xmlns:ax226="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://pojo.controller.cloud.stratos.apache.org/xsd">
+        <xs:schema xmlns:ax230="http://util.java/xsd" xmlns:ax227="http://partition.deployment.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://pojo.controller.cloud.stratos.apache.org/xsd">
             <xs:import namespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd"></xs:import>
             <xs:import namespace="http://util.java/xsd"></xs:import>
             <xs:complexType name="Properties">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax224:Property"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Property">
@@ -328,16 +342,24 @@
                     <xs:element minOccurs="0" name="memberId" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="networkPartitionId" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="nodeId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="partition" nillable="true" type="ax222:Partition"></xs:element>
+                    <xs:element minOccurs="0" name="partition" nillable="true" type="ax223:Partition"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portToServicePortMappings" nillable="true" type="ax224:PortMapping"></xs:element>
                     <xs:element minOccurs="0" name="privateIpAddress" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"></xs:element>
                     <xs:element minOccurs="0" name="publicIpAddress" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
+            <xs:complexType name="PortMapping">
+                <xs:sequence>
+                    <xs:element minOccurs="0" name="port" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="protocol" nillable="true" type="xs:string"></xs:element>
+                    <xs:element minOccurs="0" name="proxyPort" nillable="true" type="xs:string"></xs:element>
+                </xs:sequence>
+            </xs:complexType>
             <xs:complexType name="ContainerClusterContext">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="clusterId" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Registrant">
@@ -348,15 +370,15 @@
                     <xs:element minOccurs="0" name="deploymentPolicyName" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax224:Persistence"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"></xs:element>
                     <xs:element minOccurs="0" name="tenantRange" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Persistence">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="persistanceRequired" type="xs:boolean"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax224:Volume"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="Volume">
@@ -378,15 +400,15 @@
                     <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="lbCluster" type="xs:boolean"></xs:element>
                     <xs:element minOccurs="0" name="payload" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax229:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax230:Properties"></xs:element>
                     <xs:element minOccurs="0" name="timeoutInMillis" type="xs:long"></xs:element>
                     <xs:element minOccurs="0" name="volumeRequired" type="xs:boolean"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax223:Volume"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="volumes" nillable="true" type="ax224:Volume"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="CartridgeInfo">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="appTypes" nillable="true" type="ax223:AppType"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="appTypes" nillable="true" type="ax224:AppType"></xs:element>
                     <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"></xs:element>
@@ -395,11 +417,11 @@
                     <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="isPublic" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"></xs:element>
+                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax224:LoadbalancerConfig"></xs:element>
                     <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax223:Property"></xs:element>
+                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax224:Persistence"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax224:PortMapping"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" nillable="true" type="ax224:Property"></xs:element>
                     <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
@@ -414,21 +436,14 @@
             </xs:complexType>
             <xs:complexType name="LoadbalancerConfig">
                 <xs:sequence>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"></xs:element>
                     <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
-            <xs:complexType name="PortMapping">
-                <xs:sequence>
-                    <xs:element minOccurs="0" name="port" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="protocol" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="proxyPort" nillable="true" type="xs:string"></xs:element>
-                </xs:sequence>
-            </xs:complexType>
             <xs:complexType name="CartridgeConfig">
                 <xs:sequence>
                     <xs:element minOccurs="0" name="baseDir" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="container" nillable="true" type="ax223:Container"></xs:element>
+                    <xs:element minOccurs="0" name="container" nillable="true" type="ax224:Container"></xs:element>
                     <xs:element minOccurs="0" name="defaultAutoscalingPolicy" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="defaultDeploymentPolicy" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="deployerType" nillable="true" type="xs:string"></xs:element>
@@ -436,13 +451,13 @@
                     <xs:element minOccurs="0" name="description" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="displayName" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="hostName" nillable="true" type="xs:string"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="iaasConfigs" nillable="true" type="ax223:IaasConfig"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="iaasConfigs" nillable="true" type="ax224:IaasConfig"></xs:element>
                     <xs:element minOccurs="0" name="isPublic" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax223:LoadbalancerConfig"></xs:element>
+                    <xs:element minOccurs="0" name="lbConfig" nillable="true" type="ax224:LoadbalancerConfig"></xs:element>
                     <xs:element minOccurs="0" name="multiTenant" type="xs:boolean"></xs:element>
-                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax223:Persistence"></xs:element>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax223:PortMapping"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="persistence" nillable="true" type="ax224:Persistence"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="portMappings" nillable="true" type="ax224:PortMapping"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"></xs:element>
                     <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="serviceGroup" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
@@ -464,16 +479,16 @@
                     <xs:element minOccurs="0" name="imageId" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="maxInstanceLimit" type="xs:int"></xs:element>
                     <xs:element minOccurs="0" name="name" nillable="true" type="xs:string"></xs:element>
-                    <xs:element minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterfaces"></xs:element>
+                    <xs:element minOccurs="0" name="networkInterfaces" nillable="true" type="ax224:NetworkInterfaces"></xs:element>
                     <xs:element minOccurs="0" name="payload" nillable="true" type="xs:base64Binary"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"></xs:element>
                     <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
                     <xs:element minOccurs="0" name="type" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="NetworkInterfaces">
                 <xs:sequence>
-                    <xs:element maxOccurs="unbounded" minOccurs="0" name="networkInterfaces" nillable="true" type="ax223:NetworkInterface"></xs:element>
+                    <xs:element maxOccurs="unbounded" minOccurs="0" name="networkInterfaces" nillable="true" type="ax224:NetworkInterface"></xs:element>
                 </xs:sequence>
             </xs:complexType>
             <xs:complexType name="NetworkInterface">
@@ -484,7 +499,7 @@
                 </xs:sequence>
             </xs:complexType>
         </xs:schema>
-        <xs:schema xmlns:ax224="http://pojo.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd">
+        <xs:schema xmlns:ax225="http://pojo.controller.cloud.stratos.apache.org/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://partition.deployment.controller.cloud.stratos.apache.org/xsd">
             <xs:import namespace="http://pojo.controller.cloud.stratos.apache.org/xsd"></xs:import>
             <xs:complexType name="Partition">
                 <xs:sequence>
@@ -493,7 +508,7 @@
                     <xs:element minOccurs="0" name="isPublic" type="xs:boolean"></xs:element>
                     <xs:element minOccurs="0" name="partitionMax" type="xs:int"></xs:element>
                     <xs:element minOccurs="0" name="partitionMin" type="xs:int"></xs:element>
-                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax223:Properties"></xs:element>
+                    <xs:element minOccurs="0" name="properties" nillable="true" type="ax224:Properties"></xs:element>
                     <xs:element minOccurs="0" name="provider" nillable="true" type="xs:string"></xs:element>
                 </xs:sequence>
             </xs:complexType>
@@ -511,6 +526,9 @@
     <wsdl:message name="terminateContainerRequest">
         <wsdl:part name="parameters" element="ns:terminateContainer"></wsdl:part>
     </wsdl:message>
+    <wsdl:message name="terminateContainerResponse">
+        <wsdl:part name="parameters" element="ns:terminateContainerResponse"></wsdl:part>
+    </wsdl:message>
     <wsdl:message name="CloudControllerServiceMemberTerminationFailedException">
         <wsdl:part name="parameters" element="ns:CloudControllerServiceMemberTerminationFailedException"></wsdl:part>
     </wsdl:message>
@@ -563,6 +581,9 @@
     <wsdl:message name="terminateAllContainersRequest">
         <wsdl:part name="parameters" element="ns:terminateAllContainers"></wsdl:part>
     </wsdl:message>
+    <wsdl:message name="terminateAllContainersResponse">
+        <wsdl:part name="parameters" element="ns:terminateAllContainersResponse"></wsdl:part>
+    </wsdl:message>
     <wsdl:message name="CloudControllerServiceInvalidClusterException">
         <wsdl:part name="parameters" element="ns:CloudControllerServiceInvalidClusterException"></wsdl:part>
     </wsdl:message>
@@ -615,6 +636,7 @@
         </wsdl:operation>
         <wsdl:operation name="terminateContainer">
             <wsdl:input message="ns:terminateContainerRequest" wsaw:Action="urn:terminateContainer"></wsdl:input>
+            <wsdl:output message="ns:terminateContainerResponse" wsaw:Action="urn:terminateContainerResponse"></wsdl:output>
             <wsdl:fault message="ns:CloudControllerServiceMemberTerminationFailedException" name="CloudControllerServiceMemberTerminationFailedException" wsaw:Action="urn:terminateContainerCloudControllerServiceMemberTerminationFailedException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="validateDeploymentPolicy">
@@ -651,6 +673,7 @@
         </wsdl:operation>
         <wsdl:operation name="terminateAllContainers">
             <wsdl:input message="ns:terminateAllContainersRequest" wsaw:Action="urn:terminateAllContainers"></wsdl:input>
+            <wsdl:output message="ns:terminateAllContainersResponse" wsaw:Action="urn:terminateAllContainersResponse"></wsdl:output>
             <wsdl:fault message="ns:CloudControllerServiceInvalidClusterException" name="CloudControllerServiceInvalidClusterException" wsaw:Action="urn:terminateAllContainersCloudControllerServiceInvalidClusterException"></wsdl:fault>
         </wsdl:operation>
         <wsdl:operation name="unregisterService">
@@ -710,6 +733,9 @@
             <wsdl:input>
                 <soap:body use="literal"></soap:body>
             </wsdl:input>
+            <wsdl:output>
+                <soap:body use="literal"></soap:body>
+            </wsdl:output>
             <wsdl:fault name="CloudControllerServiceMemberTerminationFailedException">
                 <soap:fault use="literal" name="CloudControllerServiceMemberTerminationFailedException"></soap:fault>
             </wsdl:fault>
@@ -797,6 +823,9 @@
             <wsdl:input>
                 <soap:body use="literal"></soap:body>
             </wsdl:input>
+            <wsdl:output>
+                <soap:body use="literal"></soap:body>
+            </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidClusterException">
                 <soap:fault use="literal" name="CloudControllerServiceInvalidClusterException"></soap:fault>
             </wsdl:fault>
@@ -908,6 +937,9 @@
             <wsdl:input>
                 <soap12:body use="literal"></soap12:body>
             </wsdl:input>
+            <wsdl:output>
+                <soap12:body use="literal"></soap12:body>
+            </wsdl:output>
             <wsdl:fault name="CloudControllerServiceMemberTerminationFailedException">
                 <soap12:fault use="literal" name="CloudControllerServiceMemberTerminationFailedException"></soap12:fault>
             </wsdl:fault>
@@ -995,6 +1027,9 @@
             <wsdl:input>
                 <soap12:body use="literal"></soap12:body>
             </wsdl:input>
+            <wsdl:output>
+                <soap12:body use="literal"></soap12:body>
+            </wsdl:output>
             <wsdl:fault name="CloudControllerServiceInvalidClusterException">
                 <soap12:fault use="literal" name="CloudControllerServiceInvalidClusterException"></soap12:fault>
             </wsdl:fault>
@@ -1103,6 +1138,9 @@
             <wsdl:input>
                 <mime:content type="text/xml" part="parameters"></mime:content>
             </wsdl:input>
+            <wsdl:output>
+                <mime:content type="text/xml" part="parameters"></mime:content>
+            </wsdl:output>
         </wsdl:operation>
         <wsdl:operation name="validateDeploymentPolicy">
             <http:operation location="validateDeploymentPolicy"></http:operation>
@@ -1160,6 +1198,9 @@
             <wsdl:input>
                 <mime:content type="text/xml" part="parameters"></mime:content>
             </wsdl:input>
+            <wsdl:output>
+                <mime:content type="text/xml" part="parameters"></mime:content>
+            </wsdl:output>
         </wsdl:operation>
         <wsdl:operation name="unregisterService">
             <http:operation location="unregisterService"></http:operation>
@@ -1230,22 +1271,22 @@
     </wsdl:binding>
     <wsdl:service name="CloudControllerService">
         <wsdl:port name="CloudControllerServiceHttpSoap11Endpoint" binding="ns:CloudControllerServiceSoap11Binding">
-            <soap:address location="http://172.17.8.1:9763/services/CloudControllerService.CloudControllerServiceHttpSoap11Endpoint/"></soap:address>
+            <soap:address location="http://172.29.76.209:9763/services/CloudControllerService.CloudControllerServiceHttpSoap11Endpoint/"></soap:address>
         </wsdl:port>
         <wsdl:port name="CloudControllerServiceHttpsSoap11Endpoint" binding="ns:CloudControllerServiceSoap11Binding">
-            <soap:address location="https://172.17.8.1:9443/services/CloudControllerService.CloudControllerServiceHttpsSoap11Endpoint/"></soap:address>
+            <soap:address location="https://172.29.76.209:9443/services/CloudControllerService.CloudControllerServiceHttpsSoap11Endpoint/"></soap:address>
         </wsdl:port>
         <wsdl:port name="CloudControllerServiceHttpSoap12Endpoint" binding="ns:CloudControllerServiceSoap12Binding">
-            <soap12:address location="http://172.17.8.1:9763/services/CloudControllerService.CloudControllerServiceHttpSoap12Endpoint/"></soap12:address>
+            <soap12:address location="http://172.29.76.209:9763/services/CloudControllerService.CloudControllerServiceHttpSoap12Endpoint/"></soap12:address>
         </wsdl:port>
         <wsdl:port name="CloudControllerServiceHttpsSoap12Endpoint" binding="ns:CloudControllerServiceSoap12Binding">
-            <soap12:address location="https://172.17.8.1:9443/services/CloudControllerService.CloudControllerServiceHttpsSoap12Endpoint/"></soap12:address>
+            <soap12:address location="https://172.29.76.209:9443/services/CloudControllerService.CloudControllerServiceHttpsSoap12Endpoint/"></soap12:address>
         </wsdl:port>
         <wsdl:port name="CloudControllerServiceHttpEndpoint" binding="ns:CloudControllerServiceHttpBinding">
-            <http:address location="http://172.17.8.1:9763/services/CloudControllerService.CloudControllerServiceHttpEndpoint/"></http:address>
+            <http:address location="http://172.29.76.209:9763/services/CloudControllerService.CloudControllerServiceHttpEndpoint/"></http:address>
         </wsdl:port>
         <wsdl:port name="CloudControllerServiceHttpsEndpoint" binding="ns:CloudControllerServiceHttpBinding">
-            <http:address location="https://172.17.8.1:9443/services/CloudControllerService.CloudControllerServiceHttpsEndpoint/"></http:address>
+            <http:address location="https://172.29.76.209:9443/services/CloudControllerService.CloudControllerServiceHttpsEndpoint/"></http:address>
         </wsdl:port>
     </wsdl:service>
 </wsdl:definitions>
\ No newline at end of file