diff --git a/cmd/cgat/main.go b/cmd/cgat/main.go
index 9342d2d40f71d66adb6c653dea3a38eca9fb164c..a2199353e02e642481697e32d83f0d5249010158 100644
--- a/cmd/cgat/main.go
+++ b/cmd/cgat/main.go
@@ -1,23 +1,17 @@
 package main
 
-import (
-	"net"
-
-	"pggat2/lib/backend/backends/v0"
-)
+import "pggat2/lib/frontend/frontends/v0"
 
 func main() {
+	frontend, err := frontends.NewFrontend()
+	if err != nil {
+		panic(err)
+	}
+	err = frontend.Run()
+	if err != nil {
+		panic(err)
+	}
 	/*
-		frontend, err := frontends.NewFrontend()
-		if err != nil {
-			panic(err)
-		}
-		err = frontend.Run()
-		if err != nil {
-			panic(err)
-		}
-	*/
-	for i := 0; i < 1000; i++ {
 		conn, err := net.Dial("tcp", "localhost:5432")
 		if err != nil {
 			panic(err)
@@ -27,6 +21,5 @@ func main() {
 			panic(err)
 		}
 		_ = server
-		_ = conn.Close()
-	}
+		_ = conn.Close()*/
 }
diff --git a/cmd/cgat/main_test.go b/cmd/cgat/main_test.go
index 45fcc779c52e0897a5aec51698990eaf5e559911..4cfd70481d80c3dc257c0da3405698389ba84293 100644
--- a/cmd/cgat/main_test.go
+++ b/cmd/cgat/main_test.go
@@ -3,5 +3,7 @@ package main
 import "testing"
 
 func Test(t *testing.T) {
-	main()
+	for i := 0; i < 1000; i++ {
+		main()
+	}
 }
diff --git a/lib/backend/backends/v0/server.go b/lib/backend/backends/v0/server.go
index 1d7b7673d5bf6fb2c4651743d3d5a01ff1b230eb..9b86f6ef630939c475e45ebf5c8e45db4c67387e 100644
--- a/lib/backend/backends/v0/server.go
+++ b/lib/backend/backends/v0/server.go
@@ -135,22 +135,25 @@ func (T *Server) startup0(username, password string) (bool, error) {
 	if err != nil {
 		return false, err
 	}
-	defer in.Done()
 
 	switch in.Type() {
 	case packet.ErrorResponse:
+		in.Done()
 		return false, errors.New("received error response")
 	case packet.Authentication:
 		method, ok := in.Int32()
 		if !ok {
+			in.Done()
 			return false, ErrBadPacketFormat
 		}
 		// they have more authentication methods than there are pokemon
 		switch method {
 		case 0:
 			// we're good to go, that was easy
+			in.Done()
 			return true, nil
 		case 2:
+			in.Done()
 			return false, errors.New("kerberos v5 is not supported")
 		case 3:
 			in.Done()
@@ -164,10 +167,13 @@ func (T *Server) startup0(username, password string) (bool, error) {
 			in.Done()
 			return false, T.authenticationMD5(salt, username, password)
 		case 6:
+			in.Done()
 			return false, errors.New("scm credential is not supported")
 		case 7:
+			in.Done()
 			return false, errors.New("gss is not supported")
 		case 9:
+			in.Done()
 			return false, errors.New("sspi is not supported")
 		case 10:
 			// read list of mechanisms
@@ -186,12 +192,15 @@ func (T *Server) startup0(username, password string) (bool, error) {
 			in.Done()
 			return false, T.authenticationSASL(mechanisms, username, password)
 		default:
+			in.Done()
 			return false, errors.New("unknown authentication method")
 		}
 	case packet.NegotiateProtocolVersion:
 		// we only support protocol 3.0 for now
+		in.Done()
 		return false, errors.New("server wanted to negotiate protocol version")
 	default:
+		in.Done()
 		return false, ErrProtocolError
 	}
 }
diff --git a/lib/pnet/packet/in.go b/lib/pnet/packet/in.go
index 5e97eeaeb9f831519ffd221d7a76a71dd764774a..9ba0758f93a1193d993eedcc9ec670dda847637f 100644
--- a/lib/pnet/packet/in.go
+++ b/lib/pnet/packet/in.go
@@ -140,7 +140,7 @@ func (T *In) Bytes(b []byte) bool {
 
 func (T *In) Done() {
 	if T.done {
-		return
+		panic("Done called twice")
 	}
 	T.done = true
 	T.finish(T.buf)