diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 7a45d186cd7dfe8ff93a51ab13d54825dbd1fad1..27ba92eeb5d44db845b7fbda0a9e34a2b3e4db89 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -21,6 +21,7 @@ class UsersController < ApplicationController
     params[:user].delete(:password) if params[:user][:password].blank?
     params[:user].delete(:password_confirmation) if params[:user][:password].blank? and params[:user][:password_confirmation].blank?
     params[:user].delete(:language) if params[:user][:language].blank?
+    params[:user].delete(:email) if params[:user][:email].blank?
 
     # change email notifications
     if params[:user][:disable_mail]
@@ -39,6 +40,13 @@ class UsersController < ApplicationController
       else
         flash[:error] = I18n.t 'users.update.language_not_changed'
       end
+    # change email
+    elsif params[:user][:email]
+      if @user.update_attributes(:email => params[:user][:email])
+        flash[:notice] = I18n.t 'users.update.email_changed'
+      else
+        flash[:error] = I18n.t 'users.update.email_not_changed'
+      end
     end
 
     redirect_to edit_user_path(@user)
diff --git a/app/helpers/sockets_helper.rb b/app/helpers/sockets_helper.rb
index 8b48069a1cb28d5982bf53f072de10c66ff02255..6ce79653d655ff17ab4f99cd99d5d91617a4ea16 100644
--- a/app/helpers/sockets_helper.rb
+++ b/app/helpers/sockets_helper.rb
@@ -12,6 +12,11 @@ module SocketsHelper
   def action_hash(uid, object, opts={})
     begin
       user = User.find_by_id uid
+      unless user.nil?
+        old_locale = I18n.locale
+        I18n.locale = user.language.to_s
+      end
+      
       if object.is_a? StatusMessage
         post_hash = {:post => object,
           :person => object.person,
@@ -59,7 +64,9 @@ module SocketsHelper
     end
 
     action_hash[:mine?] = object.person && (object.person.owner.id == uid) if object.respond_to?(:person)
-
+    
+    I18n.locale = old_locale unless user.nil?
+    
     action_hash.to_json
   end
 
diff --git a/app/models/user.rb b/app/models/user.rb
index b57131607c14d4e156c44aeec789272b2de90c13..46eb9439249f4172e574e8750fc2d663ace8621e 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -61,7 +61,7 @@ class User
     person.save if person
   end
 
-  attr_accessible :getting_started, :password, :password_confirmation, :language, :disable_mail
+  attr_accessible :getting_started, :password, :password_confirmation, :language, :disable_mail, :email
 
   def strip_and_downcase_username
     if username.present?
@@ -304,7 +304,7 @@ class User
   def update_profile(params)
     if params[:photo]
       params[:photo].update_attributes(:pending => false) if params[:photo].pending
-      params[:image_url] = params[:photo].url
+      params[:image_url] = params[:photo].url(:thumb_large)
       params[:image_url_medium] = params[:photo].url(:thumb_medium)
       params[:image_url_small] = params[:photo].url(:thumb_small)
     end
diff --git a/app/views/users/edit.html.haml b/app/views/users/edit.html.haml
index 3a813eb82ef8ffe3e46f6067793bce00d7a7694e..887b8ad29ebfb7ec059d0990fe2cdcaab14857df 100644
--- a/app/views/users/edit.html.haml
+++ b/app/views/users/edit.html.haml
@@ -37,8 +37,12 @@
   .span-8.last
     %h3
       = t('.your_email')
-    %p
-      = current_user.email
+    = form_for @user do |f|
+      = f.error_messages
+      %p
+        = f.label :email, current_user.email
+        = f.text_field :email
+        = f.submit t('.change_email')
 
   %br
   %br
diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml
index 4f42bb26105421da0a5230042fa9c618d464924c..ab756753429ded9c103fc3ae7cbbe12f216f46ee 100644
--- a/config/locales/diaspora/en.yml
+++ b/config/locales/diaspora/en.yml
@@ -176,6 +176,7 @@ en:
           close_account: "Close Account"
           change_language: "Change Language"
           change_password: "Change Password"
+          change_email: "Change Email"
           new_password: "New Password"
           download_xml: "download my xml"
           download_photos: "download my photos"
@@ -220,6 +221,8 @@ en:
           language_changed: "Language Changed"
           language_not_changed: "Language Change Failed"
           email_notifications_changed: "Language Change Failed"
+          email_changed: "Email Changed"
+          email_not_changed: "Email Change Failed"
       public:
           does_not_exist: "User %{username} does not exist!"
   comments:
diff --git a/public/javascripts/validation.js b/public/javascripts/validation.js
index 24c8fdf2e461678049831e2c804aab75672ce39b..923fb7fce857ef8a886911bdf557d36f45e377b6 100644
--- a/public/javascripts/validation.js
+++ b/public/javascripts/validation.js
@@ -7,6 +7,9 @@ var Validation = {
     username: {
       characters: /^(|[A-Za-z0-9_]{0,32})$/,
       length: [6, 32]
+    }, 
+    email: {
+      characters: /^(([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,}))(, *(([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})))*$/
     }
   },
   events: { 
@@ -15,10 +18,19 @@ var Validation = {
       if(!Validation.rules.username.characters.test(this.value + String.fromCharCode(evt.keyCode))) {
         evt.preventDefault();
       }
+    }, 
+    emailKeypress: function(evt) {
+      if(evt.keyCode === 0) { return; }
+      if(!Validation.rules.email.characters.test(this.value + String.fromCharCode(evt.keyCode))) {
+        $('#user_email').css('border-color', '#8B0000');
+      } else {
+        $('#user_email').css('border-color', '#666666');
+      }
     }
   }
 };
 
 $(function() { 
   $("#user_username").keypress(Validation.events.usernameKeypress);
+  $("#user_email").keypress(Validation.events.emailKeypress);
 });
diff --git a/spec/javascripts/validation-spec.js b/spec/javascripts/validation-spec.js
index ab1aa8931ce378e2e8fb684a10d07fc82190229f..f289f926d05bc345121ad9b76d74d5ddc7f5c7f4 100644
--- a/spec/javascripts/validation-spec.js
+++ b/spec/javascripts/validation-spec.js
@@ -7,6 +7,13 @@ describe("Validation", function() {
         });
       });
     });
+    describe("email", function() {
+      describe("characters", function() {
+         it("is the regex for checking if the input is a valid list of e-mail addresses", function() {
+           expect((typeof Validation.rules.email.characters.test === "function")).toBeTruthy();
+         });
+      });
+    });  
   });
   describe("events", function() { 
     describe("usernameKeypress", function() { 
@@ -16,5 +23,16 @@ describe("Validation", function() {
         expect(Validation.rules.username.characters.test("ffffffffffffffffffffffffffffffffff")).toBeFalsy();
       }); 
     });
+    describe("emailKeypress", function() {
+      it("colors the border red if the input seems to be a invalid list", function() {
+        expect(Validation.rules.email.characters.test("user@example.com")).toBeTruthy();
+        expect(Validation.rules.email.characters.test("user@example.com, user@example.com")).toBeTruthy();
+        expect(Validation.rules.email.characters.test("user@example.com, user@example.com, user@example.com")).toBeTruthy();
+        expect(Validation.rules.email.characters.test("user@example.com user@example.com")).toBeFalsy();
+        expect(Validation.rules.email.characters.test("user@examplecom")).toBeFalsy();
+        expect(Validation.rules.email.characters.test("userexample.com")).toBeFalsy();
+        expect(Validation.rules.email.characters.test("userexamplecom")).toBeFalsy();
+      });
+    });
   });
 });
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 1e43efc2a643cca13be878dcdbebd4dfcc6b5bea..1af1454ab8e6c3400ad6bfeb888e9fdf89ec6566 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -296,7 +296,7 @@ describe User do
       end
       it 'updates image_url' do
         user.update_profile(@params).should be_true
-        user.reload.profile.image_url.should == @photo.absolute_url
+        user.reload.profile.image_url.should == @photo.absolute_url(:thumb_large)
         user.profile.image_url_medium.should == @photo.absolute_url(:thumb_medium)
         user.profile.image_url_small.should == @photo.absolute_url(:thumb_small)
       end