diff --git a/src/main/java/edu/umd/dawn/common/jwt/Claims.java b/src/main/java/edu/umd/dawn/common/jwt/Claims.java
index 16b4006ac49a859f290e619d4291759848e1f05f..ec6bf4b76a45c7bd7eea77e8f841b4f06569248a 100644
--- a/src/main/java/edu/umd/dawn/common/jwt/Claims.java
+++ b/src/main/java/edu/umd/dawn/common/jwt/Claims.java
@@ -1,6 +1,9 @@
 package edu.umd.dawn.common.jwt;
 
+import com.auth0.jwt.JWTCreator.Builder;
 import com.auth0.jwt.interfaces.DecodedJWT;
+
+import edu.umd.dawn.common.entities.User;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -17,4 +20,13 @@ public class Claims {
     public static Claims build(DecodedJWT jwt) {
         return new Claims(jwt.getClaim("id").asString());
     }
+
+    public static Claims fromUser(User user) {
+        return new Claims(user.getId());
+    }
+
+    public Builder fill(Builder jwtBuilder) {
+        jwtBuilder.withClaim("id", this.userId);
+        return jwtBuilder;
+    }
 }
diff --git a/src/main/java/edu/umd/dawn/common/jwt/JWTUtil.java b/src/main/java/edu/umd/dawn/common/jwt/JWTUtil.java
index 36cfaea4396102b35b95377c03057163d1d76df9..c25651058638343778f4e8136b339cd0958b633b 100644
--- a/src/main/java/edu/umd/dawn/common/jwt/JWTUtil.java
+++ b/src/main/java/edu/umd/dawn/common/jwt/JWTUtil.java
@@ -1,8 +1,15 @@
 package edu.umd.dawn.common.jwt;
 
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
+import java.time.temporal.ChronoUnit;
+
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.interfaces.DecodedJWT;
+
+import edu.umd.dawn.common.entities.User;
 import edu.umd.dawn.common.exceptions.BaseExceptions;
 import edu.umd.dawn.common.exceptions.DawnException;
 import lombok.Getter;
@@ -22,6 +29,11 @@ public class JWTUtil {
         decode();
     }
 
+    public JWTUtil(String accessSecret) {
+        this.accessSecret = accessSecret;
+        initAlgorithm();
+    }
+
     private void initAlgorithm() {
         this.algorithm = Algorithm.HMAC256(accessSecret);
     }
@@ -39,6 +51,16 @@ public class JWTUtil {
         }
     }
 
+    private String create(Claims claims, int expMin) {
+        try {
+            String token = claims.fill(JWT.create()
+            .withIssuer("dawn")).withExpiresAt(LocalDateTime.now().plus(expMin, ChronoUnit.MINUTES).toInstant(ZoneOffset.UTC)).sign(algorithm);
+            return token;
+        } catch (Exception e) {
+            throw new DawnException(BaseExceptions.INVALID_JWT, e);
+        }
+    }
+
     public Claims getClaims() {
         return Claims.build(this);
     }
@@ -46,4 +68,19 @@ public class JWTUtil {
     public static JWTUtil parse(String accessSecret, String jwt) {
         return new JWTUtil(accessSecret, jwt);
     }
+
+    public static String issue(String accessSecret, Claims claims) {
+        JWTUtil util = new JWTUtil(accessSecret);
+        return util.create(claims, 20); // eventually move 20 to be a variable
+    }
+
+    public static String issue(String accessSecret, Claims claims, int expTime) {
+        JWTUtil util = new JWTUtil(accessSecret);
+        return util.create(claims, expTime);
+    }
+
+    public static String issue(String accessSecret, User user, int expTime) {
+        JWTUtil util = new JWTUtil(accessSecret);
+        return util.create(Claims.fromUser(user), expTime);
+    }
 }