diff --git a/cmd/agent/agent.go b/cmd/agent/agent.go
index ba81480..27a43b6 100755
--- a/cmd/agent/agent.go
+++ b/cmd/agent/agent.go
@@ -1,6 +1,7 @@
 package main
 
 import (
+	"bufio"
 	"cidebug/pkg/iowrappers"
 	"fmt"
 	"github.com/gorilla/websocket"
@@ -49,7 +50,7 @@ func setWinsize(f *os.File, w, h int) {
 		uintptr(unsafe.Pointer(&struct{ h, w, x, y uint16 }{uint16(h), uint16(w), 0, 0})))
 }
 
-func mainSsh() {
+func sshServer() *ssh.Server {
 	ssh.Handle(func(s ssh.Session) {
 		cmd := exec.Command("bash")
 		ptyReq, winCh, isPty := s.Pty()
@@ -75,33 +76,48 @@ func mainSsh() {
 		}
 	})
 
-	log.Println("starting ssh tcpserver on port 2222...")
+	log.Println("starting ssh server")
 	server := ssh.Server{
-		Addr:            ":2222",
+		//Addr:            ":2222",
 		PasswordHandler: passwordAuth,
 		SubsystemHandlers: map[string]ssh.SubsystemHandler{
 			"sftp": SftpHandler,
 		},
 	}
+	return &server
+}
 
-	listener, err := net.Listen("tcp", ":2222")
-	if err != nil {
-		log.Fatal(err)
+func echoServer(conn io.ReadWriter) {
+	io.Copy(conn, conn)
+}
+
+func netCatServer(conn io.ReadWriter) {
+	stdio := bufio.NewReadWriter(
+		bufio.NewReaderSize(os.Stdin, 0),
+		bufio.NewWriterSize(os.Stdout, 0))
+	iowrappers.SynchronizeStreams(conn, stdio)
+}
+
+type AgentService interface {
+	Run(listener net.Listener)
+}
+
+type ListenerServer func() *ssh.Server
+
+func (server ListenerServer) Run(listener net.Listener) {
+	server().Serve(listener)
+}
+
+type ConnectionServer func(conn io.ReadWriter)
+
+func (server ConnectionServer) Run(listener net.Listener) {
+	for {
+		conn, err := listener.Accept()
+		if err != nil {
+			panic(err)
+		}
+		go echoServer(conn)
 	}
-
-	server.Serve(listener)
-
-	//for {
-	//	conn, err := listener.Accept()
-	//	if err != nil {
-	//		log.Println("Failed to accept connection:", err)
-	//		continue
-	//	}
-	//	log.Println("Got connection")
-	//	go server.HandleConn(conn)
-	//}
-
-	//log.Fatal(server.ListenAndServe())
 }
 
 func main() {
@@ -121,24 +137,10 @@ func main() {
 
 	log.Println("Connection established to rendez-vous server, waiting for debug sessions")
 
-	// Session is a listener
-	for {
-		conn, err := listener.Accept()
-		if err != nil {
-			panic(err)
-		}
-		go handleConnection(conn)
-	}
+	var service AgentService
+	service = ListenerServer(sshServer)
+	//service = ConnectionServer(echoServer)
+	//service := ConnectionServer(netCatServer)
+	service.Run(listener)
 
 }
-
-func handleConnection(conn io.ReadWriter) {
-	//stdio := bufio.NewReadWriter(
-	//	bufio.NewReaderSize(os.Stdin, 0),
-	//	bufio.NewWriterSize(os.Stdout, 0))
-
-	// echo server
-	io.Copy(conn, conn)
-
-	//iowrappers.SynchronizeStreams(conn, stdio)
-}