diff --git a/.gitignore b/.gitignore
index a17dc3a1be140e1c960e02fd5ef65b11003626ed..379d97a208a36295a50f7d33efa9813d460634ef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,7 @@ public/stylesheets/ui.css
 
 # Uploded files and local files
 public/uploads/*
-public/source.tar*
+public/source.tar
 tmp/**/*
 db/*.sqlite3
 
diff --git a/Gemfile b/Gemfile
index 83cb3ea087b1b5e93837ab2856bf568c985d6882..aefce44377cd52f165be89ab0ec848263a554c60 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,7 +1,6 @@
 source 'http://rubygems.org'
 
 gem 'rails', '>= 3.0.0'
-
 gem 'bundler', '>= 1.0.0'
 
 #Security
@@ -42,7 +41,6 @@ gem 'aws'
 
 group :test, :development do
   gem 'factory_girl_rails'
-  gem 'ruby-debug19' if RUBY_VERSION.include? "1.9"
   gem 'ruby-debug' if RUBY_VERSION.include? "1.8"
 end
 
diff --git a/Gemfile.lock b/Gemfile.lock
index 5757dfcde14d2867f6b5b8b24122cea5d6f64a66..14e3f10efbbbe11897938d21f4e111ea5fe0c61f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -15,9 +15,9 @@ GIT
 
 GIT
   remote: git://github.com/dcu/magent.git
-  revision: 90ee5db241abd2e2b7d7de5c80f0d7c5b4b8db2d
+  revision: 59b8563961b830f491cd6f6592cced67791ce0ef
   specs:
-    magent (0.5.1)
+    magent (0.5.0)
       em-websocket
       mongo
       uuidtools
@@ -99,7 +99,7 @@ GEM
     addressable (2.2.2)
     arel (1.0.1)
       activesupport (~> 3.0.0)
-    aws (2.3.22)
+    aws (2.3.21)
       http_connection
       uuidtools
       xml-simple
@@ -120,7 +120,7 @@ GEM
       rack (>= 1.0.0)
       rack-test (>= 0.5.4)
       selenium-webdriver (>= 0.0.3)
-    childprocess (0.1.3)
+    childprocess (0.0.7)
       ffi (~> 0.6.3)
     columnize (0.3.1)
     crack (0.1.8)
@@ -153,13 +153,13 @@ GEM
       rails (>= 3.0.0.beta4)
     ffi (0.6.3)
       rake (>= 0.8.7)
-    gherkin (2.2.9)
+    gherkin (2.2.8)
       json (~> 1.4.6)
       term-ansicolor (~> 1.0.5)
-    haml (3.0.22)
+    haml (3.0.21)
     hashie (0.4.0)
     highline (1.6.1)
-    http_connection (1.4.0)
+    http_connection (1.3.1)
     i18n (0.4.1)
     json (1.4.6)
     json_pure (1.4.6)
@@ -213,18 +213,18 @@ GEM
     rake (0.8.7)
     rest-client (1.6.1)
       mime-types (>= 1.16)
-    rspec (2.0.1)
-      rspec-core (~> 2.0.1)
-      rspec-expectations (~> 2.0.1)
-      rspec-mocks (~> 2.0.1)
-    rspec-core (2.0.1)
-    rspec-expectations (2.0.1)
+    rspec (2.0.0)
+      rspec-core (= 2.0.0)
+      rspec-expectations (= 2.0.0)
+      rspec-mocks (= 2.0.0)
+    rspec-core (2.0.0)
+    rspec-expectations (2.0.0)
       diff-lcs (>= 1.1.2)
-    rspec-mocks (2.0.1)
-      rspec-core (~> 2.0.1)
-      rspec-expectations (~> 2.0.1)
-    rspec-rails (2.0.1)
-      rspec (~> 2.0.0)
+    rspec-mocks (2.0.0)
+      rspec-core (= 2.0.0)
+      rspec-expectations (= 2.0.0)
+    rspec-rails (2.0.0)
+      rspec (= 2.0.0)
     ruby-debug (0.10.3)
       columnize (>= 0.1)
       ruby-debug-base (~> 0.10.3.0)
diff --git a/app/controllers/aspects_controller.rb b/app/controllers/aspects_controller.rb
index 53a696a47589bafaab7ceb0f45f3644d5a0a1afa..35ddbaec9fd217e2bb019f177c39ddf8c1e4544e 100644
--- a/app/controllers/aspects_controller.rb
+++ b/app/controllers/aspects_controller.rb
@@ -20,11 +20,10 @@ class AspectsController < ApplicationController
     @aspect = current_user.aspect(params[:aspect])
     if @aspect.valid?
       flash[:notice] = I18n.t('aspects.create.success')
-      respond_with @aspect
     else
       flash[:error] = I18n.t('aspects.create.failure')
-      redirect_to aspects_manage_path
     end
+    respond_with @aspect
   end
 
   def new
diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb
index 541563d48ada9fe657922ebe1b4a78124c1cf3fb..ec9bd7f1beb768554e5df915d0784f9717d7d57d 100644
--- a/app/controllers/registrations_controller.rb
+++ b/app/controllers/registrations_controller.rb
@@ -5,17 +5,16 @@
 class RegistrationsController < Devise::RegistrationsController
   def create
     begin
-      @user = User.instantiate!(params[:user])
+      user = User.instantiate!(params[:user])
     rescue MongoMapper::DocumentNotValid => e
       flash[:error] = e.message
       redirect_to new_user_registration_path
-      return
     end
-    if @user.save
+    if user.save
       flash[:notice] = I18n.t 'registrations.create.success'
-      sign_in_and_redirect(:user, @user)
+      sign_in_and_redirect(:user, user)
     else
-      flash[:error] = @user.errors.full_messages.join(', ')
+      flash[:error] = user.errors.full_messages.join(', ')
       redirect_to new_user_registration_path
     end
   end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index b9bd53ab5555c63150f071eaa6159ceb13c0d075..0a2c2b0ad8ad6ad4d5baa056b695e842eee258a6 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -5,11 +5,10 @@
 class UsersController < ApplicationController
   require File.join(Rails.root, 'lib/diaspora/ostatus_builder')
   require File.join(Rails.root, 'lib/diaspora/exporter')
-  require File.join(Rails.root, 'lib/diaspora/importer')
   require File.join(Rails.root, 'lib/collect_user_photos')
 
 
-  before_filter :authenticate_user!, :except => [:new, :create, :public, :import]
+  before_filter :authenticate_user!, :except => [:new, :create, :public]
 
   respond_to :html
 
@@ -79,31 +78,6 @@ class UsersController < ApplicationController
     send_data( File.open(tar_path).read, :filename => "#{current_user.id}.tar" )
   end
 
-  def invite
-    User.invite!(:email => params[:email])
-  end
-  
-  
-  def import
-    xml = params[:upload][:file].read
-
-    params[:user][:diaspora_handle] = 'asodij@asodij.asd'
-
-
-    begin
-      importer = Diaspora::Importer.new(Diaspora::Parsers::XML)
-      importer.execute(xml, params[:user])
-      flash[:notice] = "hang on a sec, try logging in!"
-
-    rescue Exception => e
-      flash[:error] = "Derp, something went wrong: #{e.message}"
-    end
-
-      redirect_to new_user_registration_path
-    #redirect_to user_session_path
-  end
-
-
   private
   def prep_image_url(params)
     url = APP_CONFIG[:pod_url].dup
diff --git a/app/models/person.rb b/app/models/person.rb
index ccf034d59a15b9d9d8c95015959b879bafb89fb2..8a9011fa4da3cc66e359f9c50446f9e255117413 100644
--- a/app/models/person.rb
+++ b/app/models/person.rb
@@ -22,13 +22,6 @@ class Person
   key :owner_id, ObjectId
 
   one :profile, :class_name => 'Profile'
-  validate :profile_is_valid
-  def profile_is_valid
-    if profile.present? && !profile.valid?
-      profile.errors.full_messages.each { |m| errors.add(:base, m) }
-    end
-  end
-
   many :albums, :class_name => 'Album', :foreign_key => :person_id
   belongs_to :owner, :class_name => 'User'
 
@@ -169,5 +162,4 @@ class Person
   def remove_all_traces
     Post.all(:person_id => id).each { |p| p.delete }
   end
-
 end
diff --git a/app/models/post.rb b/app/models/post.rb
index 0e1fc1959a114ca07bd757a9da0cc39c309360a2..aa68dc897ca06920f6034816f180cb7cd138c2e6 100644
--- a/app/models/post.rb
+++ b/app/models/post.rb
@@ -14,7 +14,6 @@ class Post
   xml_accessor :_id
   xml_accessor :person, :as => Person
   xml_reader   :public
-  xml_reader :created_at
 
   key :public   , Boolean, :default => false
 
diff --git a/app/models/profile.rb b/app/models/profile.rb
index baab495d7d658ff8003ef727921aa91623a9b0b7..ecc0fb5efc1dc4d965d1c1278229a25d9e596ea0 100644
--- a/app/models/profile.rb
+++ b/app/models/profile.rb
@@ -18,9 +18,6 @@ class Profile
   key :image_url,  String
 
   validates_presence_of :first_name, :last_name
-  after_validation :strip_names
-
-  before_save :strip_names
 
   def person_id
     self._parent_document.id
@@ -30,10 +27,4 @@ class Profile
     self._parent_document
   end
 
-  protected
-
-  def strip_names
-    self.first_name.strip! if self.first_name
-    self.last_name.strip! if self.last_name
-  end
 end
diff --git a/app/models/user.rb b/app/models/user.rb
index aee21b5438be5de5a9c74888aed2fed9bf11e5ca..1593ee29cbbcba3cb5fd7cb5b234a104dad8d5ac 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -48,12 +48,6 @@ class User
   validates_with InvitedUserValidator
 
   one :person, :class_name => 'Person', :foreign_key => :owner_id
-  validate :person_is_valid
-  def person_is_valid
-    if person.present? && !person.valid?
-      person.errors.full_messages.each {|m| errors.add(:base, m)}
-    end
-  end
 
   many :inviters, :in => :inviter_ids, :class_name => 'User'
   many :friends, :in => :friend_ids, :class_name => 'Person'
@@ -62,7 +56,7 @@ class User
   many :raw_visible_posts, :in => :visible_post_ids, :class_name => 'Post'
   many :aspects, :class_name => 'Aspect', :dependent => :destroy
 
-  #after_create :seed_aspects
+  after_create :seed_aspects
 
   before_destroy :unfriend_everyone, :remove_person, :remove_all_aspects
 
@@ -385,11 +379,7 @@ class User
 
     opts[:serialized_private_key] = generate_key
     opts[:person][:serialized_public_key] = opts[:serialized_private_key].public_key
-
-    u = User.new(opts)
-    u.seed_aspects
-    u.save!
-    u
+    User.create(opts)
   end
 
   def seed_aspects
diff --git a/app/views/albums/_new_album.haml b/app/views/albums/_new_album.haml
index d7bd2d997db6039c25eda75bbdfa2c0c3995b9bc..07431d20cfd2fcc29577330793fb5e7530e644a2 100644
--- a/app/views/albums/_new_album.haml
+++ b/app/views/albums/_new_album.haml
@@ -2,14 +2,12 @@
 -#   licensed under the Affero General Public License version 3 or later.  See
 -#   the COPYRIGHT file.
 
-.span-12.last
-  .modal_title_bar
-    %h4= t('.add_a_new_album')
+%h1=t('.add_a_new_album')
 
-  = form_for Album.new do |f|
-    = f.error_messages
-    %p
-      = f.label :name
-      = f.text_field :name
-      = f.hidden_field :to, :value => aspect
-    = f.submit t('.create'), :class => 'button'
+= form_for Album.new do |f|
+  = f.error_messages
+  %p
+    = f.label :name
+    = f.text_field :name
+    = f.hidden_field :to, :value => aspect
+  = f.submit t('.create'), :class => 'button'
diff --git a/app/views/aspects/_new_aspect.haml b/app/views/aspects/_new_aspect.haml
index a3dec9d3185909533ee9161624a41c206e2882f6..151ab07d4f092800fad066b51e526eb9bbab79bf 100644
--- a/app/views/aspects/_new_aspect.haml
+++ b/app/views/aspects/_new_aspect.haml
@@ -2,14 +2,10 @@
 -#   licensed under the Affero General Public License version 3 or later.  See
 -#   the COPYRIGHT file.
 
-.span-12.last
-  .modal_title_bar
-    %h4= t('.add_a_new_aspect')
-
-  = form_for Aspect.new do |aspect|
-    = aspect.error_messages
-    %p
-      = aspect.label :name
-      = aspect.text_field :name
-      = aspect.submit t('.create'), :class => 'button'
-
+%h1=t('.add_a_new_aspect')
+= form_for Aspect.new do |aspect|
+  = aspect.error_messages
+  %p
+    = aspect.label :name
+    = aspect.text_field :name
+    = aspect.submit t('.create'), :class => 'button'
diff --git a/app/views/devise/mailer/confirmation_instructions.html.haml b/app/views/devise/mailer/confirmation_instructions.html.haml
index 0dd9d28c0c5f1df7488aee4453c81ad4610d1702..7840b9c11b7734788d4f639dfff4e58b1a8bbacf 100644
--- a/app/views/devise/mailer/confirmation_instructions.html.haml
+++ b/app/views/devise/mailer/confirmation_instructions.html.haml
@@ -1,51 +1,4 @@
-!!!
-%html
-  %head
-    %meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
-    :css
-      body{
-        width:600px;
-        font-family:'Arial','Helvetica',sans-serif;
-        font-size:14px; 
-        color:#333;
-        }
-      #container{
-        margin-bottom:25px
-        min-height:400px;
-        padding-left:15px;
-      }
-      header{
-        background-color:#333;
-        padding: 15px;
-        margin-bottom: 25px;
-      }
-      p{
-        padding:5px;
-      }
-      p.small{
-        font-size:smaller;
-        color:#999;
-        font-style:italic;
-      }
-      a{
-        color:#107FC9;
-        font-weight:bold;
-      }
-      a:hover{
-        color: #22AAE0;
-      }
-      a:active{
-        color: #005D9C;
-      }
-      .large_text{
-        font-size:21px;
-        font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;
-      }
-  %body
-    %header
-      = image_tag '/images/diaspora_white.png'
-    #container
-      %p
-        Welcome #{@resource.email}!
-      %p You can confirm your account through the link below:
-      %p= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token), :class => "large_text"
+%p
+  Welcome #{@resource.email}!
+%p You can confirm your account through the link below:
+%p= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token)
diff --git a/app/views/devise/mailer/invitation.html.haml b/app/views/devise/mailer/invitation.html.haml
index 7bfe190a69b950f4edf1eadd81c6c5a0bb196b8e..c16b6fe8333777fe81c5789e536dbd4060319e24 100644
--- a/app/views/devise/mailer/invitation.html.haml
+++ b/app/views/devise/mailer/invitation.html.haml
@@ -1,61 +1,16 @@
-!!!
-%html
-  %head
-    %meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
-    :css
-      body{
-        width:600px;
-        font-family:'Arial','Helvetica',sans-serif;
-        font-size:14px; 
-        color:#333;
-        }
-      #container{
-        margin-bottom:25px
-        min-height:400px;
-        padding-left:15px;
-      }
-      header{
-        background-color:#333;
-        padding: 15px;
-        margin-bottom: 25px;
-      }
-      p{
-        padding:5px;
-      }
-      p.small{
-        font-size:smaller;
-        color:#999;
-        font-style:italic;
-      }
-      a{
-        color:#107FC9;
-        font-weight:bold;
-      }
-      a:hover{
-        color: #22AAE0;
-      }
-      a:active{
-        color: #005D9C;
-      }
-      .large_text{
-        font-size:21px;
-        font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;
-      }
-  %body
-    %header
-      = image_tag '/images/diaspora_white.png'
-    #container
-      %p
-        Hello #{@resource.email}!
-      %p
-        #{(@resource.inviters.count == 1)? ( @resource.inviters.first.real_name + " has") : (@resource.inviters.map{|inv| inv.real_name + " (#{inv.diaspora_handle})"}.join(",") + " have")} invited you to join Diaspora at #{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), :class => "large_text"
-      %p.small
-        If you don't want to accept the invitation, please ignore this email.
-        %br/
-        Your account won't be created until you access the link above and sign up.
+%p
+  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.
+  %br/
+  Your account won't be created until you access the link above and sign up.
diff --git a/app/views/devise/mailer/reset_password_instructions.html.haml b/app/views/devise/mailer/reset_password_instructions.html.haml
index 4b344d44eac74abd256d58b3340239c87f497486..4fc4743f8e86c4367e12ab9a023ca0a1d58a006f 100644
--- a/app/views/devise/mailer/reset_password_instructions.html.haml
+++ b/app/views/devise/mailer/reset_password_instructions.html.haml
@@ -1,53 +1,6 @@
-!!!
-%html
-  %head
-    %meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
-    :css
-      body{
-        width:600px;
-        font-family:'Arial','Helvetica',sans-serif;
-        font-size:14px; 
-        color:#333;
-        }
-      #container{
-        margin-bottom:25px
-        min-height:400px;
-        padding-left:15px;
-      }
-      header{
-        background-color:#333;
-        padding: 15px;
-        margin-bottom: 25px;
-      }
-      p{
-        padding:5px;
-      }
-      p.small{
-        font-size:smaller;
-        color:#999;
-        font-style:italic;
-      }
-      a{
-        color:#107FC9;
-        font-weight:bold;
-      }
-      a:hover{
-        color: #22AAE0;
-      }
-      a:active{
-        color: #005D9C;
-      }
-      .large_text{
-        font-size:21px;
-        font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;
-      }
-  %body
-    %header
-      = image_tag '/images/diaspora_white.png'
-    #container
-      %p
-        Hello #{@resource.email}!
-      %p Someone has requested a link to change your password, and you can do this through the link below.
-      %p= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token), :class => "large_text"
-      %p Your password won't change until you access the link above and create a new one.
-      %p.small If you didn't request this, please ignore this email.
+%p
+  Hello #{@resource.email}!
+%p Someone has requested a link to change your password, and you can do this through the link below.
+%p= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token)
+%p If you didn't request this, please ignore this email.
+%p Your password won't change until you access the link above and create a new one.
diff --git a/app/views/devise/mailer/unlock_instructions.html.haml b/app/views/devise/mailer/unlock_instructions.html.haml
index 6fff6bfce3a350ab5eb0060fa265f2d414e05a4e..34b0e9e4eaf6f44d60beecbfadf50c72905c541f 100644
--- a/app/views/devise/mailer/unlock_instructions.html.haml
+++ b/app/views/devise/mailer/unlock_instructions.html.haml
@@ -1,52 +1,5 @@
-!!!
-%html
-  %head
-    %meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
-    :css
-      body{
-        width:600px;
-        font-family:'Arial','Helvetica',sans-serif;
-        font-size:14px; 
-        color:#333;
-        }
-      #container{
-        margin-bottom:25px
-        min-height:400px;
-        padding-left:15px;
-      }
-      header{
-        background-color:#333;
-        padding: 15px;
-        margin-bottom: 25px;
-      }
-      p{
-        padding:5px;
-      }
-      p.small{
-        font-size:smaller;
-        color:#999;
-        font-style:italic;
-      }
-      a{
-        color:#107FC9;
-        font-weight:bold;
-      }
-      a:hover{
-        color: #22AAE0;
-      }
-      a:active{
-        color: #005D9C;
-      }
-      .large_text{
-        font-size:21px;
-        font-family:"Helvetica Neue",Arial,Helvetica,sans-serif;
-      }
-  %body
-    %header
-      = image_tag '/images/diaspora_white.png'
-    #container
-      %p
-        Hello #{@resource.email}!
-      %p Your account has been locked due to an excessive amount of unsuccessful sign in attempts.
-      %p Click the link below to unlock your account:
-      %p= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token), :class => "large_text"
+%p
+  Hello #{@resource.email}!
+%p Your account has been locked due to an excessive amount of unsuccessful sign in attempts.
+%p Click the link below to unlock your account:
+%p= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token)
diff --git a/app/views/invitations/_new.haml b/app/views/invitations/_new.haml
index 77b07faa283c07ef7ecb1e0105879fc0dd79fc63..8c540092b28d02e4cade96e2373e3eb74b67defb 100644
--- a/app/views/invitations/_new.haml
+++ b/app/views/invitations/_new.haml
@@ -1,20 +1,15 @@
-.span-12.last
-  .modal_title_bar
-    %h4 Invite someone to join Diaspora!
+%h2 Send invitation
+= form_for User.new, :url => invitation_path(User) do |invite|
+  %p
+    = invite.label :email
+    = invite.text_field :email
+  To
+  - unless @aspect.is_a? Aspect
+    = invite.select(:aspects, @aspects_dropdown_array)
+  - else 
+    = invite.select(:aspects, @aspects_dropdown_array, :selected => @aspect.id)
+  Message:
+  = invite.text_area :invite_messages
 
-  %i if they accept, they will be added to the aspect you invited them
-  = form_for User.new, :url => invitation_path(User) do |invite|
-    %p
-      = invite.label :email
-      = invite.text_field :email
-    To
-    - unless @aspect.is_a? Aspect
-      = invite.select(:aspects, @aspects_dropdown_array)
-    - else 
-      = invite.select(:aspects, @aspects_dropdown_array, :selected => @aspect.id)
-    
-    Message:
-    = invite.text_area :invite_messages, :value => ""
-
-    %p= invite.submit "Send an invitation"
+  %p= invite.submit "Send an invitation"
 
diff --git a/app/views/people/show.html.haml b/app/views/people/show.html.haml
index 8a76a63a6b7332b970cc65c82e17aaed692cb80b..83e7cf50dd0d4e463065a10e03a12070742edfed 100644
--- a/app/views/people/show.html.haml
+++ b/app/views/people/show.html.haml
@@ -12,8 +12,6 @@
       = person_image_link(@person)
     %ul
       -unless @posts.first.nil?
-        %li
-          %b.small= @person.diaspora_handle
         %li
           %i= t(".last_seen",:how_long_ago => how_long_ago(@posts.first))
       - if @person != current_user.person && current_user.friends.include?(@person)
diff --git a/app/views/registrations/new.html.haml b/app/views/registrations/new.html.haml
index cea31ff78e0f076f9c7f2d45c80c033775451328..7e74a215708839f36e96282e23fa79713d610e5f 100644
--- a/app/views/registrations/new.html.haml
+++ b/app/views/registrations/new.html.haml
@@ -24,27 +24,3 @@
         = pr.text_field :last_name
   = f.submit t('.sign_up')
 = render :partial => "devise/shared/links"
-
-
-%br
-%br
-
-%h2 or, upload yourself
-
-
-= form_tag '/users/import', :multipart => true do
-
-  %p
-    = label_tag 'user[email]'
-    = text_field_tag 'user[email]'
-  %p
-    = label_tag 'user[password]'
-    = password_field_tag 'user[password]'
-  %p
-    = label_tag 'user[password_confirmation]'
-    = password_field_tag 'user[password_confirmation]'
-
-  %label Select File
-  = file_field 'upload', 'file'
-  = submit_tag "Upload"
-
diff --git a/app/views/requests/_new_request.haml b/app/views/requests/_new_request.haml
index 4c12486b8256302db8770e42e819ffcd203ac063..68ee5922e2d742ce260d73e439e5fc935d2c4fba 100644
--- a/app/views/requests/_new_request.haml
+++ b/app/views/requests/_new_request.haml
@@ -2,22 +2,20 @@
 -#   licensed under the Affero General Public License version 3 or later.  See
 -#   the COPYRIGHT file.
 
-.span-12.last
-  .modal_title_bar
-    %h4
-      =t('.add_a_new_friend_to')
-      %i= aspect.name
+%h1
+  =t('.add_a_new_friend_to')
+  %i= aspect.name
 
-  = form_for Request.new do |fr_request|
-    = fr_request.error_messages
+= form_for Request.new do |fr_request|
+  = fr_request.error_messages
 
-    =t('.enter_a_diaspora_username')
-    %br
-    %i= t '.your_diaspora_username_is', :diaspora_handle  => current_user.diaspora_handle
+  =t('.enter_a_diaspora_username')
+  %br
+  %i= t '.your_diaspora_username_is', :diaspora_handle  => current_user.diaspora_handle
 
-    %p
-      = fr_request.label :destination_url, t(".friends_username")
-      = fr_request.text_field :destination_url
-    = fr_request.hidden_field :aspect_id, :value => aspect.id
-    = fr_request.submit
+  %p
+    = fr_request.label :destination_url, t(".friends_username")
+    = fr_request.text_field :destination_url
+  = fr_request.hidden_field :aspect_id, :value => aspect.id
+  = fr_request.submit
 
diff --git a/app/views/shared/_invitations.haml b/app/views/shared/_invitations.haml
index 40476eae732831854737e41501736c2343a95760..b82cca1041d87a73dbb17f4b7229fd77943f50d7 100644
--- a/app/views/shared/_invitations.haml
+++ b/app/views/shared/_invitations.haml
@@ -1,7 +1,8 @@
-%h4 Invites
-= link_to "Invite a friend", "#invite_user_pane", :class => "invite_user_button", :title => "Invite a friend"
-= "(#{invites} left)"
-%br
-.yo{ :style => "display:none;"}
-  #invite_user_pane
-    = render "invitations/new"
+- unless @aspect == :all
+  %h4 Invites
+  = link_to "Invite a friend", "#invite_user_pane", :class => "invite_user_button", :title => "Invite a friend"
+  = "(#{invites} left)"
+  %br
+  .yo{ :style => "display:none;"}
+    #invite_user_pane
+      = render "invitations/new"
diff --git a/app/views/shared/_public_explain.haml b/app/views/shared/_public_explain.haml
index ca1a2b1d7878bbe3daa9a96f5ef5df20f3670701..b1d2048b2397629620e8404bda928ec32cf89132 100644
--- a/app/views/shared/_public_explain.haml
+++ b/app/views/shared/_public_explain.haml
@@ -1,18 +1,12 @@
--#   Copyright (c) 2010, Diaspora Inc.  This file is
--#   licensed under the Affero General Public License version 3 or later.  See
--#   the COPYRIGHT file.
-
-.span-12.last
-  .modal_title_bar
-    %h4 You are about to post a public message!
-  %p
-    Public messages will be available for others outside of Diaspora to see.
-    %br
-    %br
-    - if @logged_in
-      = connected_fb_as(@access_token)
-    - else
-      = link_to "Connect to Facebook", @fb_access_url
-    %br
-    %br
-    = link_to "OK", '#', :class => "button", :onClick => '$.fancybox.close();'
+%h3 You are about to post a public message!
+%p
+  Public messages will be available for others outside of Diaspora to see.
+  %br
+  %br
+  - if @logged_in
+    = connected_fb_as(@access_token)
+  - else
+    = link_to "Connect to Facebook", @fb_access_url
+  %br
+  %br
+  = link_to "OK", '#', :class => "button", :onClick => '$.fancybox.close();'
diff --git a/app/views/shared/_reshare.haml b/app/views/shared/_reshare.haml
index 44c8f00ddc10cceff019f2bef1c7b81ba4c6b810..2ac09a78f0f8274b207b0a4bb027e1f995f52c14 100644
--- a/app/views/shared/_reshare.haml
+++ b/app/views/shared/_reshare.haml
@@ -2,6 +2,16 @@
 -#   licensed under the Affero General Public License version 3 or later.  See
 -#   the COPYRIGHT file.
 
+:javascript
+  $(".reshare_button").toggle(function(e){
+    e.preventDefault();
+    $(this).parent(".reshare_pane").children(".reshare_box").fadeIn(200);
+  }, function(e) {
+    e.preventDefault();
+    $(this).parent(".reshare_pane").children(".reshare_box").fadeOut(200);
+  });
+
+
 - unless current_user.aspects.size == current_user.aspects_with_post(post.id).size
   .reshare_pane
     %span.reshare_button
diff --git a/config/routes.rb b/config/routes.rb
index 47e73807ba1c7c1f004e20d974c7630435af5556..8fbd132a870e2a136e3ac78457001a200f1287cf 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -16,7 +16,6 @@ Diaspora::Application.routes.draw do
   # added public route to user
   match 'public/:username',        :to => 'users#public'
   match 'users/export',            :to => 'users#export'
-  match 'users/import',            :to => 'users#import'
   match 'users/export_photos',     :to => 'users#export_photos'
   resources :users,         :except => [:create, :new, :show]
 
diff --git a/features/user_creates_an_aspect.feature b/features/user_creates_an_aspect.feature
index d611d412f642282c336c0b680ff40d3958da022d..7d7789f78d1f9b4835d39884e3a057bc986533c1 100644
--- a/features/user_creates_an_aspect.feature
+++ b/features/user_creates_an_aspect.feature
@@ -12,10 +12,12 @@ Feature: User creates an aspect
   Scenario: success
     Given I fill in "Name" with "Dorm Mates" in the modal window
     When I press "Create" in the modal window
-    Then I should see "Dorm Mates" in the header
-    And I should see "Your aspect 'Dorm Mates' is empty."
+    Then I should see "Manage aspects"
+    And I should see "Dorm Mates" in the header
+    And I should see "Dorm Mates" in the aspect list
 
   Scenario: I omit the name
     Given I fill in "Name" with "" in the modal window
     When I press "Create" in the modal window
-    Then I should see "Aspect creation failed."
+    Then I should see "Manage aspects"
+    And I should see "Aspect creation failed."
diff --git a/lib/diaspora/exporter.rb b/lib/diaspora/exporter.rb
index 5f40322fbf5e3c28c5d4b01315bcc23a1f0a1b90..b560f729c1f08b27404b41938621a77681ade6a6 100644
--- a/lib/diaspora/exporter.rb
+++ b/lib/diaspora/exporter.rb
@@ -14,51 +14,36 @@ module Diaspora
     module XML
       def execute(user)
         builder = Nokogiri::XML::Builder.new do |xml|
-          user_person_id = user.person.id
-          xml.export {
-            xml.user {
-              xml.username user.username
-              xml.serialized_private_key user.serialized_private_key 
-              
-              xml.parent << user.person.to_xml
-            }
+          xml.user {
+            xml.username user.username
+            xml.parent << user.person.to_xml
+            xml.serialized_private_key user.serialized_private_key 
+            
             xml.aspects {
               user.aspects.each do |aspect|
                 xml.aspect { 
+                  xml.id_ aspect.id
                   xml.name aspect.name
-                   
-                  xml.person_ids {
-                    aspect.person_ids.each do |id|
-                      xml.person_id id
+                
+                  xml.people {
+                    aspect.people.each do |person|
+                      xml.person person.to_xml
                     end
                   }
-
-                  xml.post_ids {
-                    aspect.posts.find_all_by_person_id(user_person_id).each do |post|
-                      xml.post_id post.id
+                  xml.posts {
+                    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
                   }
                 }
               end
             }
-
-            xml.people {
-              user.friends.each do |friend|
-                xml.parent << friend.to_xml
-              end
-            }
-
-            xml.posts {
-              user.raw_visible_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.parent << post.to_xml
-              end
-            }
           }
         end
 
diff --git a/lib/diaspora/importer.rb b/lib/diaspora/importer.rb
deleted file mode 100644
index e1e8ad97f9bd6e0db3f81144c8b54865fa9bd050..0000000000000000000000000000000000000000
--- a/lib/diaspora/importer.rb
+++ /dev/null
@@ -1,179 +0,0 @@
-#   Copyright (c) 2010, Diaspora Inc.  This file is
-#   licensed under the Affero General Public License version 3 or later.  See
-#   the COPYRIGHT file.
-
-module Diaspora
-
-  class Importer
-    def initialize(strategy)
-      self.class.send(:include, strategy)
-    end
-    
-    def commit(user, person, aspects, people, posts, opts = {})
-      filter = verify_and_clean(user, person, people, aspects, posts)
-      #assume data is good
-      
-      # to go 
-      user.email = opts[:email]
-      user.password= opts[:password]
-      user.password_confirmation = opts[:pasword_confirmation]
-
-     
-     
-      user.person = person
-
-
-      user.person.diaspora_handle = opts[:diaspora_handle] 
-      
-      user.visible_post_ids = filter[:whitelist].keys
-
-      user.friend_ids = people.collect{ |x| x.id }
-      user.visible_person_ids = user.friend_ids
-
-      user.save!
-      user.person.save!
-      
-      posts.each do |post|
-        post.save! if filter[:unknown].include? post.id
-      end
-
-
-
-      aspects.each do |aspect|
-        user.aspects << aspect
-      end
-
-
-
-      people.each do |p|
-        p.save! if filter[:people].include? p.id.to_s
-      end
-    end
-
-    ### verification (to be module) ################
-
-    def verify_and_clean(user, person, people, aspects, posts)
-      verify_user(user)
-      verify_person_for_user(user, person)
-      filters = filter_posts(posts, person)
-
-
-      clean_aspects(aspects, filters[:whitelist])
-
-
-      filters[:people] = filter_people(people)
-      filters  
-    end
- 
-    def verify_user(user)
-      User.find_by_id(user.id).nil? ? true : raise("User already exists!")
-    end
-
-    def verify_person_for_user(user, person)
-      local_person = Person.find_by_id(person.id)
-      if local_person
-        unless user.encryption_key.public_key.to_s == local_person.public_key.to_s
-          raise "local person found with different owner" 
-        end
-      end
-      true
-    end
-
-
-    def filter_people(people)
-      person_ids = people.collect{|x| x.id}
-      people_from_db = Person.find_all_by_id(person_ids)  #this query should be limited to only return person_id
-      person_ids = person_ids - people_from_db.collect{ |x| x.id }
-
-      person_hash = {}
-      person_ids.each{|x| person_hash[x.to_s] = true }  
-      person_hash
-    end
-
-    def filter_posts(posts, person)
-      post_ids = posts.collect{|x| x.id}
-      posts_from_db = Post.find_all_by_id(post_ids)  #this query should be limited to only return post id and owner id
- 
-      unknown_posts = post_ids - posts_from_db.collect{|x| x.id}
-
-      posts_from_db.delete_if{|x| x.person_id == person.id}
-      unauthorized_post_ids = posts_from_db.collect{|x| x.id}
-      post_whitelist = post_ids - unauthorized_post_ids
-
-      unknown = {}
-      unknown_posts.each{|x| unknown[x.to_s] = true }
-      
-      whitelist = {}
-      post_whitelist.each{|x| whitelist[x.to_s] = true }
-      
-      return {
-          :unknown => unknown,
-          :whitelist => whitelist }
-    end
-
-
-    def clean_aspects(aspects, whitelist)
-      aspects.each do |aspect|
-        aspect.post_ids.delete_if{ |x| !whitelist.include? x.to_s }
-      end
-    end
-  end
-
-  module Parsers
-    module XML
-      def execute(xml, opts = {})
-        doc = Nokogiri::XML.parse(xml)
-
-        user, person = parse_user_and_person(doc)
-        aspects = parse_aspects(doc)
-        people = parse_people(doc)
-        posts = parse_posts(doc)
-
-        user
-        commit(user, person, aspects, people, posts, opts)
-      end
-
-      def parse_user_and_person(doc)
-        user = User.new
-        user_doc = doc.xpath('/export/user')
-        user.username = user_doc.xpath('//user/username').text
-        user.serialized_private_key=  user_doc.xpath('//user/serialized_private_key').text
-        person = Person.from_xml(user_doc.xpath('//user/person').to_s)
-        [user, person]
-      end
-
-      def parse_aspects(doc)
-       aspects = []
-        aspect_doc = doc.xpath('/export/aspects/aspect')
-
-        aspect_doc.each do |x| 
-          a = Nokogiri::XML.parse(x.to_s)
-
-          aspect = Aspect.new
-          aspect.name = a.xpath('/aspect/name').text
-          aspect.post_ids = a.xpath('/aspect/post_ids/post_id').collect{ |x| x.text.to_id }
-          aspect.person_ids = a.xpath('/aspect/person_ids/person_id').collect{ |x| x.text.to_id }
-          aspects << aspect
-        end
-        aspects
-      end
-
-      def parse_people(doc)
-        people_doc = doc.xpath('/export/people/person')
-        people_doc.inject([]) do |people,curr|
-          people << Person.from_xml(curr.to_s)
-        end
-      end
-
-
-      def parse_posts(doc)
-        post_doc = doc.xpath('/export/posts/status_message')
-        post_doc.inject([]) do |posts,curr|
-          posts << StatusMessage.from_xml(curr.to_s)
-        end
-      end
-
-    end
-
-  end
-end
diff --git a/lib/hcard.rb b/lib/hcard.rb
index 1bdd8a70439878ec933f15d4e72e53a59b4a1add..e858bdfc6872a24011bde0f3e3567dd85f5e9ab4 100644
--- a/lib/hcard.rb
+++ b/lib/hcard.rb
@@ -11,7 +11,7 @@ module HCard
     {:given_name => doc.css(".given_name").text,
     :family_name => doc.css(".family_name").text,
     :url => doc.css("#pod_location").text,
-    :photo => doc.css(".photo[src]").attribute('src').text     }
+    :photo => doc.css(".photo[src]").text}
   end
 
   def self.find url
diff --git a/pkg/fedora/diaspora-setup b/pkg/fedora/diaspora-setup
index 0214e419aa058ff03ae0944e95146f662cf0ad33..8ce4bae60a09e926447bdad34b54b0d60c265b8a 100755
--- a/pkg/fedora/diaspora-setup
+++ b/pkg/fedora/diaspora-setup
@@ -47,11 +47,12 @@ sed -i '/socket_pidfile:/s|:.*|: /var/run/diaspora/diaspora-wsd.pid|' \
 hostname=$( awk '/pod_url:/ { print $2; exit }' <config/app_config.yml)
 
 if [ -n "$arg_hostname" ]; then
-    sed -i "/pod_url:/s|$hostname|$arg_hostname|g" config/app_config.yml &&
+    sed -i "/pod_url:/s/$hostname/$arg_hostname/g" config/app_config.yml &&
         echo "config/app_config.yml updated."
     exit 0
 fi
 
+hostname=$( awk '/pod_url:/ { print $2; exit }' <config/app_config.yml)
 while : ; do
     echo "Current hostname is \"$hostname\""
     echo -n "Enter new hostname [$hostname] :"
@@ -59,7 +60,7 @@ while : ; do
     echo -n "Use hostname \"$new_hostname\" as pod_url (Yes/No) [Yes]? :"
     read yesno garbage
     test "${yesno:0:1}" = 'y' -o "${yesno:0:1}" = 'Y' -o -z "$yesno" && {
-        sed -i "/pod_url:/s|$hostname|$new_hostname|g" config/app_config.yml &&
+        sed -i "/pod_url:/s/$hostname/$new_hostname/g" config/app_config.yml &&
             echo "config/app_config.yml updated."
         break
     }
diff --git a/pkg/ubuntu/diaspora-setup b/pkg/ubuntu/diaspora-setup
index 32293a2d27170a09de8eeefed8f39a651ced4cc1..109e460bd1a88423fa65ed81c51aded7650b4052 100755
--- a/pkg/ubuntu/diaspora-setup
+++ b/pkg/ubuntu/diaspora-setup
@@ -63,7 +63,7 @@ while : ; do
     echo -n "Use hostname \"$new_hostname\" as pod_url (Yes/No) [Yes]? :"
     read yesno garbage
     test "${yesno:0:1}" = 'y' -o "${yesno:0:1}" = 'Y' -o -z "$yesno" && {
-        sed -i "/pod_url:/s|$hostname|$new_hostname|g" config/app_config.yml &&
+        sed -i "/pod_url:/s/$hostname/$new_hostname/g" config/app_config.yml &&
             echo "config/app_config.yml updated."
         break
     }
diff --git a/public/javascripts/stream.js b/public/javascripts/stream.js
index c7ec199d62173b76a381517f2bb2bd6aae01c7cf..d4f72bcbc9a53f416258cfe91af64474ca898f7e 100644
--- a/public/javascripts/stream.js
+++ b/public/javascripts/stream.js
@@ -29,7 +29,7 @@ $(".show_post_comments").live('click', function(event) {
   $(this).toggleClass( "visible" );
 });
 
-$(".comment_box").toggle(function(evt){
+$(".comment_box").live('focus', function(evt){
   var $this = $(this);
   $this.attr("rows", 2);
   $this.parents("p").parents("form").children("p").children(".comment_submit").fadeIn(200);
@@ -47,10 +47,3 @@ $(".comment_submit").live('click', function(evt){
   $(this).closest("form").children("p .comment_box").attr("rows", 1);
 });
 
-$(".reshare_button").live("click", function(e){
-  e.preventDefault();
-  var button = $(this);
-  button.parent(".reshare_pane").children(".reshare_box").show();
-  button.addClass("active");
-});
-
diff --git a/public/javascripts/view.js b/public/javascripts/view.js
index 1096b532cdd85ba682cc8a032484ab8d9050c6dd..677a36979503aab52f5183e89bea87d5f8e016ac 100644
--- a/public/javascripts/view.js
+++ b/public/javascripts/view.js
@@ -53,21 +53,6 @@ $(document).ready(function(){
     }
   });
 
-  $("#user_menu").click( function(){
-    $(this).toggleClass("active");
-  });
-
-  $('body').click( function(event){
-    if(!$(event.target).closest('#user_menu').length){
-      $("#user_menu").removeClass("active");
-    };
-    if(!$(event.target).closest('.reshare_box').length){
-      $(".reshare_button").removeClass("active");
-      $(".reshare_box").hide();
-    };
-  });
-
-
 });//end document ready
 
 
diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass
index 064017959f03f98b9f495f04cf5655c0e7f7fb44..e7afb9c269785a064468ec6c8b50d8b43e0ed8ac 100644
--- a/public/stylesheets/sass/application.sass
+++ b/public/stylesheets/sass/application.sass
@@ -22,7 +22,7 @@ a
     :color #22AAE0
   &:active
     :color #005D9C
-    
+
 
 h1, h2, h3, h4
   :color #444
@@ -48,14 +48,14 @@ h3
   :width 100%
 
   :padding 1em
-  
+
   :box-shadow 0 1px 2px #333
   :-moz-box-shadow 0 1px 2px #333
   :-webkit-box-shadow 0 1px 2px #333
 
   :font
     :weight bold
-  
+
 #flash_notice
   :background
     :color rgba(127,255,36,0.85)
@@ -128,9 +128,9 @@ header
     a
       :text-shadow 0 1px 0 #000
 
-    :width 100px
-
     :z-index 10
+    :font
+      :size 14px
     :padding 5px 10px
       :left 40px
     :margin 0
@@ -152,7 +152,11 @@ header
       a
         :display block
 
-    &.active
+    &:hover
+      li
+        :display block
+
+    &:hover
       :margin
         :top -3px
         :right -6px
@@ -164,14 +168,11 @@ header
       :-webkit-box-shadow 0 1px 2px #333
       :-moz-box-shadow 0 1px 2px #333
 
-      li
-        :display block
-
     .avatar
       :height 20px
       :width 20px
       :position absolute
-      :left 5px 
+      :left 5px
       :display block
 
 
@@ -274,7 +275,7 @@ li.message
           :weight bold
         :margin
           :right 5px
-      
+
   &:hover
     div.info, .time
       a
@@ -292,16 +293,6 @@ li.message
       :decoration none
   :cursor default
 
-.right .reshare_pane .reshare_button
-  :padding 5px
-  &.active
-    :background
-      :color #333
-    :border-radius 5px 5px 0 0
-    a
-      :color #fff
-      :text-shadow none
-
 .right .reshare_pane
   :margin
     :left 5px
@@ -309,14 +300,13 @@ li.message
   :display inline
   :position relative
 
-
   ul.reshare_box
     :width 150px
     :display none
     :z-index 10
     :position absolute
     :margin
-      :top 0
+      :top 5px
     :padding 0
 
     :background
@@ -325,7 +315,9 @@ li.message
     :list
       :style none
 
-    :border 5px solid #333
+    :border 5px solid #666
+    :-webkit-box-shadow 0 0 5px #666
+    :-moz-box-shadow 0 0 5px #666
 
     :text-shadow 0 2px #fff
     :color #000
@@ -348,7 +340,6 @@ li.message
         :display block
         :height 100%
         :padding 2px 5px
-        :cursor default
 
         &:hover
           :background
@@ -416,7 +407,7 @@ form
     > li
       :background none
       :border none
-    
+
 
 #stream div.comments
   :display none
@@ -807,8 +798,8 @@ h1.big_text
       :margin 0
 
       a
-        :-webkit-border-radius 5px 5px 0 0 
-        :-moz-border-radius 5px 5px 0 0 
+        :-webkit-border-radius 5px 5px 0 0
+        :-moz-border-radius 5px 5px 0 0
 
         :text-shadow 0 1px 0 #444
         :line
@@ -936,7 +927,7 @@ h1.big_text
       :color #333
 
     :border-radius 5px
-  
+
     a
       :color #ccc
 
diff --git a/spec/controllers/aspects_controller_spec.rb b/spec/controllers/aspects_controller_spec.rb
index 81571fb547157d70c3cda9343f4387d28af7618b..19bb7bf5d3bc88712cc65095f0c01829951913b8 100644
--- a/spec/controllers/aspects_controller_spec.rb
+++ b/spec/controllers/aspects_controller_spec.rb
@@ -5,8 +5,7 @@
 require 'spec_helper'
 
 describe AspectsController do
-  render_views
-
+ render_views
   before do
     @user = Factory.create(:user)
     @user.aspect(:name => "lame-os")
@@ -14,36 +13,11 @@ describe AspectsController do
     sign_in :user, @user
   end
 
-  describe "#index" do
-    it "assigns @friends to all the user's friends" do
-      Factory.create :person
-      get :index
-      assigns[:friends].should == @user.friends
-    end
+  it "on index sets a variable containing all a user's friends when a user is signed in" do
+    sign_in :user, @user
+    Factory.create :person
+    get :index
+    assigns[:friends].should == @user.friends
   end
 
-  describe "#create" do
-    describe "with valid params" do
-      it "creates an aspect" do
-        @user.aspects.count.should == 1
-        post :create, "aspect" => {"name" => "new aspect"}
-        @user.reload.aspects.count.should == 2
-      end
-      it "redirects to the aspect page" do
-        post :create, "aspect" => {"name" => "new aspect"}
-        response.should redirect_to(aspect_path(Aspect.find_by_name("new aspect")))
-      end
-    end
-    describe "with invalid params" do
-      it "does not create an aspect" do
-        @user.aspects.count.should == 1
-        post :create, "aspect" => {"name" => ""}
-        @user.reload.aspects.count.should == 1
-      end
-      it "goes back to manage aspects" do
-        post :create, "aspect" => {"name" => ""}
-        response.should redirect_to(aspects_manage_path)
-      end
-    end
-  end
 end
diff --git a/spec/controllers/registrations_controller_spec.rb b/spec/controllers/registrations_controller_spec.rb
index e8979553260616fb9103c5c30266300a453cdc9a..da7643fc9cabc433b8f9f1967b045c59e3c610f5 100644
--- a/spec/controllers/registrations_controller_spec.rb
+++ b/spec/controllers/registrations_controller_spec.rb
@@ -26,10 +26,6 @@ describe RegistrationsController do
       it "creates a user" do
         lambda { get :create, @valid_params }.should change(User, :count).by(1)
       end
-      it "assigns @user" do
-        get :create, @valid_params
-        assigns(:user).should_not be_nil
-      end
       it "sets the flash" do
         get :create, @valid_params
         flash[:notice].should_not be_empty
@@ -41,25 +37,19 @@ describe RegistrationsController do
     end
     context "with invalid parameters" do
       before do
-        @valid_params["user"]["person"]["profile"].delete("first_name")
+        @valid_params["user"].delete("username")
         @invalid_params = @valid_params
       end
       it "does not create a user" do
         lambda { get :create, @invalid_params }.should_not change(User, :count)
       end
-      it "assigns @user" do
-        pending "GAAAH stupid mongo mapper. Figure out why it thinks it's persisted when validations fail"
-        get :create, @valid_params
-        assigns(:user).should_not be_nil
-      end
       it "sets the flash error" do
         get :create, @invalid_params
         flash[:error].should_not be_blank
       end
       it "goes back to the form" do
-        pending "GAAAH stupid mongo mapper. Figure out why it thinks it's persisted when validations fail"
         get :create, @invalid_params
-        response.should be_success
+        response.should redirect_to new_user_registration_path
       end
     end
   end
diff --git a/spec/lib/diaspora_parser_spec.rb b/spec/lib/diaspora_parser_spec.rb
index 6c3c697dfe4ecc215a9fc8a4b6238521d8549653..3f51cea96700483a2d305177dc015b296e15ef55 100644
--- a/spec/lib/diaspora_parser_spec.rb
+++ b/spec/lib/diaspora_parser_spec.rb
@@ -6,7 +6,7 @@ require 'spec_helper'
 
 describe Diaspora::Parser do
   before do
-    @user = Factory.create(:user)
+    @user = Factory.create(:user, :email => "bob@aol.com")
     @aspect = @user.aspect(:name => 'spies')
 
     @user3 = Factory.create :user
@@ -22,7 +22,7 @@ describe Diaspora::Parser do
     end
 
      it 'should be able to correctly handle comments with person in db' do
-      person = Factory.create(:person)
+      person = Factory.create(:person, :diaspora_handle => "test@testing.com")
       post = Factory.create(:status_message, :person => @user.person)
       comment = Factory.build(:comment, :post => post, :person => person, :text => "Freedom!")
       xml = comment.to_diaspora_xml
@@ -56,7 +56,9 @@ describe Diaspora::Parser do
       retraction = Retraction.for(message)
       xml = retraction.to_diaspora_xml
 
-      proc {@user.receive xml, person}.should change(StatusMessage, :count).by(-1)
+      StatusMessage.count.should == 1
+      @user.receive xml, person
+      StatusMessage.count.should == 0
     end
 
     it "should create a new person upon getting a person request" do
diff --git a/spec/lib/exporter_spec.rb b/spec/lib/exporter_spec.rb
index 88369dacf1aa353eb634b0a36c5bcb4824e58da8..fb3e6d29fe3a5201f3f5d49fc3ec07f9823899e2 100644
--- a/spec/lib/exporter_spec.rb
+++ b/spec/lib/exporter_spec.rb
@@ -9,57 +9,25 @@ describe Diaspora::Exporter do
 
   let!(:user1) { Factory(:user) }
   let!(:user2) { Factory(:user) }
-  let!(:user3) { Factory(:user) }
 
   let(:aspect1) { user1.aspect(:name => "Work")   }
   let(:aspect2) { user2.aspect(:name => "Family") }
-  let(:aspect3) { user3.aspect(:name => "Pivots") }
 
   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) }
+  let!(:exported) { Diaspora::Exporter.new(Diaspora::Exporters::XML).execute(user1) }
 
   it 'should include a users posts' do
-    exported.should include status_message1.message
-    exported.should include status_message2.message
-    exported.should_not include status_message3.message
+    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
 
-  it 'should include post_ids' do 
-    doc = Nokogiri::XML::parse(exported)
-    doc.xpath('//aspects').to_s.should include status_message1.id.to_s
-
-    doc.xpath('//aspects').to_s.should include status_message2.id.to_s
-    doc.xpath('//posts').to_s.should include status_message1.id.to_s
-  end
-
-  it 'should include post created at time' do
-    doc = Nokogiri::XML::parse(exported)
-    Time.parse(doc.xpath('//posts/status_message/created_at').first.text).should == status_message1.created_at
-  end
-
-  it 'should include a list of users posts' do 
-    doc = Nokogiri::XML::parse(exported)
-    posts = doc.xpath('//posts').to_s
-    posts.should include(status_message1.message)
-  end
-
-  it 'should serialize a users friends' do
-    friend_users(user1, aspect1, user3, aspect3)
-    doc = Nokogiri::XML::parse(exported) 
-    doc.xpath('/export/people').to_s.should include user3.person.id.to_s
-  end
-
-  it 'should serialize only a users posts within his aspects' do
-    message = Factory(:status_message, :message => "Shouldn't be here", :person => user3.person)
-    aspect1.posts << message
-    doc = Nokogiri::XML::parse(exported)
-    doc.xpath('/export/aspects').to_s.should_not include message.message
-  end
 end
+
diff --git a/spec/lib/importer_spec.rb b/spec/lib/importer_spec.rb
deleted file mode 100644
index 268b0f5e19018f6d8186450ac45fbb96ac10963a..0000000000000000000000000000000000000000
--- a/spec/lib/importer_spec.rb
+++ /dev/null
@@ -1,234 +0,0 @@
-#   Copyright (c) 2010, Diaspora Inc.  This file is
-#   licensed under the Affero General Public License version 3 or later.  See
-#   the COPYRIGHT file.
-
-require 'spec_helper'
-require File.join(Rails.root, 'lib/diaspora/exporter')
-require File.join(Rails.root, 'lib/diaspora/importer')
-
-describe Diaspora::Importer do
-
-  before(:each) do
-    # Five users on pod
-    @user1 = Factory(:user)
-    @user2 = Factory(:user)
-    @user3 = Factory(:user)
-    @user4 = Factory(:user)
-    @user5 = Factory(:user)
-
-    # Two external people referenced on pod
-    @person1 = Factory(:person)
-    @person2 = Factory(:person)
-
-    # User1 has four aspects(1-4), each following user has one aspect
-    @aspect1 = @user1.aspect(:name => "Dudes") 
-    @aspect2 = @user1.aspect(:name => "Girls")
-    @aspect3 = @user1.aspect(:name => "Bros")
-    @aspect4 = @user1.aspect(:name => "People")
-    @aspect5 = @user2.aspect(:name => "Abe Lincolns")
-    @aspect6 = @user3.aspect(:name => "Cats")
-    @aspect7 = @user4.aspect(:name => "Dogs")
-    @aspect8 = @user5.aspect(:name => "Hamsters")
-    @aspect9 = @user5.aspect(:name => "Gophers")
-
-    @aspect10 = @user1.aspect(:name => "Work") 
-    @aspect11 = @user1.aspect(:name => "Family")
-
-    # User1 posts one status messages to aspects (1-4), two other users post message to one aspect
-    @status_message1 = @user1.post(:status_message, :message => "One", :public => false, :to => @aspect1.id)
-    @status_message2 = @user1.post(:status_message, :message => "Two", :public => false, :to => @aspect2.id)
-    @status_message3 = @user1.post(:status_message, :message => "Three", :public => false, :to => @aspect3.id)
-    @status_message4 = @user1.post(:status_message, :message => "Four", :public => false, :to => @aspect4.id)
-    @status_message5 = @user2.post(:status_message, :message => "Five", :public => false, :to => @aspect5.id)
-    @status_message6 = @user3.post(:status_message, :message => "Six", :public => false, :to => @aspect6.id)
-    @status_message7 = @user5.post(:status_message, :message => "Seven", :public => false, :to => @aspect9.id)
-
-    @aspect1.posts << @status_message1
-    @aspect2.posts << @status_message2
-    @aspect3.posts << @status_message3
-    @aspect4.posts << @status_message4
-
-    # Friend users with user1
-    friend_users( @user1, @aspect1, @user2, @aspect5 )
-    friend_users( @user1, @aspect2, @user3, @aspect6 )
-    friend_users( @user1, @aspect3, @user4, @aspect7 )
-    friend_users( @user1, @aspect4, @user5, @aspect8 )
-
-    # Friend users 4 and 5
-    friend_users( @user5, @aspect9, @user4, @aspect7 )
-
-    # Generate status messages and receive for user1
-    @user2.receive @status_message1.to_diaspora_xml, @user1.person
-    @user3.receive @status_message2.to_diaspora_xml, @user1.person
-    @user4.receive @status_message3.to_diaspora_xml, @user1.person
-    @user5.receive @status_message4.to_diaspora_xml, @user1.person
-    @user1.receive @status_message5.to_diaspora_xml, @user2.person
-    @user1.receive @status_message6.to_diaspora_xml, @user3.person
-
-    # Generate status message and recieve between user4 and user5
-    @user4.receive @status_message7.to_diaspora_xml, @user5.person
-  end
-
-  it 'should gut check this test' do 
-    
-    @user1.friends.count.should be 4
-
-    @user1.friends.should include @user2.person
-    @user1.friends.should include @user3.person
-    @user1.friends.should include @user4.person
-    @user1.friends.should include @user5.person
-    
-    # User is generated with two pre-populated aspects
-    @user1.aspects.count.should be 6
-    @user1.aspects.find_by_name("Dudes").people.should include @user2.person
-    @user1.aspects.find_by_name("Dudes").posts.should include @status_message5
-    
-    @user1.raw_visible_posts.count.should be 6
-    @user1.raw_visible_posts.find_all_by_person_id(@user1.person.id).count.should be 4
-    @user1.raw_visible_posts.find_all_by_person_id(@user1.person.id).should_not include @status_message7
-  end
-
-  context 'parsing a user' do
-
-    before(:each) do
-      # Generate exported XML for user1
-      exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML)
-      @user1.aspects.reload
-      @xml = exporter.execute(@user1)
-
-      @old_user = @user1
-
-      # Remove user1 from the server
-      @user1.aspects.each( &:delete )
-      @user1.raw_visible_posts.find_all_by_person_id(@user1.person.id).each( &:delete )
-      @user1.delete
-
-      @importer = Diaspora::Importer.new(Diaspora::Parsers::XML)
-      @doc = Nokogiri::XML::parse(@xml)
-    end
-
-    describe '#parse_user_and_person' do
-      before(:each) do
-        @user, @person = @importer.parse_user_and_person(@doc)
-      end
-
-      it 'should set username' do
-        @user.username.should == @old_user.username
-      end
-
-      it 'should set private key' do
-        @user.serialized_private_key.should_not be nil
-        @user.serialized_private_key.should == @old_user.serialized_private_key
-      end
-
-    end
-    
-    describe '#parse_aspects' do
-      let(:aspects) { @importer.parse_aspects(@doc) }
-
-      it 'should return valid aspects' do 
-        aspects.all?(&:valid?).should be true
-      end
-
-      it 'should return an array' do
-        aspects.count.should == 6
-      end
-
-      it 'should should have post ids' do
-        aspects.any?{|x| x.post_ids.count > 0}.should be true
-      end
-
-      it 'should have person ids' do
-        aspects.any?{|x| x.person_ids.count > 0}.should be true
-      end
-    end
-
-    describe '#parse_people' do
-      let(:people) { @importer.parse_people(@doc) }
-
-      it 'should return an array' do
-        people.count.should == 4 
-      end
-    end
-
-    describe '#parse_posts' do
-      let(:posts) { @importer.parse_posts(@doc) }
-
-      it 'should return an array' do
-        posts.count.should == 4
-      end
-
-      it 'should return vaild posts' do         
-        posts.all?(&:valid?).should be true
-      end
-    end
-
-  end
-
-  describe 'importing a user' do
-
-    context '#execute' do
-      before(:each) do
-        # Generate exported XML for user1
-        exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML)
-        @xml = exporter.execute(@user1)
-
-        # Remove user1 from the server
-        @user1.aspects.each( &:delete )
-        @user1.raw_visible_posts.find_all_by_person_id(@user1.person.id).each( &:delete )
-        @user1.delete
-
-        @importer = Diaspora::Importer.new(Diaspora::Parsers::XML)
-      end
-
-      it 'should import' do
-        pending "there is some weirdness with diaspora handle we need to look into... and this test is terrible"
-        User.delete_all
-        Person.delete_all
-        Post.delete_all
-        StatusMessage.delete_all
-        Aspect.delete_all
-
-        User.count.should == 0
-        Person.count.should == 0
-        
-        @importer.execute(@xml,
-                          :email => "bob@bob.com",
-                          :password => "bobbybob",
-                          :password => "bobbybob",
-                          :diaspora_handle => "bob@diaspora.com")
-        
-        User.count.should == 1
-        n = User.first
-        Post.count.should == 4 
-        n.aspects.count.should  == 6
-        Person.count.should be == 5 
-
-        User.first.person.diaspora_handle.should == User.first.diaspora_handle
-     
-
-        Person.find_by_id( @user1.person.id ).nil?.should == false
-        Person.find_by_id( @user2.person.id ).nil?.should == false
-
-        n.aspects.count.should == 6
- 
-        people_count = 0
-        n.aspects.each{|x| people_count += x.people.count }
-        people_count.should == 4
-
-        post_count = 0
-        n.aspects.reload
-        n.aspects.each{ |x| post_count += x.post_ids.count }
-        post_count.should == 4
-        
-        n.friends.count.should be 4
-      end
-
-      
-
-    end
-
-  end
-
-end
-
diff --git a/spec/lib/verify_spec.rb b/spec/lib/verify_spec.rb
deleted file mode 100644
index b0b8a0de65ed3debcd03b647499236a3c9c6b1a3..0000000000000000000000000000000000000000
--- a/spec/lib/verify_spec.rb
+++ /dev/null
@@ -1,109 +0,0 @@
-#   Copyright (c) 2010, Diaspora Inc.  This file is
-#   licensed under the Affero General Public License version 3 or later.  See
-#   the COPYRIGHT file.
-
-require 'spec_helper'
-require File.join(Rails.root, 'lib/diaspora/importer')
-
-describe Diaspora::Importer do
-
-  let!(:user1) { Factory(:user) }
-  let!(:user2) { Factory(:user) }
-  let!(:user3) { Factory(:user) }
-
-  let(:aspect1) { user1.aspect(:name => "Work")   }
-  let(:aspect2) { user2.aspect(:name => "Family") }
-  let(:aspect3) { user3.aspect(:name => "Pivots") }
-
-  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(:importer) { Diaspora::Importer.new(Diaspora::Parsers::XML) }
-
-  context 'serialized user' do
-    describe '#verify_user' do
-      it 'should return true for a new valid user' do
-        new_user = Factory(:user)
-        new_user.delete
-        importer.verify_user(new_user).should be true
-      end
-
-      it 'should return false if vaild user already exists' do
-        u = User.first
-        lambda{ importer.verify_user(user1) }.should raise_error
-      end
-    end
-
-    describe '#verify_person_for_user' do
-      it 'should pass if keys match' do
-        importer.verify_person_for_user(user1, user1.person).should be true
-      end
-
-      it 'should fail if private and public keys do not match' do
-        person = Factory(:person)
-        lambda{ importer.verify_person_for_user(user1, person) }.should raise_error
-      end
-
-      it 'should pass if the person does not exist' do 
-        user = Factory.build(:user)
-        importer.verify_person_for_user(user, user.person)
-      end
-    end
-
-
-    describe '#filter_posts' do
-      it 'should make sure all found posts are owned by the user' do
-        posts = [status_message1, status_message2]
-        whitelist = importer.filter_posts(posts, user1.person)[:whitelist]
-
-        whitelist.should have(2).posts
-        whitelist.should include status_message1.id.to_s
-        whitelist.should include status_message2.id.to_s
-      end
-
-      it 'should remove posts not owned by the user' do
-        posts = [status_message1, status_message2, status_message3]
-        whitelist = importer.filter_posts(posts, user1.person)[:whitelist]
-
-        whitelist.should have(2).posts
-        whitelist.should_not include status_message3.id
-      end
-
-      it 'should return a list of unknown posts' do
-        posts = [status_message1, status_message2, Factory.build(:status_message)]
-        unknown = importer.filter_posts(posts, user1.person)[:unknown]
-
-        unknown.should have(1).post
-      end
-
-      it 'should generate a whitelist, unknown posts inclusive' do
-        posts = [status_message1, status_message2, Factory.build(:status_message)]
-        filters = importer.filter_posts(posts, user1.person)
-
-        filters[:whitelist].should include filters[:unknown].keys.first
-      end
-    end
-
-    describe '#clean_aspects' do 
-      it 'should purge posts not in whitelist that are present in aspects' do
-        whitelist = {status_message1.id.to_s => true, status_message2.id.to_s => true}
-
-        aspect1.reload
-        aspect1.post_ids << status_message3.id.to_s
-
-        proc{ importer.clean_aspects([aspect1], whitelist) }.should change(aspect1.post_ids, :count).by(-1)
-        aspect1.post_ids.should_not include status_message3.id 
-      end
-    end
-
-    describe '#filter_people' do
-      it 'should filter people who already exist in the database' do
-        new_peep = Factory.build(:person)
-        people = [user1.person, user2.person, new_peep]
-        
-        importer.filter_people(people).keys.should == [new_peep.id.to_s]
-      end
-    end
-  end
-end
diff --git a/spec/misc_spec.rb b/spec/misc_spec.rb
index 12f7837c14c7db6a06450299a7fe39b5aecf7fc6..1db3f3f8296862921d3d9327f76bc4179a42882c 100644
--- a/spec/misc_spec.rb
+++ b/spec/misc_spec.rb
@@ -5,13 +5,34 @@
 require 'spec_helper'
 
 describe 'making sure the spec runner works' do
+
+  it 'should not delete the database mid-spec' do
+    User.count.should == 0
+    Factory.create(:user)
+    User.count.should == 1
+  end
+
+  it 'should make sure the last user no longer exsists' do
+    User.count.should == 0
+  end
+
   it 'should factory create a user with a person saved' do
     user = Factory.create(:user)
     loaded_user = User.first(:id => user.id)
     loaded_user.person.owner_id.should == user.id
   end
+  describe 'testing a before do block' do
+    before do
+      Factory.create(:user)
 
-   describe '#friend_users' do
+    end
+
+    it 'should have cleaned before the before do block runs' do
+      User.count.should == 1
+    end
+
+  end
+  describe '#friend_users' do
     before do
       @user1 = Factory.create(:user)
       @aspect1 = @user1.aspect(:name => "losers")
diff --git a/spec/models/aspect_spec.rb b/spec/models/aspect_spec.rb
index d5c281a3b1905da448cd54f45cf5f8f5c78889da..e91d4a258e01f2d5c403c18be26afac488d47db8 100644
--- a/spec/models/aspect_spec.rb
+++ b/spec/models/aspect_spec.rb
@@ -65,7 +65,7 @@ describe Aspect do
 
     it 'belong to a user' do
       @aspect.user.id.should == @user.id
-      @user.aspects.size.should == 1 
+      @user.aspects.size.should == 3
     end
 
     it 'should have people' do
diff --git a/spec/models/comments_spec.rb b/spec/models/comments_spec.rb
index 08252ada2789f24e413d66d9940440914f4d3696..b2f2d3c6158802956ec22790fcccbf70e630d59c 100644
--- a/spec/models/comments_spec.rb
+++ b/spec/models/comments_spec.rb
@@ -18,7 +18,7 @@ describe Comment do
       status.comments.should == []
 
       @user.comment "Yeah, it was great", :on => status
-      status.reload.comments.first.text.should == "Yeah, it was great"
+      StatusMessage.first.comments.first.text.should == "Yeah, it was great"
     end
 
     it "should be able to comment on a person's status" do
@@ -26,8 +26,8 @@ describe Comment do
       status = Factory.create(:status_message, :person => person)
       @user.comment "sup dog", :on => status
 
-      status.reload.comments.first.text.should == "sup dog"
-      status.reload.comments.first.person.should == @user.person
+      StatusMessage.first.comments.first.text.should == "sup dog"
+      StatusMessage.first.comments.first.person.should == @user.person
     end
 
     it 'should not send out comments when we have no people' do
diff --git a/spec/models/person_spec.rb b/spec/models/person_spec.rb
index edc5b20eebf843e9e96dffb67426d553477f802d..fd5ea0162e965074d9c5d347172e3647b4991d78 100644
--- a/spec/models/person_spec.rb
+++ b/spec/models/person_spec.rb
@@ -13,22 +13,6 @@ describe Person do
     @aspect2 = @user2.aspect(:name => "Abscence of Babes")
   end
 
-  describe "validation" do
-    describe "of associated profile" do
-      it "fails if the profile isn't valid" do
-        person = Factory.build(:person)
-        person.should be_valid
-        
-        person.profile.update_attribute(:first_name, nil)
-        person.profile.should_not be_valid
-        person.should_not be_valid
-
-        person.errors.count.should == 1
-        person.errors.full_messages.first.should =~ /first name/i
-      end
-    end
-  end
-
   describe '#diaspora_handle' do
     context 'local people' do
       it 'uses the pod config url to set the diaspora_handle' do
@@ -77,38 +61,64 @@ describe Person do
     person_two.owns?(person_message).should be false
   end
 
-  it "deletes all of a person's posts upon person deletion" do
+  it 'should delete all of user posts except comments upon user deletion' do
     person = Factory.create(:person)
 
-    status = Factory.create(:status_message, :person => person)
-    Factory.create(:status_message, :person => @person)
-
-    lambda {person.destroy}.should change(Post, :count).by(-1)
-  end
-
-  it "does not delete a person's comments on person deletion" do
-    person = Factory.create(:person)
+    Factory.create(:status_message, :person => person)
+    Factory.create(:status_message, :person => person)
+    Factory.create(:status_message, :person => person)
+    Factory.create(:status_message, :person => person)
 
     status_message = Factory.create(:status_message, :person => @person)
 
+    Factory.create(:comment, :person_id => person.id,  :text => "yes i do",       :post => status_message)
     Factory.create(:comment, :person_id => person.id,  :text => "i love you",     :post => status_message)
+    Factory.create(:comment, :person_id => person.id,  :text => "hello",          :post => status_message)
     Factory.create(:comment, :person_id => @person.id, :text => "you are creepy", :post => status_message)
-    
-    lambda {person.destroy}.should_not change(Comment, :count)
+
+    person.destroy
+
+    Post.count.should == 1
+    Comment.all.count.should == 4
+    status_message.comments.count.should == 4
   end
 
   describe "unfriending" do
     it 'should not delete an orphaned friend' do
-      @user.activate_friend(@person, @aspect)
+      request = @user.send_friend_request_to @person, @aspect
 
-      lambda {@user.unfriend(@person)}.should_not change(Person, :count)
+      @user.activate_friend(@person, @aspect)
+      @user.reload
+
+      Person.all.count.should    == 3
+      @user.friends.count.should == 1
+      @user.unfriend(@person)
+      @user.reload
+      @user.friends.count.should == 0
+      Person.all.count.should    == 3
     end
 
     it 'should not delete an un-orphaned friend' do
+      request = @user.send_friend_request_to @person, @aspect
+      request2 = @user2.send_friend_request_to @person, @aspect2
+
       @user.activate_friend(@person, @aspect)
       @user2.activate_friend(@person, @aspect2)
 
-      lambda {@user.unfriend(@person)}.should_not change(Person, :count)
+      @user.reload
+      @user2.reload
+
+      Person.all.count.should     == 3
+      @user.friends.count.should  == 1
+      @user2.friends.count.should == 1
+
+      @user.unfriend(@person)
+      @user.reload
+      @user2.reload
+      @user.friends.count.should  == 0
+      @user2.friends.count.should == 1
+
+      Person.all.count.should     == 3
     end
   end
 
diff --git a/spec/models/photo_spec.rb b/spec/models/photo_spec.rb
index d97f14d759ceace2d14b02940c3c2b75f1dc000f..7fcf5967e751b4d026ec3a66cd09e69efd70c92f 100644
--- a/spec/models/photo_spec.rb
+++ b/spec/models/photo_spec.rb
@@ -51,7 +51,8 @@ describe Photo do
   it 'should have a caption' do
     @photo.image.store! File.open(@fixture_name)
     @photo.caption = "cool story, bro"
-    @photo.save.should be_true
+    @photo.save
+    Photo.first.caption.should == "cool story, bro"
   end
 
   it 'should remove its reference in user profile if it is referred' do
@@ -62,9 +63,9 @@ describe Photo do
     @user.save
     @user.person.save
 
-    @user.profile.image_url.should == @photo.image.url(:thumb_medium)
+    User.first.profile.image_url.should == @photo.image.url(:thumb_medium)
     @photo.destroy
-    @user.reload.profile.image_url.should be nil
+    User.first.profile.image_url.should be nil
   end
 
   it 'should not use the imported filename as the url' do
diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb
index 4c3daf4b60c1f75e63348a117aac466364a8f061..bc445af990234517ca545fbc63ebc90efee2141f 100644
--- a/spec/models/post_spec.rb
+++ b/spec/models/post_spec.rb
@@ -6,7 +6,8 @@ require 'spec_helper'
 
 describe Post do
   before do
-    @user = Factory.create(:user)
+    @user = Factory.create(:user, :email => "bob@aol.com")
+    @user.person.save
   end
 
   describe 'xml' do
diff --git a/spec/models/profile_spec.rb b/spec/models/profile_spec.rb
index de2eb695598fd4d440e1c068cf386dfa8c936eaa..7bba8311c87a4c11b4e9b0a6a2599a5839f3e754 100644
--- a/spec/models/profile_spec.rb
+++ b/spec/models/profile_spec.rb
@@ -5,40 +5,25 @@
 require 'spec_helper'
 
 describe Profile do
-  describe 'validation' do
-    describe "of first_name" do
-      it "requires first name" do
-        profile = Factory.build(:profile, :first_name => nil)
-        profile.should_not be_valid
-        profile.first_name = "Hortense"
-        profile.should be_valid
-      end
-      it "requires non-empty first name" do
-        profile = Factory.build(:profile, :first_name => "     ")
-        profile.should_not be_valid
-      end
-      it "strips leading and trailing whitespace" do
-        profile = Factory.build(:profile, :first_name => "     Shelly    ")
-        profile.should be_valid
-        profile.first_name.should == "Shelly"
-      end
+  before do
+    @person = Factory.build(:person)
+  end
+
+  describe 'requirements' do
+    it "should include a first name" do
+      @person.profile = Factory.build(:profile,:first_name => nil)
+      @person.profile.valid?.should be false
+      @person.profile.first_name = "Bob"
+      @person.profile.valid?.should be true
     end
-    describe "of last_name" do
-      it "requires a last name" do
-        profile = Factory.build(:profile, :last_name => nil)
-        profile.should_not be_valid
-        profile.last_name = "Shankar"
-        profile.should be_valid
-      end
-      it "requires non-empty last name" do
-        profile = Factory.build(:profile, :last_name => "     ")
-        profile.should_not be_valid
-      end
-      it "strips leading and trailing whitespace" do
-        profile = Factory.build(:profile, :last_name => "     Ohba    ")
-        profile.should be_valid
-        profile.last_name.should == "Ohba"
-      end
+
+    it "should include a last name" do
+      @person.profile = Factory.build(:profile, :last_name => nil)
+      @person.profile.valid?.should be false
+      @person.profile.last_name = "Smith"
+      @person.profile.valid?.should be true
     end
+
   end
+
 end
diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb
index 8449b964c52938201fa338b68cf6de233e530e2d..2d8d0c5bf443e29f472c8796a4894b7875653a43 100644
--- a/spec/models/status_message_spec.rb
+++ b/spec/models/status_message_spec.rb
@@ -6,7 +6,7 @@ require 'spec_helper'
 
 describe StatusMessage do
   before do
-      @user = Factory.create(:user)
+      @user = Factory.create(:user, :email => "bob@aol.com")
       @aspect = @user.aspect(:name => "losers")
   end
 
diff --git a/spec/models/user/attack_vectors_spec.rb b/spec/models/user/attack_vectors_spec.rb
index 67235f447fbbe4ce0848c9aad3a1cd40d475ba05..4ae9184dd5ed046e25d60f1aefdad76a2af6bce9 100644
--- a/spec/models/user/attack_vectors_spec.rb
+++ b/spec/models/user/attack_vectors_spec.rb
@@ -8,8 +8,6 @@ describe User do
 
   let(:user) { Factory(:user) }
   let(:aspect) { user.aspect(:name => 'heroes') }
-  
-  let(:bad_user) { Factory(:user)}
 
   let(:user2) { Factory(:user) }
   let(:aspect2) { user2.aspect(:name => 'losers') }
@@ -23,7 +21,7 @@ describe User do
   end
 
   context 'non-friend valid user' do
-    
+
     it 'raises if receives post by non-friend' do
       post_from_non_friend = bad_user.build_post( :status_message, :message => 'hi')
       xml = bad_user.salmon(post_from_non_friend).xml_for(user.person)
@@ -42,7 +40,7 @@ describe User do
   end
 
   context 'malicious friend attack vector' do
-    it 'overwrites messages with a different user' do 
+    it 'overwrites messages with a different user' do
       original_message = user2.post :status_message, :message => 'store this!', :to => aspect2.id
 
       user.receive_salmon(user2.salmon(original_message).xml_for(user.person))
@@ -54,8 +52,8 @@ describe User do
       user.raw_visible_posts.count.should be 1
       user.raw_visible_posts.first.message.should == "store this!"
     end
-     
-    it 'overwrites messages which apear to be from the same user' do 
+
+    it 'overwrites messages which apear to be from the same user' do
       original_message = user2.post :status_message, :message => 'store this!', :to => aspect2.id
       user.receive_salmon(user2.salmon(original_message).xml_for(user.person))
       user.raw_visible_posts.count.should be 1
@@ -78,12 +76,12 @@ describe User do
       user2.reload
       user2.profile.first_name.should == "Robert"
     end
-    
+
     it 'should not overwrite another persons profile through comment' do
       pending
       user_status = user.post(:status_message, :message => "hi", :to => 'all')
       comment = Comment.new(:person_id => user3.person.id, :text => "hey", :post => user_status)
-      
+
       comment.creator_signature = comment.sign_with_key(user3.encryption_key)
       comment.post_creator_signature = comment.sign_with_key(user.encryption_key)
 
@@ -91,14 +89,14 @@ describe User do
       original_url = person.url
       original_id = person.id
       puts original_url
-      
+
       comment.person.url = "http://bad.com/"
       user3.delete
       person.delete
-      
+
       comment.to_diaspora_xml.include?("bad.com").should be true
       user2.receive_salmon(user.salmon(comment).xml_for(user2.person))
- 
+
       comment.person.url.should == original_url
       Person.first(:id => original_id).url.should == original_url
     end
diff --git a/spec/models/user/receive_spec.rb b/spec/models/user/receive_spec.rb
index c8e4891de228fbc0ba5dcdf76c656c3d4b20cc8e..1d97cdad18dc2218a729e71cb6237724a4679fde 100644
--- a/spec/models/user/receive_spec.rb
+++ b/spec/models/user/receive_spec.rb
@@ -22,13 +22,16 @@ describe User do
 
   it 'should be able to parse and store a status message from xml' do
     status_message = user2.post :status_message, :message => 'store this!', :to => aspect2.id
+    person = user2.person
 
     xml = status_message.to_diaspora_xml
     user2.destroy
     status_message.destroy
+    StatusMessage.all.size.should == 0
+    user.receive xml , user2.person
 
-    user
-    lambda {user.receive xml , user2.person}.should change (Post,:count).by(1)
+    Post.all(:person_id => person.id).first.message.should == 'store this!'
+    StatusMessage.all.size.should == 1
   end
 
   it 'should not create new aspects on message receive' do
@@ -44,52 +47,96 @@ describe User do
   end
 
   describe 'post refs' do
-    before do
-      @status_message = user2.post :status_message, :message => "hi", :to =>aspect2.id
-      user.receive @status_message.to_diaspora_xml, user2.person
-      user.reload
-    end
-
     it "should add a received post to the aspect and visible_posts array" do
-      user.raw_visible_posts.include?(@status_message).should be true
-      aspect.reload
-      aspect.posts.include?(@status_message).should be_true
+      status_message = user.post :status_message, :message => "hi", :to =>aspect.id
+      user.reload
+      salmon = user.salmon(status_message).xml_for user2.person
+      user2.receive_salmon salmon
+      user2.reload
+      user2.raw_visible_posts.include?(status_message).should be true
+      aspect2.reload
+      aspect2.posts.include?(status_message).should be_true
     end
 
     it 'should be removed on unfriending' do
+      status_message = user2.post :status_message, :message => "hi", :to => aspect2.id
+      user.receive status_message.to_diaspora_xml, user2.person
+      user.reload
+
+      user.raw_visible_posts.count.should == 1
+
       user.unfriend(user2.person)
+
       user.reload
       user.raw_visible_posts.count.should == 0
+
+      Post.count.should be 1
     end
 
     it 'should be remove a post if the noone links to it' do
+      status_message = user2.post :status_message, :message => "hi", :to => aspect2.id
+      user.receive status_message.to_diaspora_xml, user2.person
+      user.reload
+
+      user.raw_visible_posts.count.should == 1
+
       person = user2.person
       user2.delete
+      user.unfriend(person)
 
-      lambda {user.unfriend(person)}.should change(Post, :count).by(-1)
       user.reload
       user.raw_visible_posts.count.should == 0
+
+      Post.count.should be 0
     end
 
     it 'should keep track of user references for one person ' do
-      @status_message.reload
-      @status_message.user_refs.should == 1
+      status_message = user2.post :status_message, :message => "hi", :to => aspect2.id
+      user.receive status_message.to_diaspora_xml, user2.person
+      user.reload
+
+      user.raw_visible_posts.count.should == 1
+
+      status_message.reload
+      status_message.user_refs.should == 1
 
       user.unfriend(user2.person)
-      @status_message.reload
-      @status_message.user_refs.should == 0
+      status_message.reload
+
+      user.reload
+      user.raw_visible_posts.count.should == 0
+
+      status_message.reload
+      status_message.user_refs.should == 0
+
+      Post.count.should be 1
     end
 
     it 'should not override userrefs on receive by another person' do
       user3.activate_friend(user2.person, aspect3)
-      user3.receive @status_message.to_diaspora_xml, user2.person
 
-      @status_message.reload
-      @status_message.user_refs.should == 2
+      status_message = user2.post :status_message, :message => "hi", :to => aspect2.id
+      user.receive status_message.to_diaspora_xml, user2.person
+
+      user3.receive status_message.to_diaspora_xml, user2.person
+      user.reload
+      user3.reload
+
+      user.raw_visible_posts.count.should == 1
+
+      status_message.reload
+      status_message.user_refs.should == 2
 
       user.unfriend(user2.person)
-      @status_message.reload
-      @status_message.user_refs.should == 1
+      status_message.reload
+
+      user.reload
+      user.raw_visible_posts.count.should == 0
+
+      status_message.reload
+      status_message.user_refs.should == 1
+
+      Post.count.should be 1
     end
   end
 
diff --git a/spec/models/user/user_friending_spec.rb b/spec/models/user/user_friending_spec.rb
index 2756c084158f3148c33f17661646649f5036a212..8bcc093f1fb7f4eb1e95c9ebf36a0688709a4b7a 100644
--- a/spec/models/user/user_friending_spec.rb
+++ b/spec/models/user/user_friending_spec.rb
@@ -28,9 +28,10 @@ describe User do
     it "should be able to accept a pending friend request" do
       r = Request.instantiate(:to => user.receive_url, :from => friend)
       r.save
-      
-      proc {user.accept_friend_request(r.id, aspect.id)}.should change{
-        Request.for_user(user).all.count}.by(-1)
+      Person.all.count.should == 2
+      Request.for_user(user).all.count.should == 1
+      user.accept_friend_request(r.id, aspect.id)
+      Request.for_user(user).all.count.should == 0
     end
 
     it 'should be able to ignore a pending friend request' do
@@ -38,8 +39,12 @@ describe User do
       r = Request.instantiate(:to => user.receive_url, :from => friend)
       r.save
 
-      proc{user.ignore_friend_request(r.id)}.should change{
-        Request.for_user(user).count}.by(-1)
+      Person.count.should == 2
+
+      user.ignore_friend_request(r.id)
+
+      Person.count.should == 2
+      Request.count.should == 0
     end
 
     it 'should not be able to friend request an existing friend' do
@@ -75,53 +80,59 @@ describe User do
         @request_three.destroy
       end
 
-      context 'request from one remote person to one local user' do
-        before do
-          user2.receive @req_three_xml, user.person
-        end
-        it 'should befriend the user other user on the same pod' do
-          proc{
-            user2.accept_friend_request @request_three.id, aspect2.id
-          }.should_not change(Person, :count)
-          user2.friends.include?(user.person).should be true
-        end
-
-        it 'should not delete the ignored user on the same pod' do
-          proc{
-            user2.ignore_friend_request @request_three.id
-          }.should_not change(Person, :count)
-          user2.friends.include?(user.person).should be false
-        end
+      it 'should befriend the user other user on the same pod' do
+        user2.receive @req_three_xml, user.person
+        user2.pending_requests.size.should be 1
+        user2.accept_friend_request @request_three.id, aspect2.id
+        user2.friends.include?(user.person).should be true
+        Person.all.count.should be 3
       end
-      context 'Two users receiving requests from one person' do
-        before do
-          user.receive @req_xml, person_one
 
-          user2.receive @req_two_xml, person_one
-        end
-        it 'should both users should befriend the same person' do
-          user.accept_friend_request @request.id, aspect.id
-          user.friends.include?(person_one).should be true
+      it 'should not delete the ignored user on the same pod' do
+        user2.receive @req_three_xml, user.person
+        user2.pending_requests.size.should be 1
+        user2.ignore_friend_request @request_three.id
+        user2.friends.include?(user.person).should be false
+        Person.all.count.should be 3
+      end
 
-          user2.accept_friend_request @request_two.id, aspect2.id
-          user2.friends.include?(person_one).should be true
-        end
+      it 'should both users should befriend the same person' do
+        user.receive @req_xml, person_one
+        user.pending_requests.size.should be 1
+        user.accept_friend_request @request.id, aspect.id
+        user.friends.include?(person_one).should be true
 
-        it 'should keep the person around if one of the users rejects him' do
-          user.accept_friend_request @request.id, aspect.id
-          user.friends.include?(person_one).should be true
+        user2.receive @req_two_xml, person_one
+        user2.pending_requests.size.should be 1
+        user2.accept_friend_request @request_two.id, aspect2.id
+        user2.friends.include?(person_one).should be true
+        Person.all.count.should be 3
+      end
 
-          user2.ignore_friend_request @request_two.id
-          user2.friends.include?(person_one).should be false
-        end
+      it 'should keep the person around if one of the users rejects him' do
+        user.receive @req_xml, person_one
+        user.pending_requests.size.should be 1
+        user.accept_friend_request @request.id, aspect.id
+        user.friends.include?(person_one).should be true
 
-        it 'should keep the person around if the users ignores them' do
-          user.ignore_friend_request user.pending_requests.first.id
-          user.friends.include?(person_one).should be false
+        user2.receive @req_two_xml, person_one
+        user2.pending_requests.size.should be 1
+        user2.ignore_friend_request @request_two.id
+        user2.friends.include?(person_one).should be false
+        Person.all.count.should be 3
+      end
 
-          user2.ignore_friend_request user2.pending_requests.first.id #@request_two.id
-          user2.friends.include?(person_one).should be false
-        end
+      it 'should keep the person around if the users ignores them' do
+        user.receive @req_xml, person_one
+        user.pending_requests.size.should be 1
+        user.ignore_friend_request user.pending_requests.first.id
+        user.friends.include?(person_one).should be false
+
+        user2.receive @req_two_xml, person_one
+        user2.pending_requests.size.should be 1
+        user2.ignore_friend_request user2.pending_requests.first.id #@request_two.id
+        user2.friends.include?(person_one).should be false
+        Person.all.count.should be 3
       end
     end
 
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 536e7b68ce2f23608a0a885fab7191e3d3d7b1d4..61e37b3aa89f935d33e0d7edb37c5bb9e753c330 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -13,20 +13,6 @@ describe User do
   let(:aspect3) { user3.aspect(:name => 'stuff') }
 
   describe "validation" do
-    describe "of associated person" do
-      it "fails if person is not valid" do
-        user = Factory.build(:user)
-        user.should be_valid
-
-        user.person.update_attribute(:serialized_public_key, nil)
-        user.person.should_not be_valid
-        user.should_not be_valid
-
-        user.errors.full_messages.count.should == 1
-        user.errors.full_messages.first.should =~ /serialized public key/i
-      end
-    end
-
     describe "of passwords" do
       it "fails if password doesn't match confirmation" do
         user = Factory.build(:user, :password => "password", :password_confirmation => "nope")
@@ -86,41 +72,6 @@ describe User do
     end
   end
 
-  describe ".instantiate!" do
-    it "creates the user if params are valid" do
-      User.find_by_username("ohai").should be_nil
-      user = User.instantiate!({
-                                 :username => "ohai",
-                                 :email => "ohai@example.com",
-                                 :password => "password",
-                                 :password_confirmation => "password",
-                                 :person => {:profile => {:first_name => "O", :last_name => "Hai"}}})
-      user.should be_valid
-      User.find_by_username("ohai").should == user
-    end
-    describe "with invalid params" do
-      before do
-        @invalid_params = {
-          :username => "ohai",
-          :email => "ohai@example.com",
-          :password => "password",
-          :password_confirmation => "password",
-          :person => {:profile => {:first_name => "", :last_name => ""}}}
-      end
-      it "raises an error" do
-        lambda { User.instantiate!(@invalid_params) }.should raise_error
-      end
-      it "does not create the user" do
-        User.find_by_username("ohai").should be_nil
-        begin
-          User.instantiate!(@invalid_params)
-        rescue
-        end
-        User.find_by_username("ohai").should be_nil
-      end
-    end
-  end
-
   describe ".find_for_authentication" do
     it "preserves case" do
       User.find_for_authentication(:username => user.username).should == user
@@ -147,6 +98,7 @@ describe User do
   end
 
   context 'aspects' do
+
     it 'should delete an empty aspect' do
       user.drop_aspect(aspect)
       user.aspects.include?(aspect).should == false
@@ -176,6 +128,7 @@ describe User do
       user.destroy
     end
 
+
     it 'should remove all aspects' do
       aspects = user.aspects
       aspects.count.should > 0
@@ -184,6 +137,7 @@ describe User do
       aspects.count.should == 0
     end
 
+
     describe '#remove_person' do
       it 'should remove the person object' do
         person = user.person
@@ -201,6 +155,7 @@ describe User do
     end
 
     describe '#unfriend_everyone' do
+
       before do
         user3.delete
       end
@@ -218,4 +173,5 @@ describe User do
       end
     end
   end
+
 end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 218def68bf388754c9c0bd0f006f7ac2cf7029fd..552fd884da34e1119246a4cb5b354f01ea121a77 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -26,11 +26,18 @@ RSpec.configure do |config|
   DatabaseCleaner.orm = "mongo_mapper"
 
   config.before(:suite) do
+    DatabaseCleaner.clean_with(:truncation)
     stub_signature_verification
+
   end
 
   config.before(:each) do
+    DatabaseCleaner.start
     stub_sockets
+    User.stub!(:allowed_email?).and_return(:true)
+  end
+
+  config.after(:each) do
     DatabaseCleaner.clean
   end
 end