diff --git a/src/Models/FAQ.ts b/src/Models/FAQ.ts
index 4dc96b7fccc4e15c5e186ea6057b7746ffcb0ddf..9ad092cb377b3281ba1d5ead053eb5b89f53058f 100644
--- a/src/Models/FAQ.ts
+++ b/src/Models/FAQ.ts
@@ -18,7 +18,6 @@ FAQ.init({
   },
   position: {
     type: DataTypes.INTEGER,
-    unique: true,
   },
   createdBy: {
     type: DataTypes.INTEGER,
diff --git a/src/Services/FAQService.ts b/src/Services/FAQService.ts
index 8734d1ca31f91b438d16cf9f87ba945ca760c7fe..6b56f396b10426e85af474f801a152b512f9f762 100644
--- a/src/Services/FAQService.ts
+++ b/src/Services/FAQService.ts
@@ -10,34 +10,76 @@ const list = (): Promise<FAQ[]> => FAQ.findAll({
   order: ['position'],
 });
 
-const create = (createDto: FAQDTO): Promise<FAQ> => FAQ.create(createDto);
+const correctFAQs = async (faqs: FAQ[]): Promise<void> => new Promise((resolve, reject) => {
+  const { length } = faqs;
+  const sorted: FAQ[] = faqs.sort((faqA: FAQ, faqB: FAQ) => Number(faqA.get('position')) - Number(faqB.get('position')));
+  const promises: Promise<FAQ>[] = [];
+  for (let index = 0; index < length; index += 1) {
+    const faq: FAQ = sorted[index];
+    promises.push(faq.update({
+      position: index + 1,
+    }));
+  }
+  return Promise.all(promises)
+    .then(() => resolve())
+    .catch(() => reject());
+});
+
+const create = async (createDto: FAQDTO): Promise<FAQ> => {
+  const faqs: FAQ[] = await FAQ.findAll({
+    where: {
+      deletedAt: null,
+    },
+    order: ['position'],
+  });
+  const newFaq: FAQ = await FAQ.create(createDto);
+  if (faqs.length + 1 === Number(newFaq.get('position'))) {
+    newFaq.set('position', Number(newFaq.get('position')) + 0.5);
+  } else {
+    newFaq.set('position', Number(newFaq.get('position')) - 0.5);
+  }
+
+  faqs.push(newFaq);
+  await correctFAQs(faqs);
+
+  return newFaq;
+};
 
 const update = async (id: number, createDto: FAQDTO): Promise<FAQ | null> => {
-  const faq: FAQ | null = await FAQ.findOne({
+  const toUpdate: FAQ | null = await FAQ.findOne({
     where: {
       id,
       deletedAt: null,
     },
   });
-  if (!faq) {
+  if (!toUpdate) {
     return null;
   }
   const { question, answer, position } = createDto;
-  const positionFaq: FAQ | null = await FAQ.findOne({
+  await toUpdate.update({
+    question, answer, position,
+  });
+
+  const faqs: FAQ[] = await FAQ.findAll({
     where: {
       id: {
-        [Op.ne]: id,
+        [Op.not]: Number(toUpdate.get('id')),
       },
-      position,
       deletedAt: null,
     },
+    order: ['position'],
   });
-  if (positionFaq) {
-    return null;
+
+  if (faqs.length + 1 === Number(toUpdate.get('position'))) {
+    toUpdate.set('position', Number(toUpdate.get('position')) + 0.5);
+  } else {
+    toUpdate.set('position', Number(toUpdate.get('position')) - 0.5);
   }
-  return faq.update({
-    question, answer, position,
-  });
+
+  faqs.push(toUpdate);
+  await correctFAQs(faqs);
+
+  return toUpdate;
 };
 
 const deleteFAQ = async (id: number): Promise<boolean> => {
@@ -53,6 +95,15 @@ const deleteFAQ = async (id: number): Promise<boolean> => {
   await faq.update({
     deletedAt: new Date(),
   });
+
+  const faqs: FAQ[] = await FAQ.findAll({
+    where: {
+      deletedAt: null,
+    },
+    order: ['position'],
+  });
+  await correctFAQs(faqs);
+
   return true;
 };