diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 451107f4..1a73b1f8 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -11,7 +11,7 @@ jobs:
       - name: Checkout code
         uses: actions/checkout@v2
       - name: Install dependencies
-        run: sudo apt update && sudo apt install -y python3-pip
+        run: sudo apt update && sudo apt install -y python3-pip curl
       - name: Build docs (required for tests)
         run: make docs
       - name: Run tests, formatting, vetting and linting
diff --git a/client/client.go b/client/client.go
index abcfecf7..81defdc9 100644
--- a/client/client.go
+++ b/client/client.go
@@ -116,6 +116,7 @@ func (c *Client) Poll(topic string, options ...SubscribeOption) ([]*Message, err
 	msgChan := make(chan *Message)
 	errChan := make(chan error)
 	topicURL := c.expandTopicURL(topic)
+	options = append(options, WithPoll())
 	go func() {
 		err := performSubscribeRequest(ctx, msgChan, topicURL, "", options...)
 		close(msgChan)
diff --git a/client/client_test.go b/client/client_test.go
index aca16748..5b589daf 100644
--- a/client/client_test.go
+++ b/client/client_test.go
@@ -62,6 +62,36 @@ func TestClient_Publish_Subscribe(t *testing.T) {
 	require.Nil(t, msg)
 }
 
+func TestClient_Publish_Poll(t *testing.T) {
+	s, port := test.StartServer(t)
+	defer test.StopServer(t, s, port)
+	c := client.New(newTestConfig(port))
+
+	msg, err := c.Publish("mytopic", "some message", client.WithNoFirebase(), client.WithTagsList("tag1,tag2"))
+	require.Nil(t, err)
+	require.Equal(t, "some message", msg.Message)
+	require.Equal(t, []string{"tag1", "tag2"}, msg.Tags)
+
+	msg, err = c.Publish("mytopic", "this won't be cached", client.WithNoCache())
+	require.Nil(t, err)
+	require.Equal(t, "this won't be cached", msg.Message)
+
+	msg, err = c.Publish("mytopic", "some delayed message", client.WithDelay("20 min"))
+	require.Nil(t, err)
+	require.Equal(t, "some delayed message", msg.Message)
+
+	messages, err := c.Poll("mytopic")
+	require.Nil(t, err)
+	require.Equal(t, 1, len(messages))
+	require.Equal(t, "some message", messages[0].Message)
+
+	messages, err = c.Poll("mytopic", client.WithScheduled())
+	require.Nil(t, err)
+	require.Equal(t, 2, len(messages))
+	require.Equal(t, "some message", messages[0].Message)
+	require.Equal(t, "some delayed message", messages[1].Message)
+}
+
 func newTestConfig(port int) *client.Config {
 	c := client.NewConfig()
 	c.DefaultHost = fmt.Sprintf("http://127.0.0.1:%d", port)
diff --git a/server/server.go b/server/server.go
index 1a02f3a8..3259e0f8 100644
--- a/server/server.go
+++ b/server/server.go
@@ -196,16 +196,17 @@ func (s *Server) Run() error {
 		listenStr += fmt.Sprintf(" %s/https", s.config.ListenHTTPS)
 	}
 	log.Printf("Listening on %s", listenStr)
-	http.HandleFunc("/", s.handle)
+	mux := http.NewServeMux()
+	mux.HandleFunc("/", s.handle)
 	errChan := make(chan error)
 	s.mu.Lock()
 	s.closeChan = make(chan bool)
-	s.httpServer = &http.Server{Addr: s.config.ListenHTTP}
+	s.httpServer = &http.Server{Addr: s.config.ListenHTTP, Handler: mux}
 	go func() {
 		errChan <- s.httpServer.ListenAndServe()
 	}()
 	if s.config.ListenHTTPS != "" {
-		s.httpsServer = &http.Server{Addr: s.config.ListenHTTP}
+		s.httpsServer = &http.Server{Addr: s.config.ListenHTTP, Handler: mux}
 		go func() {
 			errChan <- s.httpsServer.ListenAndServeTLS(s.config.CertFile, s.config.KeyFile)
 		}()
diff --git a/server/server_test.go b/server/server_test.go
index 66195888..377f1d64 100644
--- a/server/server_test.go
+++ b/server/server_test.go
@@ -487,6 +487,27 @@ func TestServer_SubscribeWithQueryFilters(t *testing.T) {
 	require.Equal(t, keepaliveEvent, messages[2].Event)
 }
 
+/*
+func TestServer_Curl_Publish_Poll(t *testing.T) {
+	s, port := test.StartServer(t)
+	defer test.StopServer(t, s, port)
+
+	cmd := exec.Command("sh", "-c", fmt.Sprintf(`curl -sd "This is a test" localhost:%d/mytopic`, port))
+	require.Nil(t, cmd.Run())
+	b, err := cmd.CombinedOutput()
+	require.Nil(t, err)
+	msg := toMessage(t, string(b))
+	require.Equal(t, "This is a test", msg.Message)
+
+	cmd = exec.Command("sh", "-c", fmt.Sprintf(`curl "localhost:%d/mytopic?poll=1"`, port))
+	require.Nil(t, cmd.Run())
+	b, err = cmd.CombinedOutput()
+	require.Nil(t, err)
+	msg = toMessage(t, string(b))
+	require.Equal(t, "This is a test", msg.Message)
+}
+*/
+
 func newTestConfig(t *testing.T) *Config {
 	conf := NewConfig()
 	conf.CacheFile = filepath.Join(t.TempDir(), "cache.db")
diff --git a/util/util_test.go b/util/util_test.go
index 50a3a689..79f4fc65 100644
--- a/util/util_test.go
+++ b/util/util_test.go
@@ -62,6 +62,12 @@ func TestInStringListAll(t *testing.T) {
 	require.False(t, InStringListAll(s, []string{"three", "five"}))
 }
 
+func TestInIntList(t *testing.T) {
+	s := []int{1, 2}
+	require.True(t, InIntList(s, 2))
+	require.False(t, InIntList(s, 3))
+}
+
 func TestSplitNoEmpty(t *testing.T) {
 	require.Equal(t, []string{}, SplitNoEmpty("", ","))
 	require.Equal(t, []string{}, SplitNoEmpty(",,,", ","))