diff --git a/src/command/club/member/memberCommand.ts b/src/command/club/member/memberCommand.ts
index f5c03d1..6d2767e 100644
--- a/src/command/club/member/memberCommand.ts
+++ b/src/command/club/member/memberCommand.ts
@@ -5,6 +5,7 @@ export interface CreateMemberCommand {
   nameaffix: string;
   birthdate: Date;
   internalId?: string;
+  note?: string;
 }
 
 export interface UpdateMemberCommand {
@@ -15,6 +16,7 @@ export interface UpdateMemberCommand {
   nameaffix: string;
   birthdate: Date;
   internalId?: string;
+  note?: string;
 }
 
 export interface DeleteMemberCommand {
diff --git a/src/command/club/member/memberCommandHandler.ts b/src/command/club/member/memberCommandHandler.ts
index 78f1da0..128605d 100644
--- a/src/command/club/member/memberCommandHandler.ts
+++ b/src/command/club/member/memberCommandHandler.ts
@@ -23,6 +23,7 @@ export default abstract class MemberCommandHandler {
         nameaffix: createMember.nameaffix,
         birthdate: createMember.birthdate,
         internalId: createMember.internalId,
+        note: createMember.note,
       })
       .execute()
       .then((result) => {
@@ -49,6 +50,7 @@ export default abstract class MemberCommandHandler {
         nameaffix: updateMember.nameaffix,
         birthdate: updateMember.birthdate,
         internalId: updateMember.internalId,
+        note: updateMember.note,
       })
       .where("id = :id", { id: updateMember.id })
       .execute()
diff --git a/src/command/club/member/memberEducationCommand.ts b/src/command/club/member/memberEducationCommand.ts
new file mode 100644
index 0000000..be28106
--- /dev/null
+++ b/src/command/club/member/memberEducationCommand.ts
@@ -0,0 +1,23 @@
+export interface CreateMemberEducationCommand {
+  start: Date;
+  end?: Date;
+  note?: string;
+  place?: string;
+  memberId: string;
+  educationId: number;
+}
+
+export interface UpdateMemberEducationCommand {
+  id: number;
+  start: Date;
+  end?: Date;
+  note?: string;
+  place?: string;
+  memberId: string;
+  educationId: number;
+}
+
+export interface DeleteMemberEducationCommand {
+  id: number;
+  memberId: string;
+}
diff --git a/src/command/club/member/memberEducationCommandHandler.ts b/src/command/club/member/memberEducationCommandHandler.ts
new file mode 100644
index 0000000..10f0311
--- /dev/null
+++ b/src/command/club/member/memberEducationCommandHandler.ts
@@ -0,0 +1,82 @@
+import { dataSource } from "../../../data-source";
+import { memberEducations } from "../../../entity/club/member/memberEducations";
+import DatabaseActionException from "../../../exceptions/databaseActionException";
+import InternalException from "../../../exceptions/internalException";
+import {
+  CreateMemberEducationCommand,
+  DeleteMemberEducationCommand,
+  UpdateMemberEducationCommand,
+} from "./memberEducationCommand";
+
+export default abstract class MemberEducationCommandHandler {
+  /**
+   * @description create memberEducation
+   * @param {CreateMemberEducationCommand} createMemberEducation
+   * @returns {Promise<number>}
+   */
+  static async create(createMemberEducation: CreateMemberEducationCommand): Promise<number> {
+    return await dataSource
+      .createQueryBuilder()
+      .insert()
+      .into(memberEducations)
+      .values({
+        note: createMemberEducation.note,
+        place: createMemberEducation.place,
+        start: createMemberEducation.start,
+        end: createMemberEducation.end,
+        memberId: createMemberEducation.memberId,
+        educationId: createMemberEducation.educationId,
+      })
+      .execute()
+      .then((result) => {
+        return result.identifiers[0].id;
+      })
+      .catch((err) => {
+        throw new DatabaseActionException("CREATE", "memberEducation", err);
+      });
+  }
+
+  /**
+   * @description update memberEducation
+   * @param {UpdateMemberEducationCommand} updateMemberEducation
+   * @returns {Promise<void>}
+   */
+  static async update(updateMemberEducation: UpdateMemberEducationCommand): Promise<void> {
+    return await dataSource
+      .createQueryBuilder()
+      .update(memberEducations)
+      .set({
+        note: updateMemberEducation.note,
+        start: updateMemberEducation.start,
+        end: updateMemberEducation.end,
+        place: updateMemberEducation.place,
+        educationId: updateMemberEducation.educationId,
+      })
+      .where("id = :id", { id: updateMemberEducation.id })
+      .andWhere("memberId = :memberId", { memberId: updateMemberEducation.memberId })
+      .execute()
+      .then(() => {})
+      .catch((err) => {
+        throw new DatabaseActionException("UPDATE", "memberEducation", err);
+      });
+  }
+
+  /**
+   * @description delete memberEducation
+   * @param {DeleteMemberEducationCommand} deleteMemberEducation
+   * @returns {Promise<void>}
+   */
+  static async delete(deleteMemberEducation: DeleteMemberEducationCommand): Promise<void> {
+    return await dataSource
+      .createQueryBuilder()
+      .delete()
+      .from(memberEducations)
+      .where("id = :id", { id: deleteMemberEducation.id })
+      .andWhere("memberId = :memberId", { memberId: deleteMemberEducation.memberId })
+      .execute()
+      .then(() => {})
+      .catch((err) => {
+        throw new DatabaseActionException("DELETE", "memberEducation", err);
+      });
+  }
+}
diff --git a/src/command/configuration/education/educationCommand.ts b/src/command/configuration/education/educationCommand.ts
new file mode 100644
index 0000000..c0b10ad
--- /dev/null
+++ b/src/command/configuration/education/educationCommand.ts
@@ -0,0 +1,14 @@
+export interface CreateEducationCommand {
+  education: string;
+  description?: string;
+}
+
+export interface UpdateEducationCommand {
+  id: number;
+  education: string;
+  description?: string;
+}
+
+export interface DeleteEducationCommand {
+  id: number;
+}
diff --git a/src/command/configuration/education/educationCommandHandler.ts b/src/command/configuration/education/educationCommandHandler.ts
new file mode 100644
index 0000000..0c1eee9
--- /dev/null
+++ b/src/command/configuration/education/educationCommandHandler.ts
@@ -0,0 +1,68 @@
+import { dataSource } from "../../../data-source";
+import { education } from "../../../entity/configuration/education";
+import DatabaseActionException from "../../../exceptions/databaseActionException";
+import { CreateEducationCommand, DeleteEducationCommand, UpdateEducationCommand } from "./educationCommand";
+
+export default abstract class EducationCommandHandler {
+  /**
+   * @description create education
+   * @param {CreateEducationCommand} createEducation
+   * @returns {Promise<number>}
+   */
+  static async create(createEducation: CreateEducationCommand): Promise<number> {
+    return await dataSource
+      .createQueryBuilder()
+      .insert()
+      .into(education)
+      .values({
+        education: createEducation.education,
+        description: createEducation.description,
+      })
+      .execute()
+      .then((result) => {
+        return result.identifiers[0].id;
+      })
+      .catch((err) => {
+        throw new DatabaseActionException("CREATE", "education", err);
+      });
+  }
+
+  /**
+   * @description update education
+   * @param {UpdateEducationCommand} updateEducation
+   * @returns {Promise<void>}
+   */
+  static async update(updateEducation: UpdateEducationCommand): Promise<void> {
+    return await dataSource
+      .createQueryBuilder()
+      .update(education)
+      .set({
+        education: updateEducation.education,
+        description: updateEducation.description,
+      })
+      .where("id = :id", { id: updateEducation.id })
+      .execute()
+      .then(() => {})
+      .catch((err) => {
+        throw new DatabaseActionException("UPDATE", "education", err);
+      });
+  }
+
+  /**
+   * @description delete education
+   * @param {DeleteEducationCommand} deleteEducation
+   * @returns {Promise<void>}
+   */
+  static async delete(deleteEducation: DeleteEducationCommand): Promise<void> {
+    return await dataSource
+      .createQueryBuilder()
+      .delete()
+      .from(education)
+      .where("id = :id", { id: deleteEducation.id })
+      .execute()
+      .then(() => {})
+      .catch((err) => {
+        throw new DatabaseActionException("DELETE", "education", err);
+      });
+  }
+}
diff --git a/src/controller/admin/club/memberController.ts b/src/controller/admin/club/memberController.ts
index bbdf16a..6301cec 100644
--- a/src/controller/admin/club/memberController.ts
+++ b/src/controller/admin/club/memberController.ts
@@ -49,6 +49,14 @@ import {
 import CommunicationCommandHandler from "../../../command/club/member/communicationCommandHandler";
 import { PdfExport } from "../../../helpers/pdfExport";
 import { PermissionModule } from "../../../type/permissionTypes";
+import MemberEducationFactory from "../../../factory/admin/club/member/memberEducation";
+import MemberEducationService from "../../../service/club/member/memberEducationService";
+import {
+  CreateMemberEducationCommand,
+  DeleteMemberEducationCommand,
+  UpdateMemberEducationCommand,
+} from "../../../command/club/member/memberEducationCommand";
+import MemberEducationCommandHandler from "../../../command/club/member/memberEducationCommandHandler";
 
 /**
  * @description get all members
@@ -144,6 +152,7 @@ export async function getMemberPrintoutById(req: Request, res: Response): Promis
   let qualifications = await MemberQualificationService.getAll(memberId);
   let positions = await MemberExecutivePositionService.getAll(memberId);
   let communications = await CommunicationService.getAll(memberId);
+  let educations = await MemberEducationService.getAll(memberId);
 
   let pdf = await PdfExport.renderFile({
     title: "Mitglieder-Ausdruck",
@@ -157,6 +166,7 @@ export async function getMemberPrintoutById(req: Request, res: Response): Promis
       qualifications,
       positions,
       communications,
+      educations,
     },
   });
 
@@ -276,6 +286,33 @@ export async function getQualificationByMemberAndRecord(req: Request, res: Respo
   res.json(MemberQualificationFactory.mapToSingle(qualification));
 }
 
+/**
+ * @description get educations by member
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function getEducationsByMember(req: Request, res: Response): Promise<any> {
+  const memberId = req.params.memberId;
+  let educations = await MemberEducationService.getAll(memberId);
+
+  res.json(MemberEducationFactory.mapToBase(educations));
+}
+
+/**
+ * @description get education by member and record
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function getEducationByMemberAndRecord(req: Request, res: Response): Promise<any> {
+  const memberId = req.params.memberId;
+  const recordId = parseInt(req.params.id);
+  let education = await MemberEducationService.getById(memberId, recordId);
+
+  res.json(MemberEducationFactory.mapToSingle(education));
+}
+
 /**
  * @description get executive positions by member
  * @param req {Request} Express req object
@@ -343,6 +380,7 @@ export async function createMember(req: Request, res: Response): Promise<any> {
   const nameaffix = req.body.nameaffix;
   const birthdate = req.body.birthdate;
   const internalId = req.body.internalId || null;
+  const note = req.body.note || null;
 
   let createMember: CreateMemberCommand = {
     salutationId,
@@ -351,6 +389,7 @@ export async function createMember(req: Request, res: Response): Promise<any> {
     nameaffix,
     birthdate,
     internalId,
+    note,
   };
   let memberId = await MemberCommandHandler.create(createMember);
 
@@ -426,6 +465,33 @@ export async function addQualificationToMember(req: Request, res: Response): Pro
   res.sendStatus(204);
 }
 
+/**
+ * @description add education to member
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function addEducationToMember(req: Request, res: Response): Promise<any> {
+  const memberId = req.params.memberId;
+  const note = req.body.note;
+  const place = req.body.place;
+  const start = req.body.start;
+  const end = req.body.end || null;
+  const educationId = req.body.educationId;
+
+  let createMemberEducation: CreateMemberEducationCommand = {
+    note,
+    start,
+    end,
+    place,
+    memberId,
+    educationId,
+  };
+  await MemberEducationCommandHandler.create(createMemberEducation);
+
+  res.sendStatus(204);
+}
+
 /**
  * @description add executive positions to member
  * @param req {Request} Express req object
@@ -504,6 +570,7 @@ export async function updateMemberById(req: Request, res: Response): Promise<any
   const nameaffix = req.body.nameaffix;
   const birthdate = req.body.birthdate;
   const internalId = req.body.internalId || null;
+  const note = req.body.note || null;
 
   let updateMember: UpdateMemberCommand = {
     id: memberId,
@@ -513,6 +580,7 @@ export async function updateMemberById(req: Request, res: Response): Promise<any
     nameaffix,
     birthdate,
     internalId,
+    note,
   };
   await MemberCommandHandler.update(updateMember);
 
@@ -602,6 +670,35 @@ export async function updateQualificationOfMember(req: Request, res: Response):
   res.sendStatus(204);
 }
 
+/**
+ * @description update education of member
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function updateEducationOfMember(req: Request, res: Response): Promise<any> {
+  const memberId = req.params.memberId;
+  const recordId = parseInt(req.params.recordId);
+  const start = req.body.start;
+  const end = req.body.end || null;
+  const note = req.body.note;
+  const place = req.body.place;
+  const educationId = req.body.educationId;
+
+  let updateMemberEducation: UpdateMemberEducationCommand = {
+    id: recordId,
+    start,
+    end,
+    note,
+    place,
+    memberId,
+    educationId,
+  };
+  await MemberEducationCommandHandler.update(updateMemberEducation);
+
+  res.sendStatus(204);
+}
+
 /**
  * @description update executive position of member
  * @param req {Request} Express req object
@@ -742,6 +839,25 @@ export async function deleteQualificationOfMember(req: Request, res: Response):
   res.sendStatus(204);
 }
 
+/**
+ * @description delete education from member
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function deleteEducationsOfMember(req: Request, res: Response): Promise<any> {
+  const memberId = req.params.memberId;
+  const recordId = parseInt(req.params.recordId);
+
+  let deleteMemberEducation: DeleteMemberEducationCommand = {
+    id: recordId,
+    memberId,
+  };
+  await MemberEducationCommandHandler.delete(deleteMemberEducation);
+
+  res.sendStatus(204);
+}
+
 /**
  * @description delete executive position from member
  * @param req {Request} Express req object
diff --git a/src/controller/admin/configuration/educationController.ts b/src/controller/admin/configuration/educationController.ts
new file mode 100644
index 0000000..b8f2e70
--- /dev/null
+++ b/src/controller/admin/configuration/educationController.ts
@@ -0,0 +1,91 @@
+import { Request, Response } from "express";
+import EducationService from "../../../service/configuration/education";
+import EducationFactory from "../../../factory/admin/configuration/education";
+import {
+  CreateEducationCommand,
+  DeleteEducationCommand,
+  UpdateEducationCommand,
+} from "../../../command/configuration/education/educationCommand";
+import EducationCommandHandler from "../../../command/configuration/education/educationCommandHandler";
+
+/**
+ * @description get all educations
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function getAllEducations(req: Request, res: Response): Promise<any> {
+  let educations = await EducationService.getAll();
+
+  res.json(EducationFactory.mapToBase(educations));
+}
+
+/**
+ * @description get education by id
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function getEducationById(req: Request, res: Response): Promise<any> {
+  const id = parseInt(req.params.id);
+  let education = await EducationService.getById(id);
+
+  res.json(EducationFactory.mapToSingle(education));
+}
+
+/**
+ * @description create new education
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function createEducation(req: Request, res: Response): Promise<any> {
+  const education = req.body.education;
+  const description = req.body.description;
+
+  let createEducation: CreateEducationCommand = {
+    education: education,
+    description: description,
+  };
+  await EducationCommandHandler.create(createEducation);
+
+  res.sendStatus(204);
+}
+
+/**
+ * @description update education
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function updateEducation(req: Request, res: Response): Promise<any> {
+  const id = parseInt(req.params.id);
+  const education = req.body.education;
+  const description = req.body.description;
+
+  let updateEducation: UpdateEducationCommand = {
+    id: id,
+    education: education,
+    description: description,
+  };
+  await EducationCommandHandler.update(updateEducation);
+
+  res.sendStatus(204);
+}
+
+/**
+ * @description delete education
+ * @param req {Request} Express req object
+ * @param res {Response} Express res object
+ * @returns {Promise<*>}
+ */
+export async function deleteEducation(req: Request, res: Response): Promise<any> {
+  const id = parseInt(req.params.id);
+
+  let deleteEducation: DeleteEducationCommand = {
+    id: id,
+  };
+  await EducationCommandHandler.delete(deleteEducation);
+
+  res.sendStatus(204);
+}
diff --git a/src/data-source.ts b/src/data-source.ts
index f436bf4..7f8a9e0 100644
--- a/src/data-source.ts
+++ b/src/data-source.ts
@@ -58,6 +58,9 @@ import { UserLoginRoutine1746252454922 } from "./migrations/1746252454922-UserLo
 import { SettingsFromEnv_SET1745059495808 } from "./migrations/1745059495808-settingsFromEnv_set";
 import { AddDateToNewsletter1748509435932 } from "./migrations/1748509435932-addDateToNewsletter";
 import { AddMembershipTotalView1748607842929 } from "./migrations/1748607842929-addMembershipTotalView";
+import { education } from "./entity/configuration/education";
+import { memberEducations } from "./entity/club/member/memberEducations";
+import { MemberExtendData1748953828644 } from "./migrations/1748953828644-memberExtendData";
 
 configCheck();
 
@@ -84,6 +87,7 @@ const dataSource = new DataSource({
     communicationType,
     executivePosition,
     membershipStatus,
+    education,
     qualification,
     salutation,
     member,
@@ -91,6 +95,7 @@ const dataSource = new DataSource({
     memberExecutivePositions,
     memberQualifications,
     membership,
+    memberEducations,
     protocol,
     protocolAgenda,
     protocolDecision,
@@ -128,6 +133,7 @@ const dataSource = new DataSource({
     UserLoginRoutine1746252454922,
     AddDateToNewsletter1748509435932,
     AddMembershipTotalView1748607842929,
+    MemberExtendData1748953828644,
   ],
   migrationsRun: true,
   migrationsTransactionMode: "each",
diff --git a/src/entity/club/member/member.ts b/src/entity/club/member/member.ts
index e724155..5f349c3 100644
--- a/src/entity/club/member/member.ts
+++ b/src/entity/club/member/member.ts
@@ -16,6 +16,7 @@ import { memberExecutivePositions } from "./memberExecutivePositions";
 import { communication } from "./communication";
 import { salutation } from "../../configuration/salutation";
 import { getTypeByORM } from "../../../migrations/ormHelper";
+import { memberEducations } from "./memberEducations";
 
 @Entity()
 export class member {
@@ -37,6 +38,9 @@ export class member {
   @Column({ type: "varchar", length: 255, unique: true, nullable: true })
   internalId?: string;
 
+  @Column({ type: "varchar", length: 255, nullable: true })
+  note?: string;
+
   @Column()
   salutationId: number;
 
@@ -66,6 +70,9 @@ export class member {
   @OneToMany(() => memberQualifications, (qualifications) => qualifications.member, { cascade: ["insert"] })
   qualifications: memberQualifications[];
 
+  @OneToMany(() => memberEducations, (educations) => educations.member, { cascade: ["insert"] })
+  educations: memberEducations[];
+
   firstMembershipEntry?: membership;
   lastMembershipEntry?: membership;
   preferredCommunication?: Array<communication>;
diff --git a/src/entity/club/member/memberEducations.ts b/src/entity/club/member/memberEducations.ts
new file mode 100644
index 0000000..614d404
--- /dev/null
+++ b/src/entity/club/member/memberEducations.ts
@@ -0,0 +1,43 @@
+import { Column, ColumnType, Entity, ManyToOne, PrimaryColumn } from "typeorm";
+import { member } from "./member";
+import { education } from "../../configuration/education";
+import { getTypeByORM } from "../../../migrations/ormHelper";
+
+@Entity()
+export class memberEducations {
+  @PrimaryColumn({ generated: "increment", type: "int" })
+  id: number;
+
+  @Column({ type: getTypeByORM("date").type as ColumnType })
+  start: Date;
+
+  @Column({ type: getTypeByORM("date").type as ColumnType, nullable: true })
+  end?: Date;
+
+  @Column({ type: "varchar", length: 255, nullable: true })
+  note?: string;
+
+  @Column({ type: "varchar", length: 255, nullable: true })
+  place?: string;
+
+  @Column()
+  memberId: string;
+
+  @Column()
+  educationId: number;
+
+  @ManyToOne(() => member, (member) => member.awards, {
+    nullable: false,
+    onDelete: "CASCADE",
+    onUpdate: "RESTRICT",
+  })
+  member: member;
+
+  @ManyToOne(() => education, (education) => education.members, {
+    nullable: false,
+    onDelete: "RESTRICT",
+    onUpdate: "RESTRICT",
+    cascade: ["insert"],
+  })
+  education: education;
+}
diff --git a/src/entity/configuration/education.ts b/src/entity/configuration/education.ts
new file mode 100644
index 0000000..e380570
--- /dev/null
+++ b/src/entity/configuration/education.ts
@@ -0,0 +1,17 @@
+import { Column, Entity, OneToMany, PrimaryColumn } from "typeorm";
+import { memberEducations } from "../club/member/memberEducations";
+
+@Entity()
+export class education {
+  @PrimaryColumn({ generated: "increment", type: "int" })
+  id: number;
+
+  @Column({ type: "varchar", length: 255, unique: true })
+  education: string;
+
+  @Column({ type: "varchar", length: 255, nullable: true })
+  description?: string;
+
+  @OneToMany(() => memberEducations, (memberEducations) => memberEducations.education)
+  members: memberEducations[];
+}
diff --git a/src/factory/admin/club/member/member.ts b/src/factory/admin/club/member/member.ts
index 246c0ae..9dd157f 100644
--- a/src/factory/admin/club/member/member.ts
+++ b/src/factory/admin/club/member/member.ts
@@ -20,7 +20,8 @@ export default abstract class MemberFactory {
       lastname: record?.lastname,
       nameaffix: record?.nameaffix,
       birthdate: record?.birthdate,
-      internalId: record.internalId,
+      internalId: record?.internalId,
+      note: record?.note,
       firstMembershipEntry: record?.firstMembershipEntry
         ? MembershipFactory.mapToSingle(record.firstMembershipEntry)
         : null,
diff --git a/src/factory/admin/club/member/memberEducation.ts b/src/factory/admin/club/member/memberEducation.ts
new file mode 100644
index 0000000..407100f
--- /dev/null
+++ b/src/factory/admin/club/member/memberEducation.ts
@@ -0,0 +1,30 @@
+import { memberEducations } from "../../../../entity/club/member/memberEducations";
+import { MemberEducationViewModel } from "../../../../viewmodel/admin/club/member/memberEducation.models";
+
+export default abstract class MemberEducationFactory {
+  /**
+   * @description map record to memberEducation
+   * @param {memberEducation} record
+   * @returns {MemberEducationViewModel}
+   */
+  public static mapToSingle(record: memberEducations): MemberEducationViewModel {
+    return {
+      id: record.id,
+      start: record.start,
+      end: record.end,
+      note: record.note,
+      place: record.place,
+      education: record.education.education,
+      educationId: record.education.id,
+    };
+  }
+
+  /**
+   * @description map records to memberEducation
+   * @param {Array<memberEducation>} records
+   * @returns {Array<MemberEducationViewModel>}
+   */
+  public static mapToBase(records: Array<memberEducations>): Array<MemberEducationViewModel> {
+    return records.map((r) => this.mapToSingle(r));
+  }
+}
diff --git a/src/factory/admin/configuration/education.ts b/src/factory/admin/configuration/education.ts
new file mode 100644
index 0000000..c130a6e
--- /dev/null
+++ b/src/factory/admin/configuration/education.ts
@@ -0,0 +1,26 @@
+import { education } from "../../../entity/configuration/education";
+import { EducationViewModel } from "../../../viewmodel/admin/configuration/education.models";
+
+export default abstract class EducationFactory {
+  /**
+   * @description map record to education
+   * @param {education} record
+   * @returns {AwardViewModel}
+   */
+  public static mapToSingle(record: education): EducationViewModel {
+    return {
+      id: record.id,
+      education: record.education,
+      description: record.description,
+    };
+  }
+
+  /**
+   * @description map records to education
+   * @param {Array<education>} records
+   * @returns {Array<AwardViewModel>}
+   */
+  public static mapToBase(records: Array<education>): Array<EducationViewModel> {
+    return records.map((r) => this.mapToSingle(r));
+  }
+}
diff --git a/src/helpers/backupHelper.ts b/src/helpers/backupHelper.ts
index 2f737ad..42632df 100644
--- a/src/helpers/backupHelper.ts
+++ b/src/helpers/backupHelper.ts
@@ -8,6 +8,7 @@ import DatabaseActionException from "../exceptions/databaseActionException";
 import { availableTemplates } from "../type/templateTypes";
 import SettingHelper from "./settingsHelper";
 import { LoginRoutineEnum } from "../enums/loginRoutineEnum";
+import { education } from "../entity/configuration/education";
 
 export type BackupSection =
   | "member"
@@ -55,6 +56,7 @@ export default abstract class BackupHelper {
       "member_executive_positions",
       "membership",
       "communication",
+      "member_educations",
     ],
     memberBase: [
       "award",
@@ -63,6 +65,7 @@ export default abstract class BackupHelper {
       "membership_status",
       "communication_type",
       "salutation",
+      "education",
     ],
     protocol: [
       "protocol",
@@ -246,6 +249,8 @@ export default abstract class BackupHelper {
       .leftJoin("positions.executivePosition", "executivePosition")
       .leftJoin("member.qualifications", "qualifications")
       .leftJoin("qualifications.qualification", "qualification")
+      .leftJoin("member.educations", "educations")
+      .leftJoin("educations.education", "education")
       .select([
         ...(collectIds ? ["member.id"] : []),
         "member.firstname",
@@ -253,6 +258,7 @@ export default abstract class BackupHelper {
         "member.nameaffix",
         "member.birthdate",
         "member.internalId",
+        "member.note",
       ])
       .addSelect(["salutation.salutation"])
       .addSelect([
@@ -280,6 +286,14 @@ export default abstract class BackupHelper {
         "qualification.qualification",
         "qualification.description",
       ])
+      .addSelect([
+        "educations.start",
+        "educations.end",
+        "educations.place",
+        "educations.note",
+        "education.education",
+        "education.description",
+      ])
       .getMany();
   }
   private static async getMemberBase(): Promise<{ [key: string]: Array<any> }> {
@@ -294,6 +308,7 @@ export default abstract class BackupHelper {
       qualification: await dataSource
         .getRepository("qualification")
         .find({ select: { qualification: true, description: true } }),
+      education: await dataSource.getRepository("education").find({ select: { education: true, description: true } }),
     };
   }
   private static async getProtocol(collectIds: boolean): Promise<Array<any>> {
@@ -344,6 +359,7 @@ export default abstract class BackupHelper {
         "newsletter.newsletterText",
         "newsletter.newsletterSignatur",
         "newsletter.isSent",
+        "newsletter.createdAt",
       ])
       .addSelect(["dates.calendarId", "dates.diffTitle", "dates.diffDescription"])
       .addSelect(["recipients.memberId"])
@@ -534,6 +550,13 @@ export default abstract class BackupHelper {
           .map((d) => ({ ...d, id: undefined })),
         "qualification"
       ),
+      education: uniqBy(
+        data
+          .map((d) => (d.education ?? []).map((c: any) => c.education))
+          .flat()
+          .map((d) => ({ ...d, id: undefined })),
+        "education"
+      ),
     });
 
     let salutation = await this.transactionManager.getRepository("salutation").find();
@@ -541,6 +564,7 @@ export default abstract class BackupHelper {
     let membership = await this.transactionManager.getRepository("membership_status").find();
     let award = await this.transactionManager.getRepository("award").find();
     let qualification = await this.transactionManager.getRepository("qualification").find();
+    let education = await this.transactionManager.getRepository("education").find();
     let position = await this.transactionManager.getRepository("executive_position").find();
     let dataWithMappedIds = data.map((d) => ({
       ...d,
@@ -583,6 +607,13 @@ export default abstract class BackupHelper {
           id: qualification.find((iq) => iq.qualification == q.qualification.qualification)?.id ?? undefined,
         },
       })),
+      educations: (d.educations ?? []).map((e: any) => ({
+        ...e,
+        education: {
+          ...e.education,
+          id: education.find((id) => id.education == e.education.education)?.id ?? undefined,
+        },
+      })),
     }));
     await this.transactionManager.getRepository("member").save(dataWithMappedIds);
   }
@@ -593,6 +624,7 @@ export default abstract class BackupHelper {
     let award = await this.transactionManager.getRepository("award").find();
     let qualification = await this.transactionManager.getRepository("qualification").find();
     let position = await this.transactionManager.getRepository("executive_position").find();
+    let education = await this.transactionManager.getRepository("education").find();
 
     await this.transactionManager
       .createQueryBuilder()
@@ -634,10 +666,19 @@ export default abstract class BackupHelper {
       .insert()
       .into("qualification")
       .values(
-        (data?.["qualification"] ?? []).filter((d) => !qualification.map((q) => q.award).includes(d.qualification))
+        (data?.["qualification"] ?? []).filter(
+          (d) => !qualification.map((q) => q.qualification).includes(d.qualification)
+        )
       )
       .orIgnore()
       .execute();
+    await this.transactionManager
+      .createQueryBuilder()
+      .insert()
+      .into("education")
+      .values((data?.["education"] ?? []).filter((d) => !education.map((q) => q.education).includes(d.education)))
+      .orIgnore()
+      .execute();
   }
   private static async setProtocol(data: Array<any>, collectedIds: boolean): Promise<void> {
     let members = await this.transactionManager.getRepository("member").find();
diff --git a/src/helpers/dynamicQueryBuilder.ts b/src/helpers/dynamicQueryBuilder.ts
index ef9e97e..dd5461d 100644
--- a/src/helpers/dynamicQueryBuilder.ts
+++ b/src/helpers/dynamicQueryBuilder.ts
@@ -17,6 +17,7 @@ export default abstract class DynamicQueryBuilder {
     "memberAwards",
     "memberExecutivePositions",
     "memberQualifications",
+    "memberEducations",
     "membership",
     "memberView",
     "memberExecutivePositionsView",
@@ -293,7 +294,12 @@ export default abstract class DynamicQueryBuilder {
           results.forEach((res) => {
             if (typeof value === "object" && value instanceof Date) {
               res[newKey] = new Date(value).toISOString();
-            } else if (typeof value === "object" && !Array.isArray(value) && !(value instanceof Buffer)) {
+            } else if (
+              typeof value === "object" &&
+              !Array.isArray(value) &&
+              !(value instanceof Buffer) &&
+              value !== null
+            ) {
               let string = "";
               for (const key of Object.keys(value)) {
                 string += `${value[key]} ${key} `;
@@ -302,7 +308,7 @@ export default abstract class DynamicQueryBuilder {
 
               // JSON.stringify(value).replace(/["\\{}]/g, "").replaceAll(",", ", ");
             } else if (String(value) != "undefined") {
-              res[newKey] = String(value);
+              res[newKey] = value !== null ? String(value) : "";
             }
           });
         }
diff --git a/src/migrations/1748953828644-memberExtendData.ts b/src/migrations/1748953828644-memberExtendData.ts
new file mode 100644
index 0000000..4e53466
--- /dev/null
+++ b/src/migrations/1748953828644-memberExtendData.ts
@@ -0,0 +1,34 @@
+import { MigrationInterface, QueryRunner, TableColumn } from "typeorm";
+import {
+  education_table,
+  member_educations_table,
+  member_view_mysql,
+  member_view_postgres,
+  member_view_sqlite,
+} from "./baseSchemaTables/member";
+import { getDefaultByORM, getTypeByORM } from "./ormHelper";
+import { DB_TYPE } from "../env.defaults";
+
+export class MemberExtendData1748953828644 implements MigrationInterface {
+  name = "MemberExtendData1748953828644";
+
+  public async up(queryRunner: QueryRunner): Promise<void> {
+    await queryRunner.createTable(education_table, true, true, true);
+    await queryRunner.createTable(member_educations_table, true, true, true);
+    await queryRunner.addColumn(
+      "member",
+      new TableColumn({ name: "note", ...getTypeByORM("varchar", true), default: getDefaultByORM("null") })
+    );
+
+    await queryRunner.dropView("member_view");
+    if (DB_TYPE == "postgres") await queryRunner.createView(member_view_postgres, true);
+    else if (DB_TYPE == "mysql") await queryRunner.createView(member_view_mysql, true);
+    else if (DB_TYPE == "sqlite") await queryRunner.createView(member_view_sqlite, true);
+  }
+
+  public async down(queryRunner: QueryRunner): Promise<void> {
+    await queryRunner.dropTable(member_educations_table, true, true, true);
+    await queryRunner.dropTable(education_table, true, true, true);
+    await queryRunner.dropColumn("member", "note");
+  }
+}
diff --git a/src/migrations/baseSchemaTables/member.ts b/src/migrations/baseSchemaTables/member.ts
index 8ef428c..4eacb7e 100644
--- a/src/migrations/baseSchemaTables/member.ts
+++ b/src/migrations/baseSchemaTables/member.ts
@@ -51,6 +51,15 @@ export const qualification_table = new Table({
   ],
 });
 
+export const education_table = new Table({
+  name: "education",
+  columns: [
+    { name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
+    { name: "education", ...getTypeByORM("varchar"), isUnique: true },
+    { name: "description", ...getTypeByORM("varchar"), isNullable: true },
+  ],
+});
+
 /** member and relations */
 export const member_table = new Table({
   name: "member",
@@ -222,6 +231,35 @@ export const member_communication_table = new Table({
   ],
 });
 
+export const member_educations_table = new Table({
+  name: "member_educations",
+  columns: [
+    { name: "id", ...getTypeByORM("int"), ...isIncrementPrimary },
+    { name: "start", ...getTypeByORM("date") },
+    { name: "end", ...getTypeByORM("date", true), default: getDefaultByORM("null") },
+    { name: "note", ...getTypeByORM("varchar"), isNullable: true },
+    { name: "place", ...getTypeByORM("varchar"), isNullable: true },
+    { name: "memberId", ...getTypeByORM("uuid") },
+    { name: "educationId", ...getTypeByORM("int") },
+  ],
+  foreignKeys: [
+    new TableForeignKey({
+      columnNames: ["memberId"],
+      referencedTableName: "member",
+      referencedColumnNames: ["id"],
+      onDelete: "CASCADE",
+      onUpdate: "RESTRICT",
+    }),
+    new TableForeignKey({
+      columnNames: ["educationId"],
+      referencedTableName: "education",
+      referencedColumnNames: ["id"],
+      onDelete: "RESTRICT",
+      onUpdate: "RESTRICT",
+    }),
+  ],
+});
+
 /** views */
 export const member_view_mysql = new View({
   name: "member_view",
@@ -229,6 +267,7 @@ export const member_view_mysql = new View({
     SELECT 
       \`member\`.\`id\` AS \`id\`, 
       \`member\`.\`internalId\` AS \`internalId\`, 
+      \`member\`.\`note\` AS \`note\`, 
       \`member\`.\`firstname\` AS \`firstname\`, 
       \`member\`.\`lastname\` AS \`lastname\`, 
       \`member\`.\`nameaffix\` AS \`nameaffix\`, 
@@ -258,6 +297,7 @@ export const member_view_postgres = new View({
     SELECT 
       "member"."id" AS "id", 
       "member"."internalId" AS "internalId", 
+      "member"."note" AS "note",
       "member"."firstname" AS "firstname", 
       "member"."lastname" AS "lastname", 
       "member"."nameaffix" AS "nameaffix", 
@@ -277,6 +317,7 @@ export const member_view_sqlite = new View({
     SELECT 
       member.id AS id, 
       member.internalId AS internalId, 
+      member.note AS note, 
       member.firstname AS firstname, 
       member.lastname AS lastname, 
       member.nameaffix AS nameaffix, 
diff --git a/src/routes/admin/club/member.ts b/src/routes/admin/club/member.ts
index a2b653a..4ceb5f5 100644
--- a/src/routes/admin/club/member.ts
+++ b/src/routes/admin/club/member.ts
@@ -2,12 +2,14 @@ import express, { Request, Response } from "express";
 import {
   addAwardToMember,
   addCommunicationToMember,
+  addEducationToMember,
   addExecutivePositionToMember,
   addMembershipToMember,
   addQualificationToMember,
   createMember,
   deleteAwardOfMember,
   deleteCommunicationOfMember,
+  deleteEducationsOfMember,
   deleteExecutivePositionOfMember,
   deleteMemberById,
   deleteMembershipOfMember,
@@ -17,6 +19,8 @@ import {
   getAwardsByMember,
   getCommunicationByMemberAndRecord,
   getCommunicationsByMember,
+  getEducationByMemberAndRecord,
+  getEducationsByMember,
   getExecutivePositionByMemberAndRecord,
   getExecutivePositionsByMember,
   getMemberById,
@@ -32,6 +36,7 @@ import {
   getQualificationsByMember,
   updateAwardOfMember,
   updateCommunicationOfMember,
+  updateEducationOfMember,
   updateExecutivePositionOfMember,
   updateMemberById,
   updateMembershipOfMember,
@@ -97,6 +102,14 @@ router.get("/:memberId/qualification/:id", async (req: Request, res: Response) =
   await getQualificationByMemberAndRecord(req, res);
 });
 
+router.get("/:memberId/educations", async (req: Request, res: Response) => {
+  await getEducationsByMember(req, res);
+});
+
+router.get("/:memberId/education/:id", async (req: Request, res: Response) => {
+  await getEducationByMemberAndRecord(req, res);
+});
+
 router.get("/:memberId/positions", async (req: Request, res: Response) => {
   await getExecutivePositionsByMember(req, res);
 });
@@ -145,6 +158,14 @@ router.post(
   }
 );
 
+router.post(
+  "/:memberId/education",
+  PermissionHelper.passCheckMiddleware("create", "club", "member"),
+  async (req: Request, res: Response) => {
+    await addEducationToMember(req, res);
+  }
+);
+
 router.post(
   "/:memberId/position",
   PermissionHelper.passCheckMiddleware("create", "club", "member"),
@@ -193,6 +214,14 @@ router.patch(
   }
 );
 
+router.patch(
+  "/:memberId/education/:recordId",
+  PermissionHelper.passCheckMiddleware("update", "club", "member"),
+  async (req: Request, res: Response) => {
+    await updateEducationOfMember(req, res);
+  }
+);
+
 router.patch(
   "/:memberId/position/:recordId",
   PermissionHelper.passCheckMiddleware("update", "club", "member"),
@@ -241,6 +270,14 @@ router.delete(
   }
 );
 
+router.delete(
+  "/:memberId/education/:recordId",
+  PermissionHelper.passCheckMiddleware("delete", "club", "member"),
+  async (req: Request, res: Response) => {
+    await deleteEducationsOfMember(req, res);
+  }
+);
+
 router.delete(
   "/:memberId/position/:recordId",
   PermissionHelper.passCheckMiddleware("delete", "club", "member"),
diff --git a/src/routes/admin/configuration/education.ts b/src/routes/admin/configuration/education.ts
new file mode 100644
index 0000000..8a07628
--- /dev/null
+++ b/src/routes/admin/configuration/education.ts
@@ -0,0 +1,45 @@
+import express, { Request, Response } from "express";
+import {
+  createEducation,
+  deleteEducation,
+  getAllEducations,
+  getEducationById,
+  updateEducation,
+} from "../../../controller/admin/configuration/educationController";
+import PermissionHelper from "../../../helpers/permissionHelper";
+
+var router = express.Router({ mergeParams: true });
+
+router.get("/", async (req: Request, res: Response) => {
+  await getAllEducations(req, res);
+});
+
+router.get("/:id", async (req: Request, res: Response) => {
+  await getEducationById(req, res);
+});
+
+router.post(
+  "/",
+  PermissionHelper.passCheckMiddleware("create", "configuration", "education"),
+  async (req: Request, res: Response) => {
+    await createEducation(req, res);
+  }
+);
+
+router.patch(
+  "/:id",
+  PermissionHelper.passCheckMiddleware("update", "configuration", "education"),
+  async (req: Request, res: Response) => {
+    await updateEducation(req, res);
+  }
+);
+
+router.delete(
+  "/:id",
+  PermissionHelper.passCheckMiddleware("delete", "configuration", "education"),
+  async (req: Request, res: Response) => {
+    await deleteEducation(req, res);
+  }
+);
+
+export default router;
diff --git a/src/routes/admin/index.ts b/src/routes/admin/index.ts
index 4e74012..b306bfc 100644
--- a/src/routes/admin/index.ts
+++ b/src/routes/admin/index.ts
@@ -7,6 +7,7 @@ import communicationType from "./configuration/communicationType";
 import executivePosition from "./configuration/executivePosition";
 import membershipStatus from "./configuration/membershipStatus";
 import qualification from "./configuration/qualification";
+import education from "./configuration/education";
 import salutation from "./configuration/salutation";
 import calendarType from "./configuration/calendarType";
 import queryStore from "./configuration/queryStore";
@@ -70,6 +71,14 @@ router.use(
   ]),
   qualification
 );
+router.use(
+  "/education",
+  PermissionHelper.passCheckSomeMiddleware([
+    { requiredPermission: "read", section: "configuration", module: "education" },
+    { requiredPermission: "read", section: "club", module: "member" },
+  ]),
+  education
+);
 router.use(
   "/salutation",
   PermissionHelper.passCheckSomeMiddleware([
diff --git a/src/service/club/member/memberEducationService.ts b/src/service/club/member/memberEducationService.ts
new file mode 100644
index 0000000..5b98032
--- /dev/null
+++ b/src/service/club/member/memberEducationService.ts
@@ -0,0 +1,49 @@
+import { dataSource } from "../../../data-source";
+import { memberEducations } from "../../../entity/club/member/memberEducations";
+import DatabaseActionException from "../../../exceptions/databaseActionException";
+import InternalException from "../../../exceptions/internalException";
+
+export default abstract class MemberEducationService {
+  /**
+   * @description get all by member id
+   * @param {string} memberId
+   * @returns {Promise<Array<memberEducations>>}
+   */
+  static async getAll(memberId: string): Promise<Array<memberEducations>> {
+    return await dataSource
+      .getRepository(memberEducations)
+      .createQueryBuilder("memberEducations")
+      .leftJoinAndSelect("memberEducations.education", "education")
+      .where("memberEducations.memberId = :memberId", { memberId: memberId })
+      .orderBy("education.education", "ASC")
+      .getMany()
+      .then((res) => {
+        return res;
+      })
+      .catch((err) => {
+        throw new DatabaseActionException("SELECT", "memberEducations", err);
+      });
+  }
+
+  /**
+   * @description get by memberId and recordId
+   * @param {string} memberId
+   * @param {number} recordId
+   * @returns {Promise<Array<member>>}
+   */
+  static async getById(memberId: string, recordId: number): Promise<memberEducations> {
+    return await dataSource
+      .getRepository(memberEducations)
+      .createQueryBuilder("memberEducations")
+      .leftJoinAndSelect("memberEducations.education", "education")
+      .where("memberEducations.memberId = :memberId", { memberId: memberId })
+      .andWhere("memberEducations.id = :recordId", { recordId: recordId })
+      .getOneOrFail()
+      .then((res) => {
+        return res;
+      })
+      .catch((err) => {
+        throw new DatabaseActionException("SELECT", "memberEducations", err);
+      });
+  }
+}
diff --git a/src/service/configuration/education.ts b/src/service/configuration/education.ts
new file mode 100644
index 0000000..b621db3
--- /dev/null
+++ b/src/service/configuration/education.ts
@@ -0,0 +1,41 @@
+import { dataSource } from "../../data-source";
+import { education } from "../../entity/configuration/education";
+import DatabaseActionException from "../../exceptions/databaseActionException";
+
+export default abstract class EducationService {
+  /**
+   * @description get all educations
+   * @returns {Promise<Array<education>>}
+   */
+  static async getAll(): Promise<Array<education>> {
+    return await dataSource
+      .getRepository(education)
+      .createQueryBuilder("education")
+      .orderBy("education", "ASC")
+      .getMany()
+      .then((res) => {
+        return res;
+      })
+      .catch((err) => {
+        throw new DatabaseActionException("SELECT", "education", err);
+      });
+  }
+
+  /**
+   * @description get education by id
+   * @returns {Promise<education>}
+   */
+  static async getById(id: number): Promise<education> {
+    return await dataSource
+      .getRepository(education)
+      .createQueryBuilder("education")
+      .where("education.id = :id", { id: id })
+      .getOneOrFail()
+      .then((res) => {
+        return res;
+      })
+      .catch((err) => {
+        throw new DatabaseActionException("SELECT", "education", err);
+      });
+  }
+}
diff --git a/src/templates/member.body.template.html b/src/templates/member.body.template.html
index 67f8821..6fd781c 100644
--- a/src/templates/member.body.template.html
+++ b/src/templates/member.body.template.html
@@ -58,7 +58,7 @@
     <br />
     {{/each}} {{/if}} {{#if qualifications.length}}
     <br />
-    <h2>Qualifikationen</h2>
+    <h2>Qualifikationen / Funktionen</h2>
     {{#each qualifications}}
     <div>
       <h3>{{this.qualification.qualification}}: {{date this.date}}</h3>
@@ -69,6 +69,19 @@
       {{/if}}
     </div>
     <br />
+    {{/each}} {{/if}} {{#if educations.length}}
+    <br />
+    <h2>Aus-/Fortbildungen</h2>
+    {{#each educations}}
+    <div>
+      <h3>{{this.education.education}}: {{date this.start}}{{#if this.end}} bis {{date this.end}}{{/if}}</h3>
+      {{#if this.place}}
+      <p>Ausbildungsort: {{this.place}}</p>
+      {{/if}}{{#if this.note}}
+      <p>Notiz: {{this.note}}</p>
+      {{/if}}
+    </div>
+    <br />
     {{/each}} {{/if}}
   </body>
   <style>
diff --git a/src/type/permissionTypes.ts b/src/type/permissionTypes.ts
index eff7fd1..013615c 100644
--- a/src/type/permissionTypes.ts
+++ b/src/type/permissionTypes.ts
@@ -13,6 +13,7 @@ export type PermissionModule =
   | "communication_type"
   | "membership_status"
   | "salutation"
+  | "education"
   | "calendar_type"
   | "user"
   | "role"
@@ -70,6 +71,7 @@ export const permissionModules: Array<PermissionModule> = [
   "communication_type",
   "membership_status",
   "salutation",
+  "education",
   "calendar_type",
   "user",
   "role",
@@ -91,6 +93,7 @@ export const sectionsAndModules: SectionsAndModulesObject = {
     "communication_type",
     "membership_status",
     "salutation",
+    "education",
     "calendar_type",
     "query_store",
     "template",
diff --git a/src/viewmodel/admin/club/member/member.models.ts b/src/viewmodel/admin/club/member/member.models.ts
index 2a0f37b..3745d66 100644
--- a/src/viewmodel/admin/club/member/member.models.ts
+++ b/src/viewmodel/admin/club/member/member.models.ts
@@ -15,6 +15,7 @@ export interface MemberViewModel {
   sendNewsletter?: CommunicationViewModel;
   smsAlarming?: Array<CommunicationViewModel>;
   preferredCommunication?: Array<CommunicationViewModel>;
+  note?: string;
 }
 
 export interface MemberStatisticsViewModel {
diff --git a/src/viewmodel/admin/club/member/memberEducation.models.ts b/src/viewmodel/admin/club/member/memberEducation.models.ts
new file mode 100644
index 0000000..4013bce
--- /dev/null
+++ b/src/viewmodel/admin/club/member/memberEducation.models.ts
@@ -0,0 +1,26 @@
+export interface MemberEducationViewModel {
+  id: number;
+  start: Date;
+  end?: Date;
+  place?: string;
+  note?: string;
+  education: string;
+  educationId: number;
+}
+
+export interface CreateMemberEducationViewModel {
+  start: Date;
+  end?: Date;
+  place?: string;
+  note?: string;
+  educationId: number;
+}
+
+export interface UpdateMemberEducationViewModel {
+  id: number;
+  start: Date;
+  end?: Date;
+  place?: string;
+  note?: string;
+  educationId: number;
+}
diff --git a/src/viewmodel/admin/configuration/education.models.ts b/src/viewmodel/admin/configuration/education.models.ts
new file mode 100644
index 0000000..9ccab1f
--- /dev/null
+++ b/src/viewmodel/admin/configuration/education.models.ts
@@ -0,0 +1,16 @@
+export interface EducationViewModel {
+  id: number;
+  education: string;
+  description: string | null;
+}
+
+export interface CreateEducationViewModel {
+  education: string;
+  description: string | null;
+}
+
+export interface UpdateEducationViewModel {
+  id: number;
+  education: string;
+  description: string | null;
+}
diff --git a/src/views/memberView.ts b/src/views/memberView.ts
index 194bade..260e0ff 100644
--- a/src/views/memberView.ts
+++ b/src/views/memberView.ts
@@ -41,7 +41,8 @@ if (DB_TYPE == "postgres") {
       .getRepository(member)
       .createQueryBuilder("member")
       .select("member.id", "id")
-      .select("member.internalId", "internalId")
+      .addSelect("member.internalId", "internalId")
+      .addSelect("member.note", "note")
       .addSelect("member.firstname", "firstname")
       .addSelect("member.lastname", "lastname")
       .addSelect("member.nameaffix", "nameaffix")
@@ -62,6 +63,9 @@ export class memberView {
   @ViewColumn()
   internalId: string;
 
+  @ViewColumn()
+  note: string;
+
   @ViewColumn()
   firstname: string;