diff --git a/cmd/devp2p/nodesetcmd.go b/cmd/devp2p/nodesetcmd.go
index 384a12da7c7e74a536ccf0e4ca151f474de6323c..de8e6d45ee6c541da009d64ba97d7c8ccd489b2b 100644
--- a/cmd/devp2p/nodesetcmd.go
+++ b/cmd/devp2p/nodesetcmd.go
@@ -155,7 +155,7 @@ func minAgeFilter(args []string) (nodeFilter, error) {
 }
 
 func ethFilter(args []string) (nodeFilter, error) {
-	var filter func(forkid.ID) error
+	var filter forkid.Filter
 	switch args[0] {
 	case "mainnet":
 		filter = forkid.NewStaticFilter(params.MainnetChainConfig, params.MainnetGenesisHash)
diff --git a/core/forkid/forkid.go b/core/forkid/forkid.go
index 706563beb30e15a88d2eb2fc39853a41bedae6bd..1e2d7a7441857276d90234bd83d86995ea2461ed 100644
--- a/core/forkid/forkid.go
+++ b/core/forkid/forkid.go
@@ -96,7 +96,7 @@ func NewFilter(chain *core.BlockChain) Filter {
 }
 
 // NewStaticFilter creates a filter at block zero.
-func NewStaticFilter(config *params.ChainConfig, genesis common.Hash) func(id ID) error {
+func NewStaticFilter(config *params.ChainConfig, genesis common.Hash) Filter {
 	head := func() uint64 { return 0 }
 	return newFilter(config, genesis, head)
 }
@@ -104,7 +104,7 @@ func NewStaticFilter(config *params.ChainConfig, genesis common.Hash) func(id ID
 // newFilter is the internal version of NewFilter, taking closures as its arguments
 // instead of a chain. The reason is to allow testing it without having to simulate
 // an entire blockchain.
-func newFilter(config *params.ChainConfig, genesis common.Hash, headfn func() uint64) func(id ID) error {
+func newFilter(config *params.ChainConfig, genesis common.Hash, headfn func() uint64) Filter {
 	// Calculate the all the valid fork hash and fork next combos
 	var (
 		forks = gatherForks(config)