diff --git a/src/middlewares/files/deleteFile.ts b/src/middlewares/files/deleteFile.ts
new file mode 100644
index 0000000000000000000000000000000000000000..107a6337e9be7725cd0459771cae9e221c509bb7
--- /dev/null
+++ b/src/middlewares/files/deleteFile.ts
@@ -0,0 +1,27 @@
+import { NextFunction, Request, Response } from "express";
+
+import File from "../../models/FileSchema";
+import Profile from "../../models/ProfileSchema";
+import fs from "fs";
+
+/**
+ * Deletes the file if exists. Careful, doesn't remove reference!
+ */
+const deleteFile = () => async (
+  req: Request,
+  res: Response,
+  next: NextFunction
+) => {
+  try {
+    if (!res.data.value) return next();
+
+    const oldFile = await File.findByIdAndRemove(res.data.value).lean().exec();
+    if (oldFile) fs.unlinkSync(oldFile!.path);
+
+    next();
+  } catch (err) {
+    next(err);
+  }
+};
+
+export default deleteFile;
diff --git a/src/middlewares/user/acceptPicture.ts b/src/middlewares/user/acceptPicture.ts
new file mode 100644
index 0000000000000000000000000000000000000000..507accb88b0378dcd896c6c93a7ae23850a56380
--- /dev/null
+++ b/src/middlewares/user/acceptPicture.ts
@@ -0,0 +1,37 @@
+import { NextFunction, Request, Response } from "express";
+import Profile, { IProfile } from "../../models/ProfileSchema";
+
+/**
+ * userId -> updates the user
+ */
+const acceptPicture = () => async (
+  req: Request,
+  res: Response,
+  next: NextFunction
+) => {
+  try {
+    if (!res.data.profile?.picture)
+      return res.status(400).json({
+        message: "The User doesn't have any unaccepted Profile picture!",
+      });
+
+    await Profile.updateOne(
+      { _id: req.params.userId },
+      {
+        $set: {
+          picture: undefined,
+          acceptedPicture: res.data.profile?.picture,
+        },
+      },
+      { upsert: true, runValidators: true }
+    )
+      .lean()
+      .exec();
+
+    next();
+  } catch (err) {
+    next(err);
+  }
+};
+
+export default acceptPicture;
diff --git a/src/routes/user.ts b/src/routes/user.ts
index d37b39a93e280350b813e36875499025a48c9a2f..2090a1f45c6a9d79752f3ddb23e3c82a34c0a67b 100644
--- a/src/routes/user.ts
+++ b/src/routes/user.ts
@@ -1,7 +1,10 @@
 import { Application } from "express";
+import acceptPicture from "../middlewares/user/acceptPicture";
 import createdResponse from "../middlewares/utils/createdResponse";
+import deleteFile from "../middlewares/files/deleteFile";
 import deleteUser from "../middlewares/user/deleteUser";
 import example from "../middlewares/example";
+import getFieldValue from "../middlewares/utils/getFieldValue";
 import getUser from "../middlewares/user/getUser";
 import getUserWarningsList from "../middlewares/user/getUserWarningsList";
 import getUsersList from "../middlewares/user/getUsersList";
@@ -93,7 +96,16 @@ const usersRoute = (prefix: string, app: Application): void => {
     noContentResponse()
   );
   // Accept/Reject a users picture TODO
-  app.post(`${prefix}/user/:userId/picture/accept`, example());
+  app.post(
+    `${prefix}/user/:userId/picture/accept`,
+    isRegistered(),
+    isStaffOrAdmin(),
+    getUser(),
+    getFieldValue("profile", "acceptedPicture"),
+    deleteFile(),
+    acceptPicture(),
+    noContentResponse()
+  );
   app.post(`${prefix}/user/:userId/picture/reject`, example());
 };