diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb
index ab9939a112998e734cde06c457d0600bf3b1476b..8eae94aa528b290433e29204e12d2e114d57e106 100644
--- a/app/controllers/invitations_controller.rb
+++ b/app/controllers/invitations_controller.rb
@@ -10,6 +10,8 @@ class InvitationsController < Devise::InvitationsController
   def create
     begin
       params[:user][:aspect_id] = params[:user].delete(:aspects)
+      message = params[:user].delete(:invite_messages)
+      params[:user][:invite_message] = message unless message == ""
       self.resource = current_user.invite_user(params[resource_name])
       flash[:notice] = I18n.t 'invitations.create.sent'
     rescue RuntimeError => e
diff --git a/app/models/user.rb b/app/models/user.rb
index fe03e20fc052d18f02c3e1a0bce548bcef5ac3bb..1ab38745177ff27258d15460eb566976d89950d3 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -38,6 +38,8 @@ class User
   key :visible_post_ids, Array
   key :visible_person_ids, Array
 
+  key :invite_messages, Hash
+
   before_validation :strip_username, :on => :create
   validates_presence_of :username
   validates_uniqueness_of :username, :case_sensitive => false
@@ -290,7 +292,7 @@ class User
         :into => aspect_id
       )
 
-      invited_user = User.invite!(:email => opts[:email], :request => request, :inviter => self)
+      invited_user = User.invite!(:email => opts[:email], :request => request, :inviter => self, :invite_message => opts[:invite_message])
 
       self.invites = self.invites - 1
       self.pending_requests << request
@@ -313,6 +315,10 @@ class User
     else
       invitable.pending_requests << request
       invitable.inviters << inviter
+      message = attributes.delete(:invite_message)
+      if message
+        invitable.invite_messages[inviter.id.to_s] = message
+      end
     end
 
     if invitable.new_record?
diff --git a/app/views/devise/mailer/invitation.html.haml b/app/views/devise/mailer/invitation.html.haml
index 86b01d97a50ac84c152af13ff1449c29a7071a05..c16b6fe8333777fe81c5789e536dbd4060319e24 100644
--- a/app/views/devise/mailer/invitation.html.haml
+++ b/app/views/devise/mailer/invitation.html.haml
@@ -2,6 +2,13 @@
   Hello #{@resource.email}!
 %p
   #{(@resource.inviters.count == 1)? ( @resource.inviters.first.real_name + " has") : (@resource.inviters.map{|inv| inv.real_name}.join(",") + " have")} invited you to #{root_url}, you can accept it through the link below.
+- @resource.inviters.each do |inv|
+  - if @resource.invite_messages[inv.id.to_s]
+    = "#{inv.real_name}:"
+    = @resource.invite_messages[inv.id.to_s]
+    %p
+
+
 %p= link_to 'Accept invitation', accept_invitation_url(@resource, :invitation_token => @resource.invitation_token)
 %p
   If you don't want to accept the invitation, please ignore this email.
diff --git a/app/views/invitations/_new.haml b/app/views/invitations/_new.haml
index 9cd41f05f445c0f237cb88005841e4aa3b99d246..3c20992a0c8acc53743cc61ee67f233b39aa69c1 100644
--- a/app/views/invitations/_new.haml
+++ b/app/views/invitations/_new.haml
@@ -8,6 +8,8 @@
     = invite.select(:aspects, @aspects_dropdown_array)
   - else 
     = invite.select(:aspects, @aspects_dropdown_array, :selected => @aspect.id)
+  Message:
+  = invite.text_area :invite_messages
 
   %p= invite.submit "Send an invitation"
 
diff --git a/public/javascripts/view.js b/public/javascripts/view.js
index 0790d2776fecef2c165afa2332dfc3b743e28bb2..7d903d1e8806aaa9232461353b34075954ca93e5 100644
--- a/public/javascripts/view.js
+++ b/public/javascripts/view.js
@@ -28,7 +28,7 @@ $(document).ready(function(){
   //buttons//////
   $("#add_aspect_button").fancybox({ 'titleShow' : false , 'hideOnOverlayClick' : false });
   $("#add_request_button").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false });
-  $("#invite_user_button").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false });
+  $(".invite_user_button").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false });
   $(".add_request_button").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false });
   $(".question_mark").fancybox({ 'titleShow': false , 'hideOnOverlayClick' : false });
 
diff --git a/spec/models/user/invite_spec.rb b/spec/models/user/invite_spec.rb
index 8b664905bad2be65ec97b7339d4af01fde4fc9bb..eac6a0a05b5e2e51bd41a455fa08aff35b2baaae 100644
--- a/spec/models/user/invite_spec.rb
+++ b/spec/models/user/invite_spec.rb
@@ -46,6 +46,12 @@ describe User do
       invited_user.inviters.include?(inviter).should be_true
     end
 
+    it 'adds an optional message' do
+      invited_user = inviter.invite_user(:email => "marcy@example.com", :invite_message => "How've you been?",:aspect_id => aspect.id)
+      invited_user.reload
+      invited_user.invite_messages[inviter.id.to_s].should == "How've you been?"
+    end
+
 
     it 'adds a pending request to the invited user' do
       invited_user = inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id)