diff --git a/smash/web/forms.py b/smash/web/forms.py
index ae861b874122cfc4fb5886b09111c8e4bac4be05..7ff1bc1a001969c4323ad3f40e7eebac6cd1a1be 100644
--- a/smash/web/forms.py
+++ b/smash/web/forms.py
@@ -36,6 +36,14 @@ def validate_subject_nd_number(self, cleaned_data):
                 self.add_error('nd_number', "ND number already in use")
 
 
+def validate_subject_mpower_number(self, cleaned_data):
+    if cleaned_data['mpower_id'] != "":
+        subjects_from_db = Subject.objects.filter(mpower_id=cleaned_data['mpower_id'])
+        if subjects_from_db:
+            if subjects_from_db[0].screening_number != cleaned_data.get('screening_number', ''):
+                self.add_error('mpower_id', "mPower number already in use")
+
+
 class SubjectAddForm(ModelForm):
     date_born = forms.DateField(label="Date of birth",
                                 widget=forms.DateInput(DATEPICKER_DATE_ATTRS, "%Y-%m-%d"),
@@ -81,6 +89,7 @@ class SubjectAddForm(ModelForm):
             if len(subjects_from_db) > 0:
                 self.add_error('screening_number', "Screening number already in use")
         validate_subject_nd_number(self, cleaned_data)
+        validate_subject_mpower_number(self, cleaned_data)
         return cleaned_data
 
     def get_prefix_screening_number(self):
@@ -149,6 +158,7 @@ class SubjectEditForm(ModelForm):
 
     def clean(self):
         validate_subject_nd_number(self, self.cleaned_data)
+        validate_subject_mpower_number(self, self.cleaned_data)
 
     class Meta:
         model = Subject
diff --git a/smash/web/tests/test_SubjectAddForm.py b/smash/web/tests/test_SubjectAddForm.py
index bfdab7a83f04f92cae6ac0519e126016abfb0f2c..77e9c6d6044ed42cc320175d7ec6e9ba98db6938 100644
--- a/smash/web/tests/test_SubjectAddForm.py
+++ b/smash/web/tests/test_SubjectAddForm.py
@@ -62,6 +62,21 @@ class SubjectAddFormTests(TestCase):
         self.assertFalse(validation_status)
         self.assertTrue("nd_number" in form2.errors)
 
+    def test_invalid_mpower_id(self):
+        form_data = self.sample_data
+        form_data['mpower_id'] = "123"
+
+        form = SubjectAddForm(data=form_data, user=self.user)
+        form.is_valid()
+        self.assertTrue(form.is_valid())
+        form.save()
+
+        form_data['screening_number'] = "2"
+        form2 = SubjectAddForm(data=form_data, user=self.user)
+        validation_status = form2.is_valid()
+        self.assertFalse(validation_status)
+        self.assertTrue("mpower_id" in form2.errors)
+
     def test_get_new_screening_number(self):
         prefix = "X-"
         subject = create_subject()
diff --git a/smash/web/tests/test_SubjectEditForm.py b/smash/web/tests/test_SubjectEditForm.py
index f28c88e2d97a7a7341fc9e4a99c4eb74e5c92cf8..bf9fb7314eb8a5109b03ecf8efc90d249fc40663 100644
--- a/smash/web/tests/test_SubjectEditForm.py
+++ b/smash/web/tests/test_SubjectEditForm.py
@@ -57,3 +57,23 @@ class SubjectEditFormTests(TestCase):
 
         save_status = edit_form.is_valid()
         self.assertFalse(save_status)
+
+    def test_invalid_mpower_id_edit(self):
+        self.sample_data['screening_number'] = "001"
+        add_form = SubjectAddForm(data=self.sample_data, user=self.user)
+        subject = add_form.save()
+
+        self.sample_data['mpower_id'] = "mpower_002"
+        self.sample_data['nd_number'] = "nd_002"
+        self.sample_data['screening_number'] = "002"
+        add_form = SubjectAddForm(data=self.sample_data, user=self.user)
+        add_form.save()
+
+        self.sample_data['id'] = subject.id
+        self.sample_data['mpower_id'] = "mpower_002"
+        self.sample_data['nd_number'] = "nd_001"
+        self.sample_data['screening_number'] = "001"
+        edit_form = SubjectEditForm(self.sample_data)
+
+        save_status = edit_form.is_valid()
+        self.assertFalse(save_status)