diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 9b41b1fc9b215d11e9d8a566fd4e1abf8ce27b45..0ee354dfbc87e6f117384df434e3c1ab4b559b63 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -4,6 +4,7 @@
 
 class UsersController < ApplicationController
   require File.expand_path('../../../lib/diaspora/ostatus_builder', __FILE__)
+  require File.expand_path('../../../lib/diaspora/exporter', __FILE__)
 
   before_filter :authenticate_user!, :except => [:new, :create, :public]
 
@@ -56,6 +57,11 @@ class UsersController < ApplicationController
     end
   end
 
+  def export
+    exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML)
+    render :xml => exporter.execute(current_user) 
+  end
+
   private
   def prep_image_url(params)
     url = APP_CONFIG[:pod_url].chop if APP_CONFIG[:pod_url][-1,1] == '/'
diff --git a/app/views/photos/edit.html.haml b/app/views/photos/edit.html.haml
index 06556039cc862511b00fbead532de680cdd64149..e70030562a16336d31f7227006e2c569d012924f 100644
--- a/app/views/photos/edit.html.haml
+++ b/app/views/photos/edit.html.haml
@@ -16,6 +16,7 @@
     = p.label :caption
     = p.text_field :caption, :value => @photo.caption
     = p.submit
+  %div{:class => 'clear'}
 
   #content_bottom
     .back
diff --git a/app/views/photos/show.html.haml b/app/views/photos/show.html.haml
index 787f5861dfc85029c8d4682e9272b2fb10d7546d..53cda49bafd8bd7f6e8380ebebe9ea00acbfb4b9 100644
--- a/app/views/photos/show.html.haml
+++ b/app/views/photos/show.html.haml
@@ -6,14 +6,56 @@
   $(document).keydown(function(e){
     switch(e.keyCode) {
     case 37:
-      window.location.replace( "#{url_to_prev(@photo,@album)}" );
+      if(!$("textarea").hasClass("hasfocus")){//prevent redirect if textarea has focus
+        window.location.replace( "#{url_to_prev(@photo,@album)}" );
+      }
       break;
     case 39:
-      window.location.replace( "#{url_to_next(@photo,@album)}" );
+      if(!$("textarea").hasClass("hasfocus")){
+        window.location.replace( "#{url_to_next(@photo,@album)}" );
+      }
       break;
     }
   });
 
+  $(document).ready(function(){
+    //add a clas to verify if a textarea has focus
+    $("textarea").live('focus',function(){
+      $(this).addClass("hasfocus");
+    });
+    $("textarea").live('blur',function(){
+      $(this).removeClass("hasfocus");
+    });
+
+    //show form to add description
+    $(".edit-desc").click(function(){
+      $(".edit_photo").toggle(); 
+      //$(".caption").toggle();
+    });
+
+    //Add a description with ajax request
+    $("#photo_submit").click(function(evenet){
+      event.preventDefault();
+      var method = $(".edit_photo").attr("method");
+      var url = $(".edit_photo").attr("action");
+      var data = $(".edit_photo").serialize();
+      $(".description").text($("#photo_caption").val());
+      //$(".caption").toggle();
+      $(".edit_photo").toggle();
+
+        $.ajax({  
+          type: method,
+          url: url,  
+          data: data,  
+          success: function(response){  
+            $("#add-description").remove();
+          }
+        });
+
+    });
+
+  });//end document ready
+
 = content_for :page_title do
   = link_to "◂ #{@photo.album.name}", @photo.album
 
@@ -38,7 +80,21 @@
   #show_photo
     = linked_scaled_photo @photo, @album
     .caption
-      = @photo.caption
+      -if current_user.owns? @album
+        -if @photo.caption and @photo.caption != ""
+          = link_to 'Edit','javascript:void(0)', :id => "edit-desc", :class => "edit-desc"
+      .description
+        = @photo.caption
+
+    -if current_user.owns? @album
+      %div{:class => 'clear'}
+      -if !@photo.caption or @photo.caption == ""
+        = link_to 'Add a description','javascript:void(0)', :id => "add-description", :class => "edit-desc"
+
+    = form_for @photo do |p|
+      = p.text_field :caption, :value => @photo.caption
+      = p.submit
+      %div{:class => 'clear'}
 
   #content_bottom
     .back
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 15d1fc2bba372ae28e8260a22b0563d0dd401af7..d848ad4e9943d0851d7bfea24d83602af9443a9f 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -24,15 +24,15 @@ Diaspora::Application.configure do
   config.active_support.deprecation = :log
   config.middleware.use MongoMapper::ClearDevMemory
   #config.threadsafe!
-    config.action_mailer.delivery_method = :smtp
-  config.action_mailer.default_url_options = {:host => 'localhost:3000'}
+  config.action_mailer.delivery_method = :smtp
+  config.action_mailer.default_url_options = {:host => APP_CONFIG[:terse_pod_url]}
   config.action_mailer.smtp_settings = {
-    :address => 'smtp.gmail.com',
-    :port => 587,
-    :domain => 'mail.joindiaspora.com',
-    :authentication => 'plain',
-    :user_name => 'diaspora-pivots@joindiaspora.com',
-    :password => "xy289|]G+R*-kA",
+    :address => APP_CONFIG[:smtp_address],
+    :port => APP_CONFIG[:smtp_port],
+    :domain => APP_CONFIG[:smtp_domain],
+    :authentication => APP_CONFIG[:smtp_authentication],
+    :user_name => APP_CONFIG[:smtp_username],
+    :password => APP_CONFIG[:smtp_password],
     :enable_starttls_auto => true
   }
 end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index cb13c1d1c1222783cc0c979a14e8164930d85fb8..6b081b164741032c71c77e2e248b169175d2b9cc 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -49,14 +49,14 @@ Diaspora::Application.configure do
   config.threadsafe!
 
   config.action_mailer.delivery_method = :smtp
-  config.action_mailer.default_url_options = {:host => 'pivots.joindiaspora.com'}
+  config.action_mailer.default_url_options = {:host => APP_CONFIG[:terse_pod_url]}
   config.action_mailer.smtp_settings = {
-    :address => 'smtp.gmail.com',
-    :port => 587,
-    :domain => 'mail.joindiaspora.com',
-    :authentication => 'plain',
-    :user_name => 'diaspora-pivots@joindiaspora.com',
-    :password => "xy289|]G+R*-kA",
+    :address => APP_CONFIG[:smtp_address],
+    :port => APP_CONFIG[:smtp_port],
+    :domain => APP_CONFIG[:smtp_domain],
+    :authentication => APP_CONFIG[:smtp_authentication],
+    :user_name => APP_CONFIG[:smtp_username],
+    :password => APP_CONFIG[:smtp_password],
     :enable_starttls_auto => true
   }
 end
diff --git a/config/routes.rb b/config/routes.rb
index 12fae72e6c4af839372002e29e02d0b476a08680..6f9f529db43e75481b7a9e414fcc2a990441082e 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -10,9 +10,12 @@ Diaspora::Application.routes.draw do
   resources :photos,          :except => [:index]
   resources :albums
 
+  devise_for :users, :controllers => {:registrations => "registrations",
+                                      :password      => "devise/passwords"}
   # added public route to user
   match 'public/:username', :to => 'users#public'
-  resources :users,               :except => [:create, :new, :show]
+  match 'users/export',     :to => 'users#export'
+  resources :users,         :except => [:create, :new, :show]
 
   match 'aspects/move_friends', :to => 'aspects#move_friends', :as => 'move_friends'
   match 'aspects/move_friend',  :to => 'aspects#move_friend', :as => 'move_friend'
@@ -31,7 +34,6 @@ Diaspora::Application.routes.draw do
   match 'set_profile_photo',  :to   => "dev_utilities#set_profile_photo"
   #routes for devise, not really sure you will need to mess with this in the future, lets put default,
   #non mutable stuff in anohter file
-  devise_for :users, :controllers => {:registrations => "registrations"}
   match 'login',  :to => 'devise/sessions#new',      :as => "new_user_session"
   match 'logout', :to => 'devise/sessions#destroy',  :as => "destroy_user_session"
   match 'signup', :to => 'registrations#new',        :as => "new_user_registration"
diff --git a/lib/diaspora/exporter.rb b/lib/diaspora/exporter.rb
index 9e2f719a52af84128222aea0b6f2a7e06e95acaa..106c94bb0d5bfc52184b1c61a31a86488e0d5b21 100644
--- a/lib/diaspora/exporter.rb
+++ b/lib/diaspora/exporter.rb
@@ -4,11 +4,6 @@
 
 module Diaspora
 
-  def self.bone(user)
-    exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML)
-    exporter.execute(user)
-  end
-
   class Exporter
     def initialize(strategy)
       self.class.send(:include, strategy)
@@ -22,7 +17,7 @@ module Diaspora
           xml.user {
             xml.username user.username
             xml.serialized_private_key user.serialized_private_key 
-            xml.person user.person.to_xml
+            xml.parent << user.person.to_xml
 
             xml.aspects {
               user.aspects.each do |aspect|
@@ -36,8 +31,14 @@ module Diaspora
                     end
                   }
                   xml.posts {
-                    aspect.posts.each do |post|
-                      xml.post post.to_xml if post.respond_to? :to_xml
+                    aspect.posts.find_all_by_person_id(user.person.id).each do |post|
+                      post_doc = post.to_xml
+                      
+                      post.comments.each do |comment|
+                        post_doc << comment.to_xml
+                      end
+
+                      xml.post post_doc
                     end
                   }
                 }
diff --git a/spec/lib/exporter_spec.rb b/spec/lib/exporter_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..2831b8ef76c2684fe0b5ebfb52b703ea19b2ef7f
--- /dev/null
+++ b/spec/lib/exporter_spec.rb
@@ -0,0 +1,33 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3.  See
+#   the COPYRIGHT file.
+
+require 'spec_helper'
+require File.dirname(__FILE__) + '/../../lib/diaspora/exporter'
+
+describe Diaspora::Exporter do
+
+  let!(:user1) { Factory(:user) }
+  let!(:user2) { Factory(:user) }
+
+  let(:aspect1) { user1.aspect(:name => "Work")   }
+  let(:aspect2) { user2.aspect(:name => "Family") }
+
+  let!(:status_message1) { user1.post(:status_message, :message => "One", :public => true, :to => aspect1.id) }
+  let!(:status_message2) { user1.post(:status_message, :message => "Two", :public => true, :to => aspect1.id) }
+  let!(:status_message3) { user2.post(:status_message, :message => "Three", :public => false, :to => aspect2.id) }
+
+  let!(:exported) { Diaspora::Exporter.new(Diaspora::Exporters::XML).execute(user1) }
+
+  it 'should include a users posts' do
+    exported.should include status_message1.to_xml.to_s
+    exported.should include status_message2.to_xml.to_s
+    exported.should_not include status_message3.to_xml.to_s
+  end
+
+  it 'should include a users private key' do
+    exported.should include user1.serialized_private_key
+  end
+
+end
+