diff --git a/rpc/api.go b/rpc/api.go
index 617e4998d240e261d1ef28f49841d4a1338a1a51..dc0945d198487e989895219de6fe95da8ad9774e 100644
--- a/rpc/api.go
+++ b/rpc/api.go
@@ -665,10 +665,20 @@ func toFilterOptions(options *FilterOptions) core.FilterOptions {
 
 	opts.Earliest = options.Earliest
 	opts.Latest = options.Latest
-	opts.Topics = make([][][]byte, len(options.Topic))
-	for i, topic := range options.Topic {
-		opts.Topics[i] = fromHex(topic)
+
+	topics := make([][][]byte, len(options.Topics))
+	for i, topicDat := range options.Topics {
+		if slice, ok := topicDat.([]interface{}); ok {
+			topics[i] = make([][]byte, len(slice))
+			for j, topic := range slice {
+				topics[i][j] = fromHex(topic.(string))
+			}
+		} else if str, ok := topicDat.(string); ok {
+			topics[i] = make([][]byte, 1)
+			topics[i][0] = fromHex(str)
+		}
 	}
+	opts.Topics = topics
 
 	return opts
 }
diff --git a/rpc/args.go b/rpc/args.go
index d34cfb2fa81fd6d08beebda132848eadae8a1231..63969e598bc9b6ee15025035bc359032784768b2 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -333,7 +333,7 @@ type FilterOptions struct {
 	Earliest int64
 	Latest   int64
 	Address  interface{}
-	Topic    []interface{}
+	Topics   []interface{}
 	Skip     int
 	Max      int
 }
@@ -360,20 +360,7 @@ func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
 	args.Max = int(ethutil.Big(obj[0].Limit).Int64())
 	args.Skip = int(ethutil.Big(obj[0].Offset).Int64())
 	args.Address = obj[0].Address
-
-	topics := make([][][]byte, len(obj[0].Topics))
-	for i, topicDat := range obj[0].Topics {
-		if slice, ok := topicDat.([]interface{}); ok {
-			topics[i] = make([][]byte, len(slice))
-			for j, topic := range slice {
-				topics[i][j] = fromHex(topic.(string))
-			}
-		} else if str, ok := topicDat.(string); ok {
-			topics[i] = make([][]byte, 1)
-			topics[i][0] = fromHex(str)
-		}
-	}
-	args.Topics = topics
+	args.Topics = obj[0].Topics
 
 	return nil
 }