diff --git a/src/main/java/soapserver/repositories/SubscriptionRepository.java b/src/main/java/soapserver/repositories/SubscriptionRepository.java
index 52ad9ed82309bb8c61f9d0201dda1939f12c6b95..4c22e3c64d27dfc5ce5fb0fdda3249de5c9e8abf 100644
--- a/src/main/java/soapserver/repositories/SubscriptionRepository.java
+++ b/src/main/java/soapserver/repositories/SubscriptionRepository.java
@@ -92,7 +92,7 @@ public class SubscriptionRepository {
       for (int i = 0; i < 100; i++) {
         Subscription subscription = new Subscription();
         subscription.setId_user(i + 1);
-        subscription.setExpiration_date(new Timestamp(System.currentTimeMillis() + (1000 * 60)));
+        subscription.setExpiration_date(new Timestamp(System.currentTimeMillis() + (1000 * 60 * 600)));
         session.save(subscription);
       }
 
@@ -104,4 +104,43 @@ public class SubscriptionRepository {
       return false;
     }
   }
+
+  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 f679a168100a3e69ae48d1cd5f84f00c7685d7e4..ea999f94f95eed445f29e41aba504df1ffbf22b7 100644
--- a/src/main/java/soapserver/services/SubscriptionService.java
+++ b/src/main/java/soapserver/services/SubscriptionService.java
@@ -32,16 +32,32 @@ 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());
       return "error";
     }
   }
+  
+  @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();
+    }
+  }
+  
 }