diff --git a/src/main/java/soapserver/repositories/SubscriptionRepository.java b/src/main/java/soapserver/repositories/SubscriptionRepository.java
index e7314b79b445287944339ee453e3f857106c3962..18a2eadab9001140e52d3dfd54dbaee772790155 100644
--- a/src/main/java/soapserver/repositories/SubscriptionRepository.java
+++ b/src/main/java/soapserver/repositories/SubscriptionRepository.java
@@ -91,8 +91,8 @@ public class SubscriptionRepository {
 
       for (int i = 201; i <= 300; i++) {
         Subscription subscription = new Subscription();
-        subscription.setId_user(i);
-        subscription.setExpiration_date(new Timestamp(System.currentTimeMillis() + (1000 * 60 * 60)));
+        subscription.setId_user(i + 1);
+        subscription.setExpiration_date(new Timestamp(System.currentTimeMillis() + (1000 * 60 * 600)));
         session.save(subscription);
       }
 
@@ -123,4 +123,79 @@ public class SubscriptionRepository {
       return false;
     }
   }
+  
+  public String getExpired(int idUser) {
+    try {
+      SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
+      Session session = sessionFactory.getCurrentSession();
+
+      session.beginTransaction();
+
+      CriteriaBuilder builder = session.getCriteriaBuilder();
+      CriteriaQuery<Subscription> criteria = builder.createQuery(Subscription.class);
+      Root<Subscription> root = criteria.from(Subscription.class);
+      criteria.select(root).where(builder.equal(root.get("id_user"), idUser));
+
+      List<Subscription> userSubData = session.createQuery(criteria).getResultList();
+
+      session.getTransaction().commit();
+
+      if (userSubData.size() <= 0) {
+        return "not subscribed";
+      }
+
+      Subscription userSubscription = userSubData.get(0);
+      if (userSubscription == null) {
+        return "not subscribed";
+      }
+
+      // Check expiration time
+      Timestamp expirationDate = userSubscription.getExpiration_date();
+
+      return expirationDate.toString();
+    } catch (Exception e) {
+      System.out.println(e.getMessage());
+      return "error";
+    }
+  }
+
+
+  public boolean extendSubscription(int idUser, int duration) {
+    try {
+      SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
+      Session session = sessionFactory.getCurrentSession();
+
+      session.beginTransaction();
+
+      CriteriaBuilder builder = session.getCriteriaBuilder();
+      CriteriaQuery<Subscription> criteria = builder.createQuery(Subscription.class);
+      Root<Subscription> root = criteria.from(Subscription.class);
+      criteria.select(root).where(builder.equal(root.get("id_user"), idUser));
+
+      List<Subscription> userSubData = session.createQuery(criteria).getResultList();
+
+      session.getTransaction().commit();
+
+      if (userSubData.size() <= 0) {
+        return false;
+      }
+
+      Subscription userSubscription = userSubData.get(0);
+      if (userSubscription == null) {
+        return false;
+      }
+
+      Timestamp expirationDate = userSubscription.getExpiration_date();
+
+      // extend expiration date
+      userSubscription.setExpiration_date(new Timestamp(expirationDate.getTime() + duration ));
+      session.save(userSubscription);
+      session.getTransaction().commit();
+
+      return true;
+    } catch (Exception e) {
+      System.out.println(e.getMessage());
+      return false;
+    }
+  }
 }
diff --git a/src/main/java/soapserver/services/SubscriptionService.java b/src/main/java/soapserver/services/SubscriptionService.java
index 381039d251e8c096378be99a850c419b82b5a94b..aed8fee3e990fdd75bd792bdb018f288c4c18c09 100644
--- a/src/main/java/soapserver/services/SubscriptionService.java
+++ b/src/main/java/soapserver/services/SubscriptionService.java
@@ -32,12 +32,12 @@ public class SubscriptionService {
       return e.getMessage();
     }
   }
-
+  
   @WebMethod
   public String seedSubscription() {
     try {
       boolean success = subscriptionRepo.seedSubscription();
-
+      
       return success ? "success" : "seeding failed";
     } catch (Exception e) {
       System.out.println(e.getMessage());
@@ -57,4 +57,33 @@ public class SubscriptionService {
         return "error";
       }
   }
+  
+  @WebMethod
+  public String getExpired(
+      @WebParam(name = "idUser") int idUser
+    ) {
+    try {
+      String expiredDate = subscriptionRepo.getExpired(idUser);
+  
+      return expiredDate;
+    } catch (Exception e) {
+      System.out.println(e.getMessage());
+      return e.getMessage();
+    }
+  }
+  
+  @WebMethod
+  public String extendSubscription(
+      @WebParam(name = "idUser") int idUser,
+      @WebParam(name = "duration") int duration
+    ) {
+    try {
+      boolean extended = subscriptionRepo.extendSubscription(idUser, duration);
+  
+      return extended ? "extended success" : "extended failed";
+    } catch (Exception e) {
+      System.out.println(e.getMessage());
+      return e.getMessage();
+    }
+  }
 }