diff --git a/opp/core/src/main/java/Repository.java b/opp/core/src/main/java/Repository.java
index 85053f7b13e188408695ae0da9db7ca6c710fb87..0ed87a3d80a9bbd0bd333c761d2bbcdf8d6c3803 100644
--- a/opp/core/src/main/java/Repository.java
+++ b/opp/core/src/main/java/Repository.java
@@ -83,4 +83,11 @@ public interface Repository {
     void saveOperationTeam(OperationTeam operationTeam) throws Exception;
 
     OperationTeam deleteOperationTeam(Id<OperationTeam> id) throws SQLException;
+
+
+
+
+    Id<TeamMember> teamMemberId();
+
+    void saveTeamMember(TeamMember teamMember) throws Exception;
 }
diff --git a/opp/core/src/main/java/TeamMember.java b/opp/core/src/main/java/TeamMember.java
new file mode 100644
index 0000000000000000000000000000000000000000..7055ac5c2caf3c0e0ee41051dc2c02749a67b497
--- /dev/null
+++ b/opp/core/src/main/java/TeamMember.java
@@ -0,0 +1,26 @@
+import java.time.Instant;
+
+public record TeamMember (
+
+    Id<TeamMember> teamMemberId,
+
+    Id<OperationTeam> operationTeamId,
+
+    Id<OPStaff> opStaffId,
+
+    Instant lastUpdate
+) {
+
+    public sealed interface Command permits TeamMember.AssignStaff, TeamMember.RemoveStaff{}
+
+    public static record AssignStaff(
+            Id<OperationTeam> operationTeamId,
+            Id<OPStaff> opStaffId
+    ) implements TeamMember.Command {}
+
+    public static record RemoveStaff(
+            Id<OperationTeam> operationTeamId,
+            Id<OPStaff> opStaffId
+    ) implements TeamMember.Command {}
+
+}
diff --git a/opp/core/src/main/java/TeamMemberImpl.java b/opp/core/src/main/java/TeamMemberImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..d4ea4062d3a46a872ecce7c866a039a8dce6dcdb
--- /dev/null
+++ b/opp/core/src/main/java/TeamMemberImpl.java
@@ -0,0 +1,39 @@
+import java.time.Instant;
+
+public class TeamMemberImpl implements TeamMemberService{
+
+    private final Repository repo;
+
+    public TeamMemberImpl(Repository repo) {
+        this.repo = repo;
+    }
+
+    public TeamMember process(TeamMember.Command cmd) throws Exception {
+        return switch(cmd){
+            case TeamMember.AssignStaff as -> assignStaffimpl(as);
+            case TeamMember.RemoveStaff rs -> removeStaffimpl(rs);
+        };
+    }
+
+    private TeamMember assignStaffimpl(TeamMember.AssignStaff as) {
+        TeamMember teammember =
+                new TeamMember(
+                        repo.teamMemberId(),
+                        as.operationTeamId(),
+                        as.opStaffId(),
+                        Instant.now()
+                );
+        return teammember;
+    }
+
+    private TeamMember removeStaffimpl(TeamMember.RemoveStaff rs) {
+        TeamMember teammember =
+                new TeamMember(
+                        repo.teamMemberId(),
+                        rs.operationTeamId(),
+                        rs.opStaffId(),
+                        Instant.now()
+                );
+        return teammember;
+    }
+}
diff --git a/opp/core/src/main/java/TeamMemberService.java b/opp/core/src/main/java/TeamMemberService.java
new file mode 100644
index 0000000000000000000000000000000000000000..faa401bdeaf0af240dd633a5c07195297be73a8a
--- /dev/null
+++ b/opp/core/src/main/java/TeamMemberService.java
@@ -0,0 +1,4 @@
+public interface TeamMemberService {
+
+    public TeamMember process(TeamMember.Command cmd) throws Exception;
+}
diff --git a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
index f5361dbc9274bf87f44b138c4a32a10ca29595b4..83ee348b6c6cccff5f8da5b303de725a128689b0 100644
--- a/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
+++ b/opp/jdbc-repo-impl/src/main/java/JDBCRepository.java
@@ -52,6 +52,7 @@ class JDBCRepository implements Repository
       stmt.execute(CREATE_OPERATION_TABLE);
       stmt.execute(CREATE_OPSTAFF_TABLE);
       stmt.execute(CREATE_OPERATIONTEAM_TABLE);
+      stmt.execute(CREATE_TEAMMEMBER_TABLE);
 
     } catch (SQLException e){
       throw new RuntimeException(e);
@@ -622,6 +623,66 @@ class JDBCRepository implements Repository
     );
   """;
 
+
+
+
+
+  /**
+   * Returns a new generated ID in the teammember-SQLTable
+   * If the generated ID is already used, generate another one.
+   * @return teammemberID
+   */
+  @Override
+  public Id<TeamMember> teamMemberId() {
+
+    var id = new Id<TeamMember>(randomUUID().toString());
+
+    return id; //TODO
+    // findOperation(id).isEmpty() ? id : operationId();
+  }
+
+  public void saveTeamMember(TeamMember teamMember) throws Exception{
+
+    try(
+            var stmt = conn.createStatement()
+    ){
+      //TODO
+      /*var sql =
+              findOPStaff(opStaff.id()).isPresent() ?
+                      updateOPStaffSQL(opStaff) :
+                      insertOPStaffSQL(opStaff);*/
+      var sql = saveTeamMemberSQL(teamMember);
+
+      stmt.executeUpdate(sql);
+
+    }catch(SQLException e){
+      throw new RuntimeException(e);
+    }
+  }
+
+  private static String saveTeamMemberSQL(TeamMember teamMember){
+    return
+            "INSERT INTO teammember(" +
+                    "id,operationteamid,opstaffid,lastUpdate" +
+                    ") VALUES (" +
+                    sqlValue(teamMember.teamMemberId().value()) + "," +
+                    sqlValue(teamMember.operationTeamId()) + "," +
+                    sqlValue(teamMember.opStaffId()) + "," +
+                    sqlValue(teamMember.lastUpdate()) +
+                    ");";
+  }
+
+  private static final String CREATE_TEAMMEMBER_TABLE = """
+    CREATE TABLE IF NOT EXISTS teammember(
+      id VARCHAR(50) PRIMARY KEY,
+      operationteamid VARCHAR(50),
+      opstaffid VARCHAR(50),
+      lastUpdate TIMESTAMP NOT NULL,
+      FOREIGN KEY (operationteamid) REFERENCES operationteam(id),
+      FOREIGN KEY (opstaffid) REFERENCES opstaff(id)
+    );
+  """;
+
 }
 
 
diff --git a/opp/jdbc-repo-impl/src/test/java/Tests.java b/opp/jdbc-repo-impl/src/test/java/Tests.java
index 0a0deaede551a43ffea2917e660ef7e510c03f72..29eb524d10ba85770a33bad1e99fd7d13aedd874 100644
--- a/opp/jdbc-repo-impl/src/test/java/Tests.java
+++ b/opp/jdbc-repo-impl/src/test/java/Tests.java
@@ -29,6 +29,10 @@ public final class Tests
 
   private static OperationTeamService operationTeamService;
 
+  private static TeamMember testTeamMember = null;
+
+  private static TeamMemberService teamMemberService;
+
   @BeforeClass
   public static void init() throws Exception {
 
@@ -57,14 +61,21 @@ public final class Tests
 
 
     testOperationTeam = new OperationTeam(
-            new Id<>("1212121212121"),
-            ("Cooles Team"),
+            new Id<>("31313131"),
+            ("NochCooler"),
             Instant.now()
     );
 
     operationTeamService = new OperationTeamImpl(repo) {
     };
 
+    testTeamMember = new TeamMember(
+            new Id<>("newTeamMember1"),
+            testOperationTeam.operationTeamId(),
+            testOPStaff.id(),
+            Instant.now()
+    );
+
   }
 
   //@Test
@@ -282,7 +293,7 @@ public final class Tests
 
   }
 
-  @Test
+  //@Test
   public void testCreateOperationTeam() throws Exception{
 
     try {
@@ -292,7 +303,7 @@ public final class Tests
     }
   }
 
-  @Test
+  //@Test
   public void testDeleteOperationTeam() throws Exception{
 
     var id = new Id<OperationTeam>("1212");
@@ -302,6 +313,17 @@ public final class Tests
     );
 
     OperationTeam deleteOperationTeam = operationTeamService.process(deleteCommand);
+  }
+
+  @Test
+  public void testInsertTeamMember1() throws Exception{
+
+    try {
+      repo.saveTeamMember(testTeamMember);
+    } catch (Exception e){
+      e.printStackTrace();
+    }
+
 
   }