diff --git a/jws/claims.go b/jws/claims.go
index a827ccb..068caa8 100644
--- a/jws/claims.go
+++ b/jws/claims.go
@@ -84,19 +84,19 @@
 
 // Expiration retrieves claim "exp" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.4
-func (c Claims) Expiration() (int64, bool) {
+func (c Claims) Expiration() (float64, bool) {
 	return jwt.Claims(c).Expiration()
 }
 
 // NotBefore retrieves claim "nbf" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.5
-func (c Claims) NotBefore() (int64, bool) {
+func (c Claims) NotBefore() (float64, bool) {
 	return jwt.Claims(c).NotBefore()
 }
 
 // IssuedAt retrieves claim "iat" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.6
-func (c Claims) IssuedAt() (int64, bool) {
+func (c Claims) IssuedAt() (float64, bool) {
 	return jwt.Claims(c).IssuedAt()
 }
 
@@ -161,19 +161,19 @@
 
 // SetExpiration sets claim "exp" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.4
-func (c Claims) SetExpiration(expiration int64) {
+func (c Claims) SetExpiration(expiration float64) {
 	jwt.Claims(c).SetExpiration(expiration)
 }
 
 // SetNotBefore sets claim "nbf" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.5
-func (c Claims) SetNotBefore(notBefore int64) {
+func (c Claims) SetNotBefore(notBefore float64) {
 	jwt.Claims(c).SetNotBefore(notBefore)
 }
 
 // SetIssuedAt sets claim "iat" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.6
-func (c Claims) SetIssuedAt(issuedAt int64) {
+func (c Claims) SetIssuedAt(issuedAt float64) {
 	jwt.Claims(c).SetIssuedAt(issuedAt)
 }
 
diff --git a/jws/jwt.go b/jws/jwt.go
index c8f7a69..51090b4 100644
--- a/jws/jwt.go
+++ b/jws/jwt.go
@@ -67,7 +67,7 @@
 			if err := v1.Validate(j); err != nil {
 				return err
 			}
-			return jwt.Claims(c).Validate(time.Now().Unix(), v1.EXP, v1.NBF)
+			return jwt.Claims(c).Validate(float64(time.Now().Unix()), v1.EXP, v1.NBF)
 		}
 	}
 	return ErrIsNotJWT
@@ -85,7 +85,7 @@
 
 // NewValidator returns a pointer to a jwt.Validator structure containing
 // the info to be used in the validation of a JWT.
-func NewValidator(c Claims, exp, nbf int64, fn func(Claims) error) *jwt.Validator {
+func NewValidator(c Claims, exp, nbf float64, fn func(Claims) error) *jwt.Validator {
 	return &jwt.Validator{
 		Expected: jwt.Claims(c),
 		EXP:      exp,
diff --git a/jws/jwt_test.go b/jws/jwt_test.go
index 91662a0..a8acb10 100644
--- a/jws/jwt_test.go
+++ b/jws/jwt_test.go
@@ -61,7 +61,7 @@
 		t.Error(err)
 	}
 
-	d := time.Now().Add(1 * time.Hour).Unix()
+	d := float64(time.Now().Add(1 * time.Hour).Unix())
 	fn := func(c Claims) error {
 		if c.Get("name") != "Eric" &&
 			c.Get("admin") != true &&
diff --git a/jwt/claims.go b/jwt/claims.go
index 547e4c0..32d499f 100644
--- a/jwt/claims.go
+++ b/jwt/claims.go
@@ -12,7 +12,7 @@
 
 // Validate validates the Claims per the claims found in
 // https://tools.ietf.org/html/rfc7519#section-4.1
-func (c Claims) Validate(now, expLeeway, nbfLeeway int64) error {
+func (c Claims) Validate(now, expLeeway, nbfLeeway float64) error {
 	if exp, ok := c.Expiration(); ok {
 		if !within(exp, expLeeway, now) {
 			return ErrTokenIsExpired
@@ -27,7 +27,7 @@
 	return nil
 }
 
-func within(cur, delta, max int64) bool {
+func within(cur, delta, max float64) bool {
 	return cur+delta < max || cur-delta < max
 }
 
@@ -142,22 +142,22 @@
 
 // Expiration retrieves claim "exp" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.4
-func (c Claims) Expiration() (int64, bool) {
-	v, ok := c.Get("exp").(int64)
+func (c Claims) Expiration() (float64, bool) {
+	v, ok := c.Get("exp").(float64)
 	return v, ok
 }
 
 // NotBefore retrieves claim "nbf" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.5
-func (c Claims) NotBefore() (int64, bool) {
-	v, ok := c.Get("nbf").(int64)
+func (c Claims) NotBefore() (float64, bool) {
+	v, ok := c.Get("nbf").(float64)
 	return v, ok
 }
 
 // IssuedAt retrieves claim "iat" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.6
-func (c Claims) IssuedAt() (int64, bool) {
-	v, ok := c.Get("iat").(int64)
+func (c Claims) IssuedAt() (float64, bool) {
+	v, ok := c.Get("iat").(float64)
 	return v, ok
 }
 
@@ -213,19 +213,19 @@
 
 // SetExpiration sets claim "exp" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.4
-func (c Claims) SetExpiration(expiration int64) {
+func (c Claims) SetExpiration(expiration float64) {
 	c.Set("exp", expiration)
 }
 
 // SetNotBefore sets claim "nbf" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.5
-func (c Claims) SetNotBefore(notBefore int64) {
+func (c Claims) SetNotBefore(notBefore float64) {
 	c.Set("nbf", notBefore)
 }
 
 // SetIssuedAt sets claim "iat" per its type in
 // https://tools.ietf.org/html/rfc7519#section-4.1.6
-func (c Claims) SetIssuedAt(issuedAt int64) {
+func (c Claims) SetIssuedAt(issuedAt float64) {
 	c.Set("iat", issuedAt)
 }
 
diff --git a/jwt/jwt.go b/jwt/jwt.go
index 1c64ef7..dbbf03d 100644
--- a/jwt/jwt.go
+++ b/jwt/jwt.go
@@ -38,8 +38,8 @@
 // Validator represents some of the validation options.
 type Validator struct {
 	Expected Claims       // If non-nil, these are required to match.
-	EXP      int64        // EXPLeeway
-	NBF      int64        // NBFLeeway
+	EXP      float64      // EXPLeeway
+	NBF      float64      // NBFLeeway
 	Fn       ValidateFunc // See ValidateFunc for more information.
 
 	_ struct{}
@@ -114,21 +114,21 @@
 
 // SetExpiration sets the "exp" claim per
 // https://tools.ietf.org/html/rfc7519#section-4.1.4
-func (v *Validator) SetExpiration(exp int64) {
+func (v *Validator) SetExpiration(exp float64) {
 	v.expect()
 	v.Expected.Set("exp", exp)
 }
 
 // SetNotBefore sets the "nbf" claim per
 // https://tools.ietf.org/html/rfc7519#section-4.1.5
-func (v *Validator) SetNotBefore(nbf int64) {
+func (v *Validator) SetNotBefore(nbf float64) {
 	v.expect()
 	v.Expected.Set("nbf", nbf)
 }
 
 // SetIssuedAt sets the "iat" claim per
 // https://tools.ietf.org/html/rfc7519#section-4.1.6
-func (v *Validator) SetIssuedAt(iat int64) {
+func (v *Validator) SetIssuedAt(iat float64) {
 	v.expect()
 	v.Expected.Set("iat", iat)
 }
