diff --git a/core/bloombits/matcher.go b/core/bloombits/matcher.go
index df0967a124f434bdb9286336a7bb782c9c1d48ae..f3ed405a6150cd52cb043b7b6a7325613036cfe0 100644
--- a/core/bloombits/matcher.go
+++ b/core/bloombits/matcher.go
@@ -17,6 +17,7 @@
 package bloombits
 
 import (
+	"bytes"
 	"errors"
 	"math"
 	"sort"
@@ -171,15 +172,6 @@ func (m *Matcher) Start(begin, end uint64, results chan uint64) (*MatcherSession
 				}
 				// Iterate over all the blocks in the section and return the matching ones
 				for i := first; i <= last; i++ {
-					// If the bitset is nil, we're a special match-all cornercase
-					if res.bitset == nil {
-						select {
-						case <-session.quit:
-							return
-						case results <- i:
-						}
-						continue
-					}
 					// Skip the entire byte if no matches are found inside
 					next := res.bitset[(i-sectionStart)/8]
 					if next == 0 {
@@ -221,7 +213,7 @@ func (m *Matcher) run(begin, end uint64, buffer int, session *MatcherSession) ch
 			select {
 			case <-session.quit:
 				return
-			case source <- &partialMatches{i, nil}:
+			case source <- &partialMatches{i, bytes.Repeat([]byte{0xff}, int(m.sectionSize/8))}:
 			}
 		}
 	}()
diff --git a/core/bloombits/matcher_test.go b/core/bloombits/matcher_test.go
index 177e1b792b3e48c64a85b9788c75a2afbd4f8a79..f0198c4e38624017b3b5dc4bb20d5af65f78d2ea 100644
--- a/core/bloombits/matcher_test.go
+++ b/core/bloombits/matcher_test.go
@@ -51,6 +51,11 @@ func TestMatcherRandom(t *testing.T) {
 	}
 }
 
+// Tests that matching on everything doesn't crash (special case internally).
+func TestWildcardMatcher(t *testing.T) {
+	testMatcherBothModes(t, nil, 10000, 0)
+}
+
 // makeRandomIndexes generates a random filter system, composed on multiple filter
 // criteria, each having one bloom list component for the address and arbitrarilly
 // many topic bloom list components.