diff --git a/rdg.go b/rdg.go
index f2a0934acf199463db79c3f45f6bb30bec580b68..fe353455b674d8294b0b063e9d41444b7ad019d2 100644
--- a/rdg.go
+++ b/rdg.go
@@ -119,6 +119,7 @@ func (s RdgSession) RdgHandshake(next http.Handler) http.Handler {
 			rw.Writer.Flush()
 		} else if r.Method == MethodRDGIN {
 			if s.ConnIn == nil {
+				defer conn.Close()
 				s.ConnIn = conn
 				s.BufIn = rw.Reader
 				log.Printf("Opening RDGIN for client %s", conn.RemoteAddr().String())
@@ -148,7 +149,7 @@ func (s RdgSession) RdgHandshake(next http.Handler) http.Handler {
 					case PKT_TYPE_CHANNEL_CREATE:
 						server, port := readChannelCreateRequest(packet)
 						var err error
-						s.Remote, err = net.Dial("tcp", "localhost:3389")
+						s.Remote, err = net.Dial("tcp", net.JoinHostPort(server, strconv.Itoa(int(port))))
 						if err != nil {
 							log.Printf("Error connecting to %s, %d, %s", server, port, err)
 							return
@@ -246,9 +247,11 @@ func readCreateTunnelRequest(data []byte) (caps uint32, cookie string){
 	if fields == HTTP_TUNNEL_PACKET_FIELD_PAA_COOKIE {
 		var size uint16
 		binary.Read(r, binary.LittleEndian, &size)
-		// skip decoding paa for now
+		cookieB := make([]byte, size)
+		r.Read(cookieB)
+		cookie, _ = DecodeUTF16(cookieB)
 	}
-	log.Printf("Create tunnel caps: %d", caps)
+	log.Printf("Create tunnel caps: %d, cookie: %s", caps, cookie)
 	return
 }
 
@@ -354,6 +357,7 @@ func receiveDataPacket(conn net.Conn, data []byte) {
 }
 
 func sendDataPacket(conn net.Conn, w *bufio.Writer) {
+	defer conn.Close()
 	b1 := new(bytes.Buffer)
 	buf := make([]byte, 32767)
 	for {