diff --git a/opp/core/src/main/java/OPStaff.java b/opp/core/src/main/java/OPStaff.java
index 352781c35f676ad56749cab77548fc95b2f28b6a..c7d085115a10f71837071a3a7ebf936789816dc4 100644
--- a/opp/core/src/main/java/OPStaff.java
+++ b/opp/core/src/main/java/OPStaff.java
@@ -1,6 +1,7 @@
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalTime;
+import java.util.Optional;
 
 public record OPStaff(
         Id<OPStaff> id,
@@ -12,7 +13,7 @@ public record OPStaff(
     /**
      * OPStaff commands
      */
-    public static sealed interface Command permits OPStaff.CreateOPStaff { } //, OPStaff.UpdateOPStaff, OPStaff.DeleteOPStaff
+    public static sealed interface Command permits OPStaff.CreateOPStaff, OPStaff.UpdateOPStaff { } //OPStaff.DeleteOPStaff
 
     /**
      * Create command to create a new Operation
@@ -24,5 +25,11 @@ public record OPStaff(
             Specialty specialty
     ) implements Command {}
 
+    public static record UpdateOPStaff(
+            Id<OPStaff> id,
+            Optional<Role> role,
+            Optional<Specialty> specialty
+    ) implements Command {}
+
 
 }
diff --git a/opp/core/src/main/java/OPStaffServiceImpl.java b/opp/core/src/main/java/OPStaffServiceImpl.java
index b20454256b092ac8d4eaef0a3e71e30fc4d8397c..51d90a53d4991c6023fbd64082ad6f14295f7b33 100644
--- a/opp/core/src/main/java/OPStaffServiceImpl.java
+++ b/opp/core/src/main/java/OPStaffServiceImpl.java
@@ -14,7 +14,7 @@ public class OPStaffServiceImpl implements OPStaffService{
     public OPStaff process(OPStaff.Command cmd) throws Exception {
         return switch (cmd){
             case OPStaff.CreateOPStaff cr -> createOPStaffimpl(cr);
-            //case OPStaff.Update up -> update(up);
+            case OPStaff.UpdateOPStaff up -> updateOPStaffimpl(up);
             //case OPStaff.Delete del -> delete(del);
         };
     }
@@ -32,6 +32,21 @@ public class OPStaffServiceImpl implements OPStaffService{
         return opStaff;
     }
 
+    public OPStaff updateOPStaffimpl(OPStaff.UpdateOPStaff up) throws Exception{
+        OPStaff currentOPStaff = repo.findOPStaff(up.id()).get();
+
+        OPStaff opStaff =
+                new OPStaff(
+                        currentOPStaff.id(),
+                        up.role().orElse(currentOPStaff.role()),
+                        up.specialty().orElse((currentOPStaff.specialty())),
+                        Instant.now()
+                );
+        repo.saveOPStaff(opStaff);
+
+        return opStaff;
+    }
+
 
     public Optional<OPStaff> getOPStaff(Id<OPStaff> id) {
         return repo.findOPStaff(id);
diff --git a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
index c5676800989217ddc05076451f51a33516ff4fb6..0253e0f3e8376dc122d1b44180faff3aada37237 100644
--- a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
+++ b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
@@ -431,11 +431,11 @@ class JDBCRepository implements Repository
             var stmt = conn.createStatement()
     ){
       //TODO
-       /*var sql =
-              findOperation(operation.id()).isPresent() ?
-                      updateSQL(operation) :
-                      insertSQL(operation);*/
-      var sql = insertOPStaffSQL(opStaff);
+       var sql =
+              findOPStaff(opStaff.id()).isPresent() ?
+                      updateOPStaffSQL(opStaff) :
+                      insertOPStaffSQL(opStaff);
+      //var sql = insertOPStaffSQL(opStaff);
 
       stmt.executeUpdate(sql);
 
@@ -522,6 +522,20 @@ class JDBCRepository implements Repository
     );
   }
 
+  /**
+   * Creates the update statement of the given OPStaff for SQL.
+   * @param opStaff the opStaff to turn into an update SQL statement
+   * @return the SQL statement
+   */
+  private static String updateOPStaffSQL(OPStaff opStaff){
+    return
+            "UPDATE opstaff SET " +
+                    "role = " + sqlValue(opStaff.role()) + "," +
+                    "specialty = " + sqlValue(opStaff.specialty()) + "," +
+                    "lastUpdate = " + sqlValue(opStaff.lastUpdate()) + " " +
+                    "WHERE id = " + sqlValue(opStaff.id().value()) + ";";
+  }
+
 }
 
 
diff --git a/opp/jdbc-repo-impl/src/test/java/Tests.java b/opp/jdbc-repo-impl/src/test/java/Tests.java
index 48b190b9af6177e681ad7df96268665bb7ea4db9..651a2a861181ea8ba33a77934cc8a28020cb1d54 100644
--- a/opp/jdbc-repo-impl/src/test/java/Tests.java
+++ b/opp/jdbc-repo-impl/src/test/java/Tests.java
@@ -226,7 +226,7 @@ public final class Tests
     //assertEquals(operation.date(), testDate);
   }
 
-  @Test
+  //@Test
   public void testGetOPStaffs() {
 
     try{
@@ -241,6 +241,19 @@ public final class Tests
     }
     //assertEquals(operation.date(), testDate);
   }
+
+  @Test
+  public void testUpdateOPStaff() throws Exception{
+
+    OPStaff.UpdateOPStaff updateCommand = new OPStaff.UpdateOPStaff(
+            testOPStaff.id(),
+            Optional.empty(),
+            Optional.of(Specialty.Orthopedics)
+    );
+
+    OPStaff updateOPStaff = opStaffService.process(updateCommand);
+
+  }
 }