NewRequest() now takes method as first param
diff --git a/request-server_test.go b/request-server_test.go
index 1c3055e..53172c6 100644
--- a/request-server_test.go
+++ b/request-server_test.go
@@ -73,14 +73,13 @@
 	r := p.testHandler()
 	f, _ := r.fetch("/foo")
 	assert.Equal(t, contents, string(f.content))
-	fmt.Println(string(f.content))
 }
 
 func TestRequestCache(t *testing.T) {
 	p := clientRequestServerPair(t)
 	defer p.Close()
-	foo := NewRequest("foo")
-	bar := NewRequest("bar")
+	foo := NewRequest("", "foo")
+	bar := NewRequest("", "bar")
 	fh := p.svr.nextRequest(foo)
 	bh := p.svr.nextRequest(bar)
 	assert.Len(t, p.svr.openRequests, 2)
diff --git a/request.go b/request.go
index 5408825..950861a 100644
--- a/request.go
+++ b/request.go
@@ -42,14 +42,23 @@
 
 // New Request initialized based on packet data
 func requestFromPacket(pkt hasPath) Request {
-	request := NewRequest(pkt.getPath())
-	request.init(pkt)
+	method := requestMethod(pkt)
+	request := NewRequest(method, pkt.getPath())
+	request.pkt_id = pkt.id()
+	switch p := pkt.(type) {
+	case *sshFxpSetstatPacket:
+		request.Attrs = p.Attrs.([]byte)
+	case *sshFxpRenamePacket:
+		request.Target = filepath.Clean(p.Newpath)
+	case *sshFxpSymlinkPacket:
+		request.Target = filepath.Clean(p.Linkpath)
+	}
 	return request
 }
 
 // NewRequest creates a new Request object.
-func NewRequest(path string) Request {
-	request := Request{Filepath: filepath.Clean(path)}
+func NewRequest(method, path string) Request {
+	request := Request{Method: method, Filepath: filepath.Clean(path)}
 	request.packets = make(chan packet_data, sftpServerWorkerCount)
 	request.state = &state{}
 	request.stateLock = &sync.RWMutex{}
@@ -270,30 +279,26 @@
 }
 
 // init attributes of request object from packet data
-func (r *Request) init(p hasPath) {
-	r.pkt_id = p.id()
-	switch p := p.(type) {
+func requestMethod(p hasPath) (method string) {
+	switch p.(type) {
 	case *sshFxpOpenPacket, *sshFxpOpendirPacket:
-		r.Method = "Open"
+		method = "Open"
 	case *sshFxpSetstatPacket:
-		r.Method = "Setstat"
-		r.Attrs = p.Attrs.([]byte)
+		method = "Setstat"
 	case *sshFxpRenamePacket:
-		r.Method = "Rename"
-		r.Target = filepath.Clean(p.Newpath)
+		method = "Rename"
 	case *sshFxpSymlinkPacket:
-		r.Method = "Symlink"
-		r.Target = filepath.Clean(p.Linkpath)
+		method = "Symlink"
 	case *sshFxpRemovePacket:
-		r.Method = "Remove"
+		method = "Remove"
 	case *sshFxpStatPacket, *sshFxpLstatPacket:
-		r.Method = "Stat"
+		method = "Stat"
 	case *sshFxpRmdirPacket:
-		r.Method = "Rmdir"
+		method = "Rmdir"
 	case *sshFxpReadlinkPacket:
-		r.Method = "Readlink"
+		method = "Readlink"
 	case *sshFxpMkdirPacket:
-		r.Method = "Mkdir"
-		//r.Attrs are ignored in ./packet.go
+		method = "Mkdir"
 	}
+	return method
 }