diff --git a/chihaya.go b/chihaya.go
index 20ca691..7b25e0a 100644
--- a/chihaya.go
+++ b/chihaya.go
@@ -19,8 +19,9 @@ type AnnounceRequest struct {
 	Event    event.Event
 	InfoHash InfoHash
 	PeerID   PeerID
-	IP       string
-	Port     uint16
+
+	IPv4, IPv6 net.IP
+	Port       uint16
 
 	Compact bool
 	NumWant uint64
diff --git a/pkg/event/event.go b/pkg/event/event.go
index cb88c4a..c896cda 100644
--- a/pkg/event/event.go
+++ b/pkg/event/event.go
@@ -44,6 +44,8 @@ func init() {
 	eventToString[Stopped] = "stopped"
 	eventToString[Completed] = "completed"
 
+	stringToEvent[""] = None
+
 	for k, v := range eventToString {
 		stringToEvent[v] = k
 	}
diff --git a/pkg/event/event_test.go b/pkg/event/event_test.go
index 52a5341..d586f25 100644
--- a/pkg/event/event_test.go
+++ b/pkg/event/event_test.go
@@ -16,7 +16,7 @@ func TestNew(t *testing.T) {
 		expected    Event
 		expectedErr error
 	}{
-		{"", None, ErrUnknownEvent},
+		{"", None, nil},
 		{"NONE", None, nil},
 		{"none", None, nil},
 		{"started", Started, nil},
diff --git a/server/http/request.go b/server/http/request.go
index b6036c4..d5cb131 100644
--- a/server/http/request.go
+++ b/server/http/request.go
@@ -31,10 +31,7 @@ func announceRequest(r *http.Request, cfg *httpConfig) (*chihaya.AnnounceRequest
 		return nil, errors.NewBadRequest("failed to provide valid client event")
 	}
 
-	compactStr, err := q.String("compact")
-	if err != nil {
-		return nil, errors.NewBadRequest("failed to parse parameter: compact")
-	}
+	compactStr, _ := q.String("compact")
 	request.Compact = compactStr != "0"
 
 	infoHashes := q.InfoHashes()
@@ -67,10 +64,7 @@ func announceRequest(r *http.Request, cfg *httpConfig) (*chihaya.AnnounceRequest
 		return nil, errors.NewBadRequest("failed to parse parameter: uploaded")
 	}
 
-	request.NumWant, err = q.Uint64("numwant")
-	if err != nil {
-		return nil, errors.NewBadRequest("failed to parse parameter: numwant")
-	}
+	request.NumWant, _ = q.Uint64("numwant")
 
 	port, err := q.Uint64("port")
 	if err != nil {
@@ -78,6 +72,13 @@ func announceRequest(r *http.Request, cfg *httpConfig) (*chihaya.AnnounceRequest
 	}
 	request.Port = uint16(port)
 
+	v4, v6, err := requestedIP(q, r, cfg)
+	if err != nil {
+		return nil, errors.NewBadRequest("failed to parse remote IP")
+	}
+	request.IPv4 = v4
+	request.IPv6 = v6
+
 	return request, nil
 }
 
@@ -87,8 +88,13 @@ func scrapeRequest(r *http.Request, cfg *httpConfig) (*chihaya.ScrapeRequest, er
 		return nil, err
 	}
 
+	infoHashes := q.InfoHashes()
+	if len(infoHashes) < 1 {
+		return nil, errors.NewBadRequest("no info_hash parameter supplied")
+	}
+
 	request := &chihaya.ScrapeRequest{
-		InfoHashes: q.InfoHashes(),
+		InfoHashes: infoHashes,
 		Params:     q,
 	}
 
diff --git a/server/store/peer_store.go b/server/store/peer_store.go
index eb88ea4..568905d 100644
--- a/server/store/peer_store.go
+++ b/server/store/peer_store.go
@@ -16,10 +16,10 @@ var peerStoreDrivers = make(map[string]PeerStoreDriver)
 // PeerStore represents an interface for manipulating peers.
 type PeerStore interface {
 	PutSeeder(infoHash chihaya.InfoHash, p chihaya.Peer) error
-	DeleteSeeder(infoHash chihaya.InfoHash, peerID chihaya.Peer) error
+	DeleteSeeder(infoHash chihaya.InfoHash, p chihaya.Peer) error
 
 	PutLeecher(infoHash chihaya.InfoHash, p chihaya.Peer) error
-	DeleteLeecher(infoHash chihaya.InfoHash, peerID chihaya.Peer) error
+	DeleteLeecher(infoHash chihaya.InfoHash, p chihaya.Peer) error
 
 	GraduateLeecher(infoHash chihaya.InfoHash, p chihaya.Peer) error
 	AnnouncePeers(infoHash chihaya.InfoHash, seeder bool, numWant int) (peers, peers6 []chihaya.Peer, err error)