diff --git a/go.sum b/go.sum
index 5b5dd18..331fa69 100644
--- a/go.sum
+++ b/go.sum
@@ -7,4 +7,5 @@
 github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/redis/scan.go b/redis/scan.go
index 10c1d26..289cfd9 100644
--- a/redis/scan.go
+++ b/redis/scan.go
@@ -646,16 +646,14 @@
 				continue
 			}
 		}
-		if fv.Kind() == reflect.Ptr {
+		if arg, ok := fv.Interface().(Argument); ok {
+			args = append(args, fs.name, arg.RedisArg())
+		} else if fv.Kind() == reflect.Ptr {
 			if !fv.IsNil() {
 				args = append(args, fs.name, fv.Elem().Interface())
 			}
 		} else {
-			if arg, ok := fv.Interface().(Argument); ok {
-				args = append(args, fs.name, arg.RedisArg())
-			} else {
-				args = append(args, fs.name, fv.Interface())
-			}
+			args = append(args, fs.name, fv.Interface())
 		}
 	}
 	return args
diff --git a/redis/scan_test.go b/redis/scan_test.go
index 8d06b3c..67b1aac 100644
--- a/redis/scan_test.go
+++ b/redis/scan_test.go
@@ -419,12 +419,14 @@
 	// [{Earthbound 1} {Beat 4} {Red 5}]
 }
 
+var now = time.Now()
+
 var argsTests = []struct {
 	title    string
 	actual   redis.Args
 	expected redis.Args
 }{
-	{"struct ptr",
+	{"struct-ptr",
 		redis.Args{}.AddFlat(&struct {
 			I    int               `redis:"i"`
 			U    uint              `redis:"u"`
@@ -444,15 +446,23 @@
 		redis.Args{}.AddFlat(struct{ I int }{123}),
 		redis.Args{"I", 123},
 	},
-	{"struct with RedisArg",
+	{"struct-with-RedisArg-direct",
 		redis.Args{}.AddFlat(struct{ T CustomTime }{CustomTime{Time: time.Unix(1573231058, 0)}}),
 		redis.Args{"T", int64(1573231058)},
 	},
+	{"struct-with-RedisArg-direct-ptr",
+		redis.Args{}.AddFlat(struct{ T *CustomTime }{&CustomTime{Time: time.Unix(1573231058, 0)}}),
+		redis.Args{"T", int64(1573231058)},
+	},
+	{"struct-with-RedisArg-ptr",
+		redis.Args{}.AddFlat(struct{ T *CustomTimePtr }{&CustomTimePtr{Time: time.Unix(1573231058, 0)}}),
+		redis.Args{"T", int64(1573231058)},
+	},
 	{"slice",
 		redis.Args{}.Add(1).AddFlat([]string{"a", "b", "c"}).Add(2),
 		redis.Args{1, "a", "b", "c", 2},
 	},
-	{"struct omitempty",
+	{"struct-omitempty",
 		redis.Args{}.AddFlat(&struct {
 			Sdp *durationArg `redis:"Sdp,omitempty"`
 		}{
@@ -464,12 +474,22 @@
 
 func TestArgs(t *testing.T) {
 	for _, tt := range argsTests {
-		if !reflect.DeepEqual(tt.actual, tt.expected) {
-			t.Fatalf("%s is %v, want %v", tt.title, tt.actual, tt.expected)
-		}
+		t.Run(tt.title, func(t *testing.T) {
+			if !reflect.DeepEqual(tt.actual, tt.expected) {
+				t.Fatalf("is %v, want %v", tt.actual, tt.expected)
+			}
+		})
 	}
 }
 
+type CustomTimePtr struct {
+	time.Time
+}
+
+func (t *CustomTimePtr) RedisArg() interface{} {
+	return t.Unix()
+}
+
 type CustomTime struct {
 	time.Time
 }
