diff --git a/extras/hs-test/vcl_test.go b/extras/hs-test/vcl_test.go
index b68385a..9febe8b 100755
--- a/extras/hs-test/vcl_test.go
+++ b/extras/hs-test/vcl_test.go
@@ -4,7 +4,6 @@
 	"fmt"
 	"time"
 
-	"github.com/edwarnicke/exechelper"
 )
 
 func (s *VethsSuite) TestVclEchoQuic() {
@@ -22,67 +21,48 @@
 }
 
 func (s *VethsSuite) testVclEcho(proto string) {
-	t := s.T()
+	serverVolume := "echo-srv-vol"
+	s.NewVolume(serverVolume)
 
-	exechelper.Run("docker volume create --name=echo-srv-vol")
-	exechelper.Run("docker volume create --name=echo-cln-vol")
+	clientVolume := "echo-cln-vol"
+	s.NewVolume(clientVolume)
 
-	srvInstance := "vpp-echo-srv"
-	clnInstance := "vpp-echo-cln"
+	srvInstance := "vpp-vcl-test-srv"
+	serverVppContainer, err := s.NewContainer(srvInstance)
+	s.assertNil(err)
+	serverVppContainer.addVolume(serverVolume, "/tmp/Configure2Veths")
+	serverVppContainer.run()
+
+	clnInstance := "vpp-vcl-test-cln"
+	clientVppContainer, err := s.NewContainer(clnInstance)
+	s.assertNil(err)
+	clientVppContainer.addVolume(clientVolume, "/tmp/Configure2Veths")
+	clientVppContainer.run();
+
 	echoSrv := "echo-srv"
+	serverEchoContainer, err := s.NewContainer(echoSrv)
+	s.assertNil(err)
+	serverEchoContainer.addVolume(serverVolume, "/tmp/" + echoSrv)
+	serverEchoContainer.run()
+
 	echoCln := "echo-cln"
-
-	err := dockerRun(srvInstance, "-v echo-srv-vol:/tmp/Configure2Veths")
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + srvInstance) }()
-
-	err = dockerRun(clnInstance, "-v echo-cln-vol:/tmp/Configure2Veths")
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + clnInstance) }()
-
-	err = dockerRun(echoSrv, fmt.Sprintf("-v echo-srv-vol:/tmp/%s", echoSrv))
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + echoSrv) }()
-
-	err = dockerRun(echoCln, fmt.Sprintf("-v echo-cln-vol:/tmp/%s", echoCln))
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + echoCln) }()
+	clientEchoContainer, err := s.NewContainer(echoCln)
+	s.assertNil(err)
+	clientEchoContainer.addVolume(clientVolume, "/tmp/" + echoCln)
+	clientEchoContainer.run()
 
 	_, err = hstExec("Configure2Veths srv", srvInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	_, err = hstExec("Configure2Veths cln", clnInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	// run server app
 	_, err = hstExec("RunEchoServer "+proto, echoSrv)
-	if err != nil {
-		t.Errorf("echo server: %v", err)
-		return
-	}
+	s.assertNil(err)
 
 	o, err := hstExec("RunEchoClient "+proto, echoCln)
-	if err != nil {
-		t.Errorf("echo client: %v", err)
-	}
+	s.assertNil(err)
 	fmt.Println(o)
 }
 
@@ -92,99 +72,68 @@
 }
 
 func (s *VethsSuite) testRetryAttach(proto string) {
-	t := s.T()
+	serverVolume := "echo-srv-vol"
+	s.NewVolume(serverVolume)
 
-	exechelper.Run("docker volume create --name=echo-srv-vol")
-	exechelper.Run("docker volume create --name=echo-cln-vol")
+	clientVolume := "echo-cln-vol"
+	s.NewVolume(clientVolume)
 
 	srvInstance := "vpp-vcl-test-srv"
+	serverVppContainer, err := s.NewContainer(srvInstance)
+	s.assertNil(err)
+	serverVppContainer.addVolume(serverVolume, "/tmp/Configure2Veths")
+	serverVppContainer.run()
+
 	clnInstance := "vpp-vcl-test-cln"
+	clientVppContainer, err := s.NewContainer(clnInstance)
+	s.assertNil(err)
+	clientVppContainer.addVolume(clientVolume, "/tmp/Configure2Veths")
+	clientVppContainer.run();
+
 	echoSrv := "echo-srv"
+	serverEchoContainer, err := s.NewContainer(echoSrv)
+	s.assertNil(err)
+	serverEchoContainer.addVolume(serverVolume, "/tmp/" + echoSrv)
+	serverEchoContainer.run()
+
 	echoCln := "echo-cln"
-
-	err := dockerRun(srvInstance, "-v echo-srv-vol:/tmp/Configure2Veths")
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + srvInstance) }()
-
-	err = dockerRun(clnInstance, "-v echo-cln-vol:/tmp/Configure2Veths")
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + clnInstance) }()
-
-	err = dockerRun(echoSrv, fmt.Sprintf("-v echo-srv-vol:/tmp/%s", echoSrv))
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + echoSrv) }()
-
-	err = dockerRun(echoCln, fmt.Sprintf("-v echo-cln-vol:/tmp/%s", echoCln))
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
-	defer func() { exechelper.Run("docker stop " + echoCln) }()
+	clientEchoContainer, err := s.NewContainer(echoCln)
+	s.assertNil(err)
+	clientEchoContainer.addVolume(clientVolume, "/tmp/" + echoCln)
+	clientEchoContainer.run()
 
 	_, err = hstExec("Configure2Veths srv-with-preset-hw-addr", srvInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	_, err = hstExec("Configure2Veths cln", clnInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	_, err = hstExec("RunVclEchoServer "+proto, echoSrv)
-	if err != nil {
-		t.Errorf("vcl test server: %v", err)
-		return
-	}
+	s.assertNil(err)
 
 	fmt.Println("This whole test case can take around 3 minutes to run. Please be patient.")
 	fmt.Println("... Running first echo client test, before disconnect.")
 	_, err = hstExec("RunVclEchoClient "+proto, echoCln)
-	if err != nil {
-		t.Errorf("vcl test client: %v", err)
-		return
-	}
+	s.assertNil(err)
 	fmt.Println("... First test ended. Stopping VPP server now.")
 
 	// Stop server-vpp-instance, start it again and then run vcl-test-client once more
 	stopVppCommand := "/bin/bash -c 'ps -C vpp_main -o pid= | xargs kill -9'"
 	_, err = dockerExec(stopVppCommand, srvInstance)
-	if err != nil {
-		t.Errorf("error while stopping vpp: %v", err)
-		return
-	}
+	s.assertNil(err)
 	time.Sleep(5 * time.Second) // Give parent process time to reap the killed child process
 	stopVppCommand = "/bin/bash -c 'ps -C hs-test -o pid= | xargs kill -9'"
 	_, err = dockerExec(stopVppCommand, srvInstance)
-	if err != nil {
-		t.Errorf("error while stopping hs-test: %v", err)
-		return
-	}
+	s.assertNil(err)
 	_, err = hstExec("Configure2Veths srv-with-preset-hw-addr", srvInstance)
-	if err != nil {
-		t.Errorf("%v", err)
-		return
-	}
+	s.assertNil(err)
 
 	fmt.Println("... VPP server is starting again, so waiting for a bit.")
 	time.Sleep(30 * time.Second) // Wait a moment for the re-attachment to happen
 
 	fmt.Println("... Running second echo client test, after disconnect and re-attachment.")
 	_, err = hstExec("RunVclEchoClient "+proto, echoCln)
-	if err != nil {
-		t.Errorf("vcl test client: %v", err)
-	}
+	s.assertNil(err)
 	fmt.Println("Done.")
 }
 
