diff --git a/core/serializers/profile.py b/core/serializers/profile.py
index 5d1e599a3c2c58e6fdaecd9393b3ce994de3132a..a7b68bf560210952434e884e7858b9c07b8e0737 100644
--- a/core/serializers/profile.py
+++ b/core/serializers/profile.py
@@ -1,10 +1,51 @@
 from rest_framework import serializers
+from django_countries.serializers import CountryFieldMixin
+from django.contrib.auth.models import User
 
 from core.models.profile import Profile
 
+class UserUpdateSerializer(serializers.Serializer):
+    username = serializers.CharField(required=False)
+    email = serializers.EmailField(required=False)
+
+    def validate(self, data):
+        if 'username' in data and User.objects.filter(username=data['username']).count() != 0:
+            raise serializers.ValidationError({
+                'username': "This username is being used by others."
+            })
+        if 'email' in data and User.objects.filter(username=data['email']).count() != 0:
+            raise serializers.ValidationError({
+                'email': "This email address is being used by others."
+            })
+        return data
+
+    def update(self, instance, validated_data):
+        instance.username = validated_data.get('username', instance.username)
+        instance.email = validated_data.get('email', instance.email)
+        if validated_data.get('email', None):
+            instance.is_active = False
+        instance.save()
+        return instance
+
+
+class ProfileSerializer(CountryFieldMixin, serializers.ModelSerializer):
+    user = UserUpdateSerializer(required=False)
 
-class ProfileSerializer(serializers.ModelSerializer):
-    country = serializers.CharField()
     class Meta:
         model = Profile
         fields = ('user', 'bio', 'birthday', 'country', 'city', 'affiliation', 'photo')
+
+    def update(self, instance, validated_data):
+        user_data = validated_data.get('user', None)
+        if user_data:
+            user = instance.user
+            user_serializer = UserUpdateSerializer(data=user_data)
+            user_serializer.is_valid(raise_exception=True)
+            user_serializer.update(user, user_data)
+        
+        for attr in self.Meta.fields:
+            if attr == 'user':
+                continue
+            setattr(instance, attr, validated_data.get(attr, getattr(instance, attr)))
+        instance.save()
+        return instance
diff --git a/core/signals.py b/core/signals.py
index 565a0a81729237eb4d3d9b50d16cb0605c0332fe..fc3b6af5d9b10d9b0239b841bef77c678865cc41 100644
--- a/core/signals.py
+++ b/core/signals.py
@@ -20,7 +20,7 @@ def create_related_profile(sender, instance, created, *args, **kwargs):
 @receiver(post_save, sender=User)
 def send_activation_email(sender, instance, created, *args, **kwargs):
     # send an e-mail to the user
-    if instance and created:
+    if instance and (created or not instance.is_active):
         context = {
             'current_user': instance,
             'username': instance.username,