diff --git a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockReport.java b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockReport.java
index 4ea7449..aa7bd8f 100644
--- a/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockReport.java
+++ b/mockserver-api/src/main/java/pl/touk/mockserver/api/response/MockReport.java
@@ -2,6 +2,7 @@ package pl.touk.mockserver.api.response;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import pl.touk.mockserver.api.request.Method;
 
 import javax.xml.bind.annotation.XmlElement;
 
@@ -24,4 +25,13 @@ public class MockReport {
 
     @XmlElement(required = true)
     private String responseHeaders;
+
+    @XmlElement(required = true)
+    private boolean soap;
+
+    @XmlElement(required = true)
+    private Method method;
+
+    @XmlElement(required = true)
+    private int statusCode;
 }
diff --git a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy
index 1fba403..32c9623 100644
--- a/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy
+++ b/mockserver-tests/src/test/groovy/pl/touk/mockserver/tests/MockServerIntegrationTest.groovy
@@ -611,7 +611,10 @@ class MockServerIntegrationTest extends Specification {
             remoteMockServer.addMock(new AddMock(
                     name: 'testRest4',
                     path: 'testEndpoint',
-                    port: 9999
+                    port: 9999,
+                    soap: true,
+                    statusCode: 204,
+                    method: Method.PUT
             ))
             remoteMockServer.addMock(new AddMock(
                     name: 'testRest3',
@@ -636,11 +639,11 @@ class MockServerIntegrationTest extends Specification {
             remoteMockServer.removeMock('testRest5')
         expect:
             remoteMockServer.listMocks() == [
-                    new MockReport(name: 'testRest', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }'),
-                    new MockReport(name: 'testRest2', path: 'testEndpoint', port: 9998, predicate: '''{ req -> req.xml.name() == 'request1'}''', response: '''{ req -> '<response/>' }''', responseHeaders: '{ _ -> [a: "b"] }'),
-                    new MockReport(name: 'testRest3', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }'),
-                    new MockReport(name: 'testRest4', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }'),
-                    new MockReport(name: 'testRest6', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }')
+                    new MockReport(name: 'testRest', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST),
+                    new MockReport(name: 'testRest2', path: 'testEndpoint', port: 9998, predicate: '''{ req -> req.xml.name() == 'request1'}''', response: '''{ req -> '<response/>' }''', responseHeaders: '{ _ -> [a: "b"] }', soap: false, statusCode: 200, method: Method.POST),
+                    new MockReport(name: 'testRest3', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST),
+                    new MockReport(name: 'testRest4', path: 'testEndpoint', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: true, statusCode: 204, method: Method.PUT),
+                    new MockReport(name: 'testRest6', path: 'testEndpoint2', port: 9999, predicate: '{ _ -> true }', response: '''{ _ -> '' }''', responseHeaders: '{ _ -> [:] }', soap: false, statusCode: 200, method: Method.POST)
             ]
     }
 
diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy
index e5c9c98..545dfed 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy
@@ -3,6 +3,7 @@ package pl.touk.mockserver.server
 import com.sun.net.httpserver.HttpExchange
 import groovy.transform.PackageScope
 import groovy.util.logging.Slf4j
+import pl.touk.mockserver.api.request.Method
 
 import java.util.concurrent.CopyOnWriteArrayList
 
@@ -24,7 +25,7 @@ class ContextExecutor {
                 log.debug("Request: ${request.text}")
                 for (Mock mock : mocks) {
                     try {
-                        if (mock.match(ex.requestMethod, request)) {
+                        if (mock.match(Method.valueOf(ex.requestMethod), request)) {
                             log.debug("Mock ${mock.name} match request ${request.text}")
                             MockResponse httpResponse = mock.apply(request)
                             fillExchange(ex, httpResponse)
diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
index 322ec64..1b8fc9a 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
@@ -2,14 +2,11 @@ package pl.touk.mockserver.server
 
 import com.sun.net.httpserver.HttpExchange
 import groovy.util.logging.Slf4j
-import pl.touk.mockserver.api.request.AddMock
-import pl.touk.mockserver.api.request.MockServerRequest
-import pl.touk.mockserver.api.request.PeekMock
-import pl.touk.mockserver.api.request.RemoveMock
+import pl.touk.mockserver.api.request.*
 import pl.touk.mockserver.api.response.*
 
 import javax.xml.bind.JAXBContext
-import java.util.concurrent.CopyOnWriteArrayList
+import java.util.concurrent.ConcurrentHashMap
 import java.util.concurrent.CopyOnWriteArraySet
 
 import static pl.touk.mockserver.server.Util.createResponse
@@ -18,7 +15,7 @@ import static pl.touk.mockserver.server.Util.createResponse
 class HttpMockServer {
 
     private final HttpServerWraper httpServerWraper
-    private final List<HttpServerWraper> childServers = new CopyOnWriteArrayList<>()
+    private final Map<Integer, HttpServerWraper> childServers = new ConcurrentHashMap<>()
     private final Set<String> mockNames = new CopyOnWriteArraySet<>()
 
     private static
@@ -61,7 +58,10 @@ class HttpMockServer {
                             port: it.port,
                             predicate: it.predicateClosureText,
                             response: it.responseClosureText,
-                            responseHeaders: it.responseHeadersClosureText
+                            responseHeaders: it.responseHeadersClosureText,
+                            soap: it.soap,
+                            method: it.method,
+                            statusCode: it.statusCode as int
                     )
                 }
         )
@@ -69,7 +69,7 @@ class HttpMockServer {
     }
 
     Set<Mock> listMocks() {
-        return childServers.collect { it.mocks }.flatten() as TreeSet<Mock>
+        return childServers.values().collect { it.mocks }.flatten() as TreeSet<Mock>
     }
 
     private void addMock(AddMock request, HttpExchange ex) {
@@ -85,10 +85,7 @@ class HttpMockServer {
     }
 
     private static Mock mockFromRequest(AddMock request) {
-        String name = request.name
-        String mockPath = request.path
-        int mockPort = request.port
-        Mock mock = new Mock(name, mockPath, mockPort)
+        Mock mock = new Mock(request.name, request.path, request.port)
         mock.predicate = request.predicate
         mock.response = request.response
         mock.soap = request.soap
@@ -99,10 +96,10 @@ class HttpMockServer {
     }
 
     private HttpServerWraper getOrCreateChildServer(int mockPort) {
-        HttpServerWraper child = childServers.find { it.port == mockPort }
+        HttpServerWraper child = childServers[mockPort]
         if (!child) {
             child = new HttpServerWraper(mockPort)
-            childServers << child
+            childServers.put(mockPort, child)
         }
         return child
     }
@@ -114,7 +111,7 @@ class HttpMockServer {
             throw new RuntimeException('mock not registered')
         }
         log.info("Removing mock $name")
-        List<MockEvent> mockEvents = skipReport ? [] : childServers.collect {
+        List<MockEvent> mockEvents = skipReport ? [] : childServers.values().collect {
             it.removeMock(name)
         }.flatten() as List<MockEvent>
         mockNames.remove(name)
@@ -154,7 +151,7 @@ class HttpMockServer {
             throw new RuntimeException('mock not registered')
         }
         log.trace("Peeking mock $name")
-        List<MockEvent> mockEvents = childServers.collect { it.peekMock(name) }.flatten() as List<MockEvent>
+        List<MockEvent> mockEvents = childServers.values().collect { it.peekMock(name) }.flatten() as List<MockEvent>
         MockPeeked mockPeeked = new MockPeeked(
                 mockEvents: createMockEventReports(mockEvents)
         )
@@ -166,7 +163,7 @@ class HttpMockServer {
     }
 
     void stop() {
-        childServers.each { it.stop() }
+        childServers.values().each { it.stop() }
         httpServerWraper.stop()
     }
 }
diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy
index 43692f6..b13b7a2 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy
@@ -19,7 +19,7 @@ class HttpServerWraper {
         this.port = port
         InetSocketAddress addr = new InetSocketAddress(Inet4Address.getByName("0.0.0.0"), port)
         httpServer = HttpServer.create(addr, 0)
-        httpServer.executor = Executors.newCachedThreadPool()
+        httpServer.executor = Executors.newWorkStealingPool()
         log.info("Http server starting on port $port...")
         httpServer.start()
         log.info('Http server is started')
@@ -45,14 +45,14 @@ class HttpServerWraper {
     }
 
     List<MockEvent> removeMock(String name) {
-        return executors.collect { it.removeMock(name) }.flatten()
+        return executors.collect { it.removeMock(name) }.flatten() as List<MockEvent>
     }
 
     List<MockEvent> peekMock(String name) {
-        return executors.collect { it.peekMock(name) }.flatten()
+        return executors.collect { it.peekMock(name) }.flatten() as List<MockEvent>
     }
 
     List<Mock> getMocks() {
-        return executors.collect { it.mocks }.flatten()
+        return executors.collect { it.mocks }.flatten() as List<Mock>
     }
 }
diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
index 25f0168..5f3aa06 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
@@ -3,6 +3,7 @@ package pl.touk.mockserver.server
 import groovy.transform.EqualsAndHashCode
 import groovy.transform.PackageScope
 import groovy.util.logging.Slf4j
+import pl.touk.mockserver.api.request.Method
 
 import java.util.concurrent.CopyOnWriteArrayList
 
@@ -21,7 +22,7 @@ class Mock implements Comparable<Mock> {
     Closure responseHeaders = toClosure(responseHeadersClosureText)
     boolean soap = false
     int statusCode = 200
-    String method = 'POST'
+    Method method = Method.POST
     int counter = 0
     final List<MockEvent> history = new CopyOnWriteArrayList<>()
 
@@ -34,7 +35,7 @@ class Mock implements Comparable<Mock> {
         this.port = port
     }
 
-    boolean match(String method, MockRequest request) {
+    boolean match(Method method, MockRequest request) {
         return this.method == method && predicate(request)
     }
 
@@ -90,7 +91,7 @@ class Mock implements Comparable<Mock> {
         }
     }
 
-    void setMethod(String method) {
+    void setMethod(Method method) {
         if (method) {
             this.method = method
         }
diff --git a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy b/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy
index 5e6ddc8..c4ebe01 100644
--- a/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy
+++ b/mockserver/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy
@@ -46,7 +46,7 @@ class MockRequest {
     }
 
     private static GPathResult getSoapBodyContent(GPathResult xml) {
-        return xml.Body.'**'[1]
+        return xml.Body.'**'[1] as GPathResult
     }
 
     private static Object inputToJson(String text) {
@@ -66,7 +66,7 @@ class MockRequest {
     private static Map<String, String> headersToMap(Headers headers) {
         return headers.collectEntries {
             [it.key.toLowerCase(), it.value.join(',')]
-        }
+        } as Map<String, String>
     }
 
 }