diff --git a/http.go b/http.go
index 8f637d7..14eb345 100644
--- a/http.go
+++ b/http.go
@@ -46,12 +46,12 @@
 	// If nil, the client uses http.DefaultTransport.
 	Transport func(Context) http.RoundTripper
 
-	// base path including leading and trailing slash, e.g. "/_groupcache/"
-	basePath string
-
 	// this peer's base URL, e.g. "https://example.net:8000"
 	self string
 
+	// opts specifies the options.
+	opts HTTPPoolOptions
+
 	mu          sync.Mutex // guards peers and httpGetters
 	peers       *consistenthash.Map
 	httpGetters map[string]*httpGetter // keyed by e.g. "http://10.0.0.2:8008"
@@ -78,7 +78,7 @@
 // for example "http://example.net:8000".
 func NewHTTPPool(self string) *HTTPPool {
 	p := NewHTTPPoolOpts(self, nil)
-	http.Handle(p.basePath, p)
+	http.Handle(p.opts.BasePath, p)
 	return p
 }
 
@@ -93,23 +93,21 @@
 	}
 	httpPoolMade = true
 
-	opts := HTTPPoolOptions{}
-	if o != nil {
-		opts = *o
-	}
-	if opts.BasePath == "" {
-		opts.BasePath = defaultBasePath
-	}
-	if opts.Replicas == 0 {
-		opts.Replicas = defaultReplicas
-	}
-
 	p := &HTTPPool{
-		basePath:    opts.BasePath,
 		self:        self,
-		peers:       consistenthash.New(opts.Replicas, opts.HashFn),
 		httpGetters: make(map[string]*httpGetter),
 	}
+	if o != nil {
+		p.opts = *o
+	}
+	if p.opts.BasePath == "" {
+		p.opts.BasePath = defaultBasePath
+	}
+	if p.opts.Replicas == 0 {
+		p.opts.Replicas = defaultReplicas
+	}
+	p.peers = consistenthash.New(p.opts.Replicas, p.opts.HashFn)
+
 	RegisterPeerPicker(func() PeerPicker { return p })
 	return p
 }
@@ -120,11 +118,11 @@
 func (p *HTTPPool) Set(peers ...string) {
 	p.mu.Lock()
 	defer p.mu.Unlock()
-	p.peers = consistenthash.New(defaultReplicas, nil)
+	p.peers = consistenthash.New(p.opts.Replicas, p.opts.HashFn)
 	p.peers.Add(peers...)
 	p.httpGetters = make(map[string]*httpGetter, len(peers))
 	for _, peer := range peers {
-		p.httpGetters[peer] = &httpGetter{transport: p.Transport, baseURL: peer + p.basePath}
+		p.httpGetters[peer] = &httpGetter{transport: p.Transport, baseURL: peer + p.opts.BasePath}
 	}
 }
 
@@ -142,10 +140,10 @@
 
 func (p *HTTPPool) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	// Parse request.
-	if !strings.HasPrefix(r.URL.Path, p.basePath) {
+	if !strings.HasPrefix(r.URL.Path, p.opts.BasePath) {
 		panic("HTTPPool serving unexpected path: " + r.URL.Path)
 	}
-	parts := strings.SplitN(r.URL.Path[len(p.basePath):], "/", 2)
+	parts := strings.SplitN(r.URL.Path[len(p.opts.BasePath):], "/", 2)
 	if len(parts) != 2 {
 		http.Error(w, "bad request", http.StatusBadRequest)
 		return
