diff --git a/remsim/RemsimServer_Tests.ttcn b/remsim/RemsimServer_Tests.ttcn
index 1ca5ce9..fd7a1a4 100644
--- a/remsim/RemsimServer_Tests.ttcn
+++ b/remsim/RemsimServer_Tests.ttcn
@@ -24,90 +24,9 @@
 
 import from HTTPmsg_Types all;
 import from HTTPmsg_PortType all;
+import from HTTP_Adapter all;
 import from JSON_Types all;
 
-type component http_CT {
-	port HTTPmsg_PT HTTP;
-	var charstring g_http_host;
-	var integer g_http_port;
-};
-
-function f_http_init(charstring host, integer http_port) runs on http_CT {
-	map(self:HTTP, system:HTTP);
-	g_http_host := host;
-	g_http_port := http_port;
-}
-
-template (value) Connect ts_HTTP_Connect(template (value) charstring hostname,
-					 template (value) integer http_port := 80,
-					 template (value) boolean use_ssl := false) := {
-	hostname := hostname,
-	portnumber := http_port,
-	use_ssl := use_ssl
-}
-template (value) Close ts_HTTP_Close := { client_id := omit };
-
-template (value) HeaderLines ts_HTTP_Header(charstring body) := {
-	{ header_name := "Content-Type", header_value := "application/json" },
-	{ header_name := "Content-Length", header_value := int2str(lengthof(body)) }
-}
-
-template (value) HTTPMessage ts_HTTP_Req(charstring url,
-					 charstring method := "GET",
-					 charstring body := "",
-					 integer v_maj := 1, integer v_min := 1) := {
-	request := {
-		client_id := omit,
-		method := method,
-		uri := url,
-		version_major := v_maj,
-		version_minor := v_min,
-		header := ts_HTTP_Header(body),
-		body := body
-	}
-}
-
-template HTTPMessage tr_HTTP_Resp(template integer sts := ?) := {
-	response := {
-		client_id := ?,
-		version_major := ?,
-		version_minor := ?,
-		statuscode := sts,
-		statustext := ?,
-		header := ?,
-		body := ?
-	}
-};
-
-template HTTPMessage tr_HTTP_Resp2xx := tr_HTTP_Resp((200..299));
-
-/* run a HTTP request and return the response */
-function f_http_transact(charstring url, charstring method := "GET",
-			 charstring body := "", template HTTPMessage exp := tr_HTTP_Resp2xx)
-runs on http_CT return HTTPMessage {
-	var HTTPMessage resp;
-	timer T := 2.0;
-
-	HTTP.send(ts_HTTP_Connect(g_http_host, g_http_port));
-	//HTTP.receive(Connect_result:?);
-	HTTP.send(ts_HTTP_Req(url, method, body));
-	T.start;
-	alt {
-	[] HTTP.receive(exp) -> value resp {
-		setverdict(pass);
-		}
-	[] HTTP.receive(tr_HTTP_Resp) -> value resp {
-		setverdict(fail, "Unexpected HTTP response ", resp);
-		}
-	[] T.timeout {
-		setverdict(fail, "Timeout waiting for HTTP response");
-		self.stop;
-		}
-	}
-	HTTP.send(ts_HTTP_Close);
-	return resp;
-}
-
 /* run a HTTP GET on specified URL expecting json in RSRES format as response */
 function f_rsres_get(charstring url, template integer exp_sts := 200)
 runs on http_CT return JsRoot {
