diff --git a/.gitignore b/.gitignore
index a2b7cbb6eb99cb954e3e28c186e73df5766468fe..ea96347f86c49e27059d45bf3d4ec22e47a00a33 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,7 +22,7 @@ spec/fixtures/*.y*ml
 spec/fixtures/*.fixture.*
 coverage/*
 
-# Uploded files and local files
+# Uploaded files and local files
 public/uploads/*
 public/assets/*
 public/source.tar*
diff --git a/Gemfile b/Gemfile
index 63586de4290747c6f5f141b0dd3ff0d665ba2f68..a92a25eca5620b09ae885b8db3e2b6affa060720 100644
--- a/Gemfile
+++ b/Gemfile
@@ -6,6 +6,7 @@ gem 'foreigner', '0.9.1'
 
 gem 'bundler', '>= 1.0.0'
 gem 'chef', '0.9.12', :require => false
+gem 'ohai', '0.5.8', :require => false #Chef dependency
 
 gem 'nokogiri', '1.4.3.1'
 
@@ -33,7 +34,7 @@ gem 'addressable', '2.2.2', :require => 'addressable/uri'
 gem 'json', '1.4.6'
 gem 'http_accept_language', :git => 'git://github.com/iain/http_accept_language.git', :ref => '0b78aa7849fc90cf9e12'
 
-gem 'thin', '1.2.8', :require => false
+gem 'thin', '1.2.11', :require => false
 
 #Websocket
 gem 'em-websocket', :git => 'git://github.com/igrigorik/em-websocket', :ref => 'e278f5a1c4db60be7485'
@@ -60,6 +61,7 @@ gem 'SystemTimer', '1.2.1' unless RUBY_VERSION.include? '1.9' || RUBY_PLATFORM =
 group :development do
   gem 'capistrano', '2.5.19', :require => false
   gem 'capistrano-ext', '1.2.1', :require => false
+  gem 'sod', :git => "git://github.com/MikeSofaer/sod.git"
 end
 
 group :test, :development do
diff --git a/Gemfile.lock b/Gemfile.lock
index adf9621aae9a68dc679a84d94624e7de3da56046..be193e65b19aaaca8c33f22e7fc3201fcfc0e8ec 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -7,6 +7,13 @@ GIT
       activesupport (>= 2.3.0)
       nokogiri (>= 1.3.3)
 
+GIT
+  remote: git://github.com/MikeSofaer/sod.git
+  revision: 08e990601bfa6ffd3224a2e4c792df9eae712693
+  specs:
+    sod (0.0.1)
+      net-scp
+
 GIT
   remote: git://github.com/diaspora/acts-as-taggable-on.git
   revision: c3592fe1a906f6ff1cd12766c5cf1152c51eec40
@@ -65,6 +72,10 @@ PATH
 GEM
   remote: http://rubygems.org/
   specs:
+    POpen4 (0.1.4)
+      Platform (>= 0.4.0)
+      open4
+    Platform (0.4.0)
     SystemTimer (1.2.1)
     abstract (1.0.0)
     actionmailer (3.0.3)
@@ -138,7 +149,7 @@ GEM
       uuidtools
     childprocess (0.1.7)
       ffi (~> 0.6.3)
-    closure-compiler (1.0.0)
+    closure-compiler (1.1.1)
     cloudfiles (1.4.10)
       mime-types (>= 1.16)
     columnize (0.3.2)
@@ -153,7 +164,7 @@ GEM
     cucumber-rails (0.3.2)
       cucumber (>= 0.8.0)
     culerity (0.2.15)
-    daemons (1.1.0)
+    daemons (1.1.2)
     database_cleaner (0.6.0)
     devise (1.1.3)
       bcrypt-ruby (~> 2.1.2)
@@ -189,13 +200,13 @@ GEM
       nokogiri (~> 1.4.3.1)
       ruby-hmac
     foreigner (0.9.1)
-    formatador (0.1.2)
+    formatador (0.1.3)
     fuubar (0.0.4)
       chalofa_ruby-progressbar (~> 0.0.9)
       rspec (~> 2.0)
       rspec-instafail (~> 0.1.4)
     gem_plugin (0.2.3)
-    gherkin (2.3.5)
+    gherkin (2.3.6)
       json (>= 1.4.6)
     haml (3.0.25)
     hashie (0.4.0)
@@ -229,7 +240,7 @@ GEM
       mixlib-log
     mixlib-cli (1.2.0)
     mixlib-config (1.1.2)
-    mixlib-log (1.2.0)
+    mixlib-log (1.3.0)
     moneta (0.6.0)
     mongrel (1.1.5)
       cgi_multipart_eof_fix (>= 2.4)
@@ -289,10 +300,11 @@ GEM
       oa-enterprise (= 0.1.6)
       oa-oauth (= 0.1.6)
       oa-openid (= 0.1.6)
+    open4 (1.0.1)
     polyglot (0.3.1)
     pyu-ruby-sasl (0.0.3.2)
     rack (1.2.2)
-    rack-mount (0.6.13)
+    rack-mount (0.6.14)
       rack (>= 1.0.0)
     rack-openid (1.2.0)
       rack (>= 1.1.0)
@@ -314,7 +326,7 @@ GEM
       thor (~> 0.14.4)
     rake (0.8.7)
     rcov (0.9.9)
-    redis (2.1.1)
+    redis (2.2.0)
     redis-namespace (0.8.0)
       redis (< 3.0.0)
     resque (1.10.0)
@@ -358,13 +370,13 @@ GEM
       json_pure
       rubyzip
     simple_oauth (0.1.4)
-    sinatra (1.2.1)
+    sinatra (1.2.3)
       rack (~> 1.1)
       tilt (< 2.0, >= 1.2.2)
     subexec (0.0.4)
-    systemu (1.2.0)
+    systemu (2.2.0)
     term-ansicolor (1.0.5)
-    thin (1.2.8)
+    thin (1.2.11)
       daemons (>= 1.0.9)
       eventmachine (>= 0.12.6)
       rack (>= 1.0.0)
@@ -375,7 +387,7 @@ GEM
     typhoeus (0.2.4)
       mime-types
       mime-types
-    tzinfo (0.3.25)
+    tzinfo (0.3.26)
     uuidtools (2.1.2)
     vegas (0.1.8)
       rack (>= 1.0.0)
@@ -385,8 +397,9 @@ GEM
       addressable (>= 2.2.2)
       crack (>= 0.1.7)
     will_paginate (3.0.pre2)
-    xml-simple (1.0.14)
-    yui-compressor (0.9.4)
+    xml-simple (1.0.15)
+    yui-compressor (0.9.6)
+      POpen4 (>= 0.1.4)
 
 PLATFORMS
   ruby
@@ -426,6 +439,7 @@ DEPENDENCIES
   mongrel
   mysql2 (= 0.2.6)
   nokogiri (= 1.4.3.1)
+  ohai (= 0.5.8)
   omniauth (= 0.1.6)
   rails (= 3.0.3)
   rcov
@@ -437,7 +451,8 @@ DEPENDENCIES
   rspec-rails (>= 2.0.0)
   ruby-debug
   selenium-webdriver (= 0.1.3)
-  thin (= 1.2.8)
+  sod!
+  thin (= 1.2.11)
   twitter!
   typhoeus
   webmock
diff --git a/Sodfile b/Sodfile
new file mode 100644
index 0000000000000000000000000000000000000000..e9f2a4a77c7515f4cd537d0d52f5d5c33d75d08b
--- /dev/null
+++ b/Sodfile
@@ -0,0 +1,6 @@
+production:
+  user: root
+  repo: git@github.com:diaspora/diaspora.git
+  app_dir: /usr/local/app
+  cookbook: centos
+  ruby_version: ree-1.8.7-2011.03
diff --git a/app/controllers/apis_controller.rb b/app/controllers/apis_controller.rb
index 1a24696c5830209aee794d4874d00f7a83921a95..4bad3f2328bb3a94cf6f15c7f8370d411abccff7 100644
--- a/app/controllers/apis_controller.rb
+++ b/app/controllers/apis_controller.rb
@@ -1,7 +1,7 @@
 class ApisController < ApplicationController #We should start with this versioned, V0ApisController  BEES
   before_filter :authenticate_user!, :only => [:home_timeline]
   respond_to :json
-  
+
   #posts
   def public_timeline
     set_defaults
@@ -30,9 +30,9 @@ class ApisController < ApplicationController #We should start with this versione
 
   def home_timeline
     set_defaults
-    timeline = current_user.raw_visible_posts.includes(:comments, :photos, :likes, :dislikes).paginate(
-             :page => params[:page], :per_page => params[:per_page], :order => "#{params[:order]} DESC")
-
+    timeline = current_user.visible_posts(:max_time => params[:max_time],
+                                          :limit => params[:per_page],
+                                          :order => "#{params[:order]} DESC").includes(:comments, :photos, :likes, :dislikes)
     respond_with timeline do |format|
       format.json{ render :json => timeline.to_json(:format => :twitter) }
     end
@@ -45,7 +45,7 @@ class ApisController < ApplicationController #We should start with this versione
         format.json{ render :json => status.to_json(:format => :twitter) }
       end
     else
-      render(:nothing => true, :status => 404) 
+      render(:nothing => true, :status => 404)
     end
   end
 
@@ -62,7 +62,7 @@ class ApisController < ApplicationController #We should start with this versione
         format.json{ render :json => person.to_json(:format => :twitter) }
       end
     else
-      render(:nothing => true, :status => 404) 
+      render(:nothing => true, :status => 404)
     end
   end
 
@@ -78,7 +78,7 @@ class ApisController < ApplicationController #We should start with this versione
         format.json{ render :json => people.to_json(:format => :twitter) }
       end
     else
-      render(:nothing => true, :status => 404) 
+      render(:nothing => true, :status => 404)
     end
   end
 
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 5bbf8cad337704e39ebfe7b52868a6591112d583..752fc559171a090d292badac47baf9f6caa4938d 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -3,6 +3,8 @@
 #   the COPYRIGHT file.
 
 class ApplicationController < ActionController::Base
+  clear_helpers
+  helper :layout, :error_messages
   has_mobile_fu
   protect_from_forgery :except => :receive
 
diff --git a/app/controllers/aspect_memberships_controller.rb b/app/controllers/aspect_memberships_controller.rb
index 72631232b2ab01ff1c3434193b5191964ab1e012..c4b1aad88be436f567c5f018b60992b86661b096 100644
--- a/app/controllers/aspect_memberships_controller.rb
+++ b/app/controllers/aspect_memberships_controller.rb
@@ -4,6 +4,7 @@
 #
 
 class AspectMembershipsController < ApplicationController
+  helper :aspects
   before_filter :authenticate_user!
 
   def destroy
diff --git a/app/controllers/aspects_controller.rb b/app/controllers/aspects_controller.rb
index 79b62d992fdeefd7ae79fb34be1a135d184b012f..ec5bdbccd94240be26b8a7347e37234cea3b00f5 100644
--- a/app/controllers/aspects_controller.rb
+++ b/app/controllers/aspects_controller.rb
@@ -3,6 +3,7 @@
 #   the COPYRIGHT file.
 
 class AspectsController < ApplicationController
+  helper :comments
   before_filter :authenticate_user!
   before_filter :save_sort_order, :only => :index
   before_filter :ensure_page, :only => :index
@@ -30,10 +31,10 @@ class AspectsController < ApplicationController
     @selected_contacts = @aspects.map { |aspect| aspect.contacts }.flatten.uniq unless params[:only_posts]
 
     @aspect_ids = @aspects.map { |a| a.id }
-    posts = current_user.raw_visible_posts(:by_members_of => @aspect_ids,
+    posts = current_user.visible_posts(:by_members_of => @aspect_ids,
                                            :type => 'StatusMessage',
                                            :order => session[:sort_order] + ' DESC',
-                                           :page => params[:page]
+                                           :max_time => params[:max_time].to_i
                           ).includes(:comments, :mentions, :likes, :dislikes)
 
     @posts = PostsFake.new(posts)
@@ -150,6 +151,10 @@ class AspectsController < ApplicationController
     @aspect.save
   end
 
+  def ensure_page
+    params[:max_time] ||= Time.now + 1
+  end
+
   protected
 
   def save_sort_order
diff --git a/app/controllers/contacts_controller.rb b/app/controllers/contacts_controller.rb
index 8609237594dffa6a684088e0f34027b7915e68bd..d7ab53155a8ed381c83065072b69994511941b87 100644
--- a/app/controllers/contacts_controller.rb
+++ b/app/controllers/contacts_controller.rb
@@ -3,6 +3,7 @@
 #   the COPYRIGHT file.
 
 class ContactsController < ApplicationController
+  helper :aspects
   before_filter :authenticate_user!
 
   def new
diff --git a/app/controllers/conversations_controller.rb b/app/controllers/conversations_controller.rb
index b19efa588a0464c16ad01c76413a4a3723ae4f23..24c1fca3a8d13fbb4807b0978a815b60609470ac 100644
--- a/app/controllers/conversations_controller.rb
+++ b/app/controllers/conversations_controller.rb
@@ -56,10 +56,12 @@ class ConversationsController < ApplicationController
   end
 
   def new
-    @all_contacts_and_ids = Contact.connection.execute(current_user.contacts.joins(:person => :profile).select("contacts.id, profiles.first_name, profiles.last_name, profiles.diaspora_handle").to_sql).map do |r|
-      {:value => r[0], :name => Person.name_from_attrs(r[1], r[2], r[3])}
+    all_contacts_and_ids = Contact.connection.execute(current_user.contacts.joins(:person => :profile
+      ).select("contacts.id, profiles.first_name, profiles.last_name, people.diaspora_handle").to_sql).map do |r|
+      {:value => r[0],
+       :name => Person.name_from_attrs(r[1], r[2], r[3]).gsub(/(")/, "'")}
     end
-
+    @contacts_json = all_contacts_and_ids.to_json.gsub!(/(")/, '\\"')
     @contact = current_user.contacts.find(params[:contact_id]) if params[:contact_id]
     render :layout => false
   end
diff --git a/app/controllers/notifications_controller.rb b/app/controllers/notifications_controller.rb
index 1d6963d2603b68ae4910a0adf718913b35960bc6..84c30ab0613ef8ddf6a8810896b3f7af3df092db 100644
--- a/app/controllers/notifications_controller.rb
+++ b/app/controllers/notifications_controller.rb
@@ -19,7 +19,7 @@ class NotificationsController < ApplicationController
 
   def index
     @notifications = Notification.find(:all, :conditions => {:recipient_id => current_user.id},
-                                       :order => 'created_at desc', :include => [:target, {:actors => :profile}]).paginate :page => params[:page], :per_page => 25
+                                       :order => 'updated_at desc', :include => [:target, {:actors => :profile}]).paginate :page => params[:page], :per_page => 25
     @group_days = @notifications.group_by{|note| I18n.l(note.updated_at, :format => I18n.t('date.formats.fullmonth_day')) }
     respond_with @notifications
   end
diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb
index a90d8296276a2b35bc43b49fb3512c6e1c420b37..d0b530aae9d557d095e43209310e95bd2e30c6c6 100644
--- a/app/controllers/people_controller.rb
+++ b/app/controllers/people_controller.rb
@@ -3,8 +3,8 @@
 #   the COPYRIGHT file.
 
 class PeopleController < ApplicationController
+  helper :comments
   before_filter :authenticate_user!, :except => [:show]
-  before_filter :ensure_page, :only => :show
 
   respond_to :html
   respond_to :json, :only => [:index, :show]
@@ -63,6 +63,7 @@ class PeopleController < ApplicationController
     @aspect = :profile
     @share_with = (params[:share_with] == 'true')
 
+    max_time = params[:max_time] ? Time.at(params[:max_time].to_i) : Time.now
     if @person
       @profile = @person.profile
 
@@ -72,10 +73,12 @@ class PeopleController < ApplicationController
         if @contact && !params[:only_posts]
           @aspects_with_person = @contact.aspects
           @aspect_ids = @aspects_with_person.map(&:id)
-          @contacts_of_contact = @contact.contacts
+          @contacts_of_contact_count = @contact.contacts.count
+          @contacts_of_contact = @contact.contacts.limit(36)
 
         else
           @contact ||= Contact.new
+          @contacts_of_contact_count = 0
           @contacts_of_contact = []
         end
 
@@ -84,13 +87,14 @@ class PeopleController < ApplicationController
         else
           @commenting_disabled = false
         end
-        @posts = current_user.posts_from(@person).where(:type => "StatusMessage").includes(:comments).limit(15).offset(15*(params[:page]-1))
+        @posts = current_user.posts_from(@person).where(:type => "StatusMessage").includes(:comments).limit(15).where(StatusMessage.arel_table[:created_at].lt(max_time))
       else
         @commenting_disabled = true
-        @posts = @person.posts.where(:type => "StatusMessage", :public => true).includes(:comments).limit(15).offset(15*(params[:page]-1))
+        @posts = @person.posts.where(:type => "StatusMessage", :public => true).includes(:comments).limit(15).where(StatusMessage.arel_table[:created_at].lt(max_time)).order('posts.created_at DESC')
       end
 
       @posts = PostsFake.new(@posts)
+
       if params[:only_posts]
         render :partial => 'shared/stream', :locals => {:posts => @posts}
       else
@@ -112,6 +116,21 @@ class PeopleController < ApplicationController
     end
   end
 
+  def contacts
+    @person = Person.find(params[:person_id])
+    if @person
+      @contact = current_user.contact_for(@person)
+      @aspect = :profile
+      @contacts_of_contact = @contact.contacts.paginate(:page => params[:page], :per_page => (params[:limit] || 15))
+      @hashes = hashes_for_people @contacts_of_contact, @aspects
+      @contact = current_user.contact_for(@person)
+      @aspects_with_person = @contact.aspects
+      @aspect_ids = @aspects_with_person.map(&:id)
+    else
+      flash[:error] = I18n.t 'people.show.does_not_exist'
+      redirect_to people_path
+    end
+  end
   private
   def webfinger(account, opts = {})
     Resque.enqueue(Job::SocketWebfinger, current_user.id, account, opts)
diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb
index d74b1a5b4123278f3d7aee5ff1af6527e16ac8da..b7eaeaf60bda168a4e9953c3cc56abb71acf82a4 100644
--- a/app/controllers/photos_controller.rb
+++ b/app/controllers/photos_controller.rb
@@ -3,6 +3,7 @@
 #   the COPYRIGHT file.
 
 class PhotosController < ApplicationController
+  helper :comments
   before_filter :authenticate_user!
 
   respond_to :html, :json
diff --git a/app/controllers/sockets_controller.rb b/app/controllers/sockets_controller.rb
index 7ed70b1cb908b95387a09d135be358a30ee7c84a..913ead739686a6541eb19586ead0fedbe356f5aa 100644
--- a/app/controllers/sockets_controller.rb
+++ b/app/controllers/sockets_controller.rb
@@ -3,6 +3,7 @@
 #   the COPYRIGHT file.
 
 class SocketsController < ApplicationController
+  helper :comments
   include ApplicationHelper
   include SocketsHelper
   include Rails.application.routes.url_helpers
diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb
index 1eae9744878fc2628c842d7946fc221bf52b7210..2b0e89ace70fb32405cadb4b81ef4603a580c665 100644
--- a/app/controllers/status_messages_controller.rb
+++ b/app/controllers/status_messages_controller.rb
@@ -3,6 +3,7 @@
 #   the COPYRIGHT file.
 
 class StatusMessagesController < ApplicationController
+  helper :comments
   before_filter :authenticate_user!
 
   respond_to :html
@@ -25,7 +26,7 @@ class StatusMessagesController < ApplicationController
     end
   end
 
-  def bookmarklet 
+  def bookmarklet
     @aspects = current_user.aspects
     @selected_contacts = @aspects.map { |aspect| aspect.contacts }.flatten.uniq
     @aspect_ids = @aspects.map{|x| x.id}
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index d96a05257ce62f7adf410ae249a8988a6f8a32f9..a867e41e95d36a807197264f9c8a64a9828167a9 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -3,6 +3,7 @@
 #   the COPYRIGHT file.
 
 class TagsController < ApplicationController
+  helper :comments
   skip_before_filter :set_invites
   skip_before_filter :which_action_and_user
   skip_before_filter :set_grammatical_gender
@@ -51,7 +52,11 @@ class TagsController < ApplicationController
     end
 
     @posts = @posts.tagged_with(params[:name])
-    @posts = @posts.includes(:comments, :photos).order('created_at DESC').limit(15).offset(15*(params[:page]-1))
+
+    max_time = params[:max_time] ? Time.at(params[:max_time].to_i) : Time.now
+    @posts = @posts.where(StatusMessage.arel_table[:created_at].lt(max_time))
+
+    @posts = @posts.includes(:comments, :photos).order('posts.created_at DESC').limit(15)
 
     @posts = PostsFake.new(@posts)
     @commenting_disabled = true
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 6f04621eae5fcd78924ff742c0ed2a930f49fb3e..569eb2075bb2ef689f2ba5c0f2ea3e34fbfd75e3 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -2,6 +2,7 @@
 #   licensed under the Affero General Public License version 3 or later.  See
 #   the COPYRIGHT file.
 class UsersController < ApplicationController
+  helper :language
   require File.join(Rails.root, 'lib/diaspora/ostatus_builder')
   require File.join(Rails.root, 'lib/diaspora/exporter')
   require File.join(Rails.root, 'lib/collect_user_photos')
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 600022c0949d5185c0771370d180266ffbc32d66..76547b8c38fabd9b5984a63f81d19a40bcf94849 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -5,9 +5,6 @@
 module ApplicationHelper
   @@youtube_title_cache = Hash.new("no-title")
 
-  def next_page
-    params[:page] ? (params[:page].to_i + 1) : 2
-  end
   def timeago(time, options = {})
     options[:class] ||= "timeago"
     content_tag(:abbr, time.to_s, options.merge(:title => time.iso8601)) if time
@@ -82,8 +79,19 @@ module ApplicationHelper
 </li>".html_safe
   end
 
+  def link_for_aspect(aspect, opts={})
+    opts[:params] ||= {}
+    params ||= {}
+    opts[:params] = opts[:params].merge("a_ids[]" => aspect.id, :created_at => params[:created_at])
+    opts[:class] ||= ""
+    opts[:class] << " hard_aspect_link"
+    opts['data-guid'] = aspect.id
+
+    link_to aspect.name, aspects_path( opts[:params] ), opts
+  end
+
   def current_aspect?(aspect)
-    !@aspect.nil? && !@aspect.is_a?(Symbol) && @aspect.id == aspect.id
+    !@aspect.nil? && !@aspect.instance_of?(Symbol) && @aspect.id == aspect.id
   end
 
   def aspect_or_all_path aspect
@@ -161,21 +169,17 @@ module ApplicationHelper
   def markdownify(message, options = {})
     message = h(message).html_safe
 
-    if !options.has_key?(:newlines)
-      options[:newlines] = true
-    end
+    options[:newlines] = true if !options.has_key?(:newlines)
+    options[:emoticons] = true if !options.has_key?(:emoticons)
 
     message = process_links(message)
     message = process_autolinks(message)
     message = process_emphasis(message)
     message = process_youtube(message, options[:youtube_maps])
     message = process_vimeo(message, options[:vimeo_maps])
+    message = process_emoticons(message) if options[:emoticons]
 
-    message.gsub!(/&lt;3/, "&hearts;")
-
-    if options[:newlines]
-      message.gsub!(/\n+/, '<br />')
-    end
+    message.gsub!(/\n+/, '<br />') if options[:newlines]
 
     return message
   end
@@ -208,16 +212,18 @@ module ApplicationHelper
   end
 
   def process_youtube(message, youtube_maps)
-    regex = /( |^)(https?:\/\/)?www\.youtube\.com\/watch[^ ]*v=([A-Za-z0-9_\-]+)(&[^ ]*|)/
+    regex = /( |^)(https?:\/\/)?www\.youtube\.com\/watch[^ ]*v=([A-Za-z0-9_\-]+)(&[^ ]*)?(#[^ ]+)?/
     processed_message = message.gsub(regex) do |matched_string|
       match_data = matched_string.match(regex)
       video_id = match_data[3]
+      anchor = match_data[5]
+      anchor ||= ''
       if youtube_maps && youtube_maps[video_id]
         title = h(CGI::unescape(youtube_maps[video_id]))
       else
         title = I18n.t 'application.helper.video_title.unknown'
       end
-      ' <a class="video-link" data-host="youtube.com" data-video-id="' + video_id + '" href="'+ match_data[0].strip + '" target="_blank">Youtube: ' + title + '</a>'
+      ' <a class="video-link" data-host="youtube.com" data-video-id="' + video_id + '" data-anchor="' + anchor + '" href="'+ match_data[0].strip + '" target="_blank">Youtube: ' + title + '</a>'
     end
     return processed_message
   end
@@ -269,6 +275,27 @@ module ApplicationHelper
     return processed_message
   end
 
+  def process_emoticons(message)
+    map = {
+      "&lt;3" => "&hearts;",
+      ":("    => "&#9785;",
+      ":-("   => "&#9785;",
+      ":)"    => "&#9786;",
+      ":-)"   => "&#9786;",
+      "-&gt;" => "&rarr;",
+      "&lt;-" => "&larr;",
+      "..."   => "&hellip;",
+      "(tm)"  => "&trade;",
+      "(r)"   => "&reg;",
+      "(c)"   => "&copy;"
+    }
+    
+    map.each do |search, replace|
+      message.gsub!(search, replace)
+    end
+    message
+  end
+
   def info_text(text)
     image_tag 'icons/monotone_question.png', :class => 'what_is_this', :title => text
   end
diff --git a/app/helpers/aspects_helper.rb b/app/helpers/aspects_helper.rb
index 01bf1126e2dd702e6f21424bcb3d87f8b7e3e244..e72bee5a16b205e0ec89f59735efedd3f45b5ab8 100644
--- a/app/helpers/aspects_helper.rb
+++ b/app/helpers/aspects_helper.rb
@@ -1,17 +1,10 @@
-#/   Copyright (c) 2010, Diaspora Inc.  This file is
+#   Copyright (c) 2010, Diaspora Inc.  This file is
 #   licensed under the Affero General Public License version 3 or later.  See
 #   the COPYRIGHT file.
 
 module AspectsHelper
-  def link_for_aspect(aspect, opts={})
-    opts[:params] ||= {}
-    params ||= {}
-    opts[:params] = opts[:params].merge("a_ids[]" => aspect.id, :created_at => params[:created_at])
-    opts[:class] ||= ""
-    opts[:class] << " hard_aspect_link"
-    opts['data-guid'] = aspect.id
-
-    link_to aspect.name, aspects_path( opts[:params] ), opts
+  def next_page_path
+    aspects_path(:max_time => @posts.last.send(session[:sort_order].to_sym).to_i, :a_ids => params[:a_ids])
   end
 
   def remove_link(aspect)
diff --git a/app/helpers/stream_helper.rb b/app/helpers/comments_helper.rb
similarity index 97%
rename from app/helpers/stream_helper.rb
rename to app/helpers/comments_helper.rb
index 3fdb1c680468ab7be4ea9ba200a95190ed18870f..0df7ee28f1ccc6ba277b2417d82ee4f6fd46aa9e 100644
--- a/app/helpers/stream_helper.rb
+++ b/app/helpers/comments_helper.rb
@@ -2,7 +2,7 @@
 #   licensed under the Affero General Public License version 3 or later.  See
 #   the COPYRIGHT file.
 
-module StreamHelper
+module CommentsHelper
   GSUB_THIS = "FIUSDHVIUSHDVIUBAIUHAPOIUXJM"
   def comment_toggle(count, commenting_disabled=false)
     if count <= 3
diff --git a/app/helpers/conversations_helper.rb b/app/helpers/conversations_helper.rb
deleted file mode 100644
index e9370a658d2dfd61780692f6de1b1f73d304bd0c..0000000000000000000000000000000000000000
--- a/app/helpers/conversations_helper.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-module ConversationsHelper
-  def new_message_text(count)
-    t('conversations.helper.new_messages', :count => count)
-  end
-end
diff --git a/app/helpers/layout_helper.rb b/app/helpers/layout_helper.rb
index 166e6b25489f101871ff126f72e6a3e6d1522e58..e8707e4122590bb23e57ab71b914720be11bb045 100644
--- a/app/helpers/layout_helper.rb
+++ b/app/helpers/layout_helper.rb
@@ -23,4 +23,12 @@ module LayoutHelper
   def javascript(*args)
     content_for(:head) { javascript_include_tag(*args) }
   end
+
+  def new_notification_text(count)
+      t('notifications.helper.new_notifications', :count => count)
+  end
+
+  def new_message_text(count)
+    t('conversations.helper.new_messages', :count => count)
+  end
 end
diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb
index 4489a5c84f52cec554d9989c626f0dc0a01a6f4a..8afc55b616229dec5048ba8f4d34db9d5371157e 100644
--- a/app/helpers/notifications_helper.rb
+++ b/app/helpers/notifications_helper.rb
@@ -31,9 +31,6 @@ module NotificationsHelper
     t("notifications.#{target_type}", :post_author => post_author)
   end
 
-  def new_notification_text(count)
-      t('notifications.helper.new_notifications', :count => count)
-  end
 
   def new_notification_link(count)
     if count > 0
@@ -56,4 +53,12 @@ module NotificationsHelper
   def peoples_names(note)
     note.actors.map{|p| p.name}.join(", ")
   end
+
+  def the_day(i18n)
+    i18n[0].match(/\d/) ? i18n[0].gsub('.', '') : i18n[1].gsub('.', '')
+  end
+
+  def the_month(i18n)
+    i18n[0].match(/\d/) ? i18n[1] : i18n[0]
+  end
 end
diff --git a/app/helpers/people_helper.rb b/app/helpers/people_helper.rb
index b149abca8675bf0208ff11e62d32d2237599ec71..490200756f629ed98900314e2cb32148b22cbd8f 100644
--- a/app/helpers/people_helper.rb
+++ b/app/helpers/people_helper.rb
@@ -27,4 +27,8 @@ module PeopleHelper
       I18n.l bday, :format => I18n.t('date.formats.birthday_with_year')
     end
   end
+
+  def next_page_path
+    person_path(@person, :max_time => @posts.last.created_at.to_i)
+  end
 end
diff --git a/app/helpers/requests_helper.rb b/app/helpers/requests_helper.rb
deleted file mode 100644
index d54a29de2c5727bd827703386df2caa1d234dc34..0000000000000000000000000000000000000000
--- a/app/helpers/requests_helper.rb
+++ /dev/null
@@ -1,16 +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 RequestsHelper
-
-  def new_request?(request_count)
-    'new_requests' if request_count > 0
-  end
-
-  def new_request_link(request_count)
-    if request_count > 0
-        link_to t('requests.helper.new_requests', :count => @request_count), manage_aspects_path
-    end
-  end
-end
diff --git a/app/helpers/tags_helper.rb b/app/helpers/tags_helper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ee29ec44e01724e8ff0d23441d8cc43eb1f621b5
--- /dev/null
+++ b/app/helpers/tags_helper.rb
@@ -0,0 +1,9 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+module TagsHelper
+  def next_page_path
+    tag_path(@tag, :max_time => @posts.last.created_at.to_i)
+  end
+end
diff --git a/app/models/notification.rb b/app/models/notification.rb
index 4b1c33f186b7f9024aadb427354c1186a6a336d2..8349165b29d1f1400dab9722127cfccc8d2f019d 100644
--- a/app/models/notification.rb
+++ b/app/models/notification.rb
@@ -41,7 +41,8 @@ private
   def self.concatenate_or_create(recipient, target, actor, notification_type)
     if n = notification_type.where(:target_id => target.id,
                               :target_type => target.class.base_class,
-                               :recipient_id => recipient.id).first
+                               :recipient_id => recipient.id,
+                               :unread => true).first
       unless n.actors.include?(actor)
         n.actors << actor
       end
diff --git a/app/models/post.rb b/app/models/post.rb
index c705f45b038b1579af2f1c763da52980cc1b60b1..f6b88c89e4c6db85f6667cc897747c1438789643 100644
--- a/app/models/post.rb
+++ b/app/models/post.rb
@@ -81,7 +81,7 @@ class Post < ActiveRecord::Base
 
     local_post = Post.where(:guid => self.guid).first
     if local_post && local_post.author_id == self.author_id
-      known_post = user.raw_visible_posts.where(:guid => self.guid).first
+      known_post = user.visible_posts.where(:guid => self.guid).first
       if known_post
         if known_post.mutable?
           known_post.update_attributes(self.attributes)
diff --git a/app/models/user.rb b/app/models/user.rb
index 8f6c1f2781e5f3a436b006d9c82cd7e589cf24c4..3ceab0b19f7e29d81ccb2d970be293e5668459db 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -96,7 +96,7 @@ class User < ActiveRecord::Base
     contact = contact_for(person)
 
     add_contact_to_aspect(contact, to_aspect)
-    
+
     membership = contact ? AspectMembership.where(:contact_id => contact.id, :aspect_id => from_aspect.id).first : nil
     return(membership && membership.destroy)
   end
@@ -344,5 +344,4 @@ class User < ActiveRecord::Base
       mentioned_person.delete
     end
   end
-
 end
diff --git a/app/views/aspects/_aspect_stream.haml b/app/views/aspects/_aspect_stream.haml
index 78f540716cdc3f5016108a94ebbf02b409fe5d48..d49a64342f7b4f36acce8307ba6503c9fc0a3502 100644
--- a/app/views/aspects/_aspect_stream.haml
+++ b/app/views/aspects/_aspect_stream.haml
@@ -13,6 +13,6 @@
   - if posts.length > 0
     = render 'shared/stream', :posts => posts
     #pagination
-      =link_to(t('more'), aspects_path(:page => next_page, :a_ids => params[:a_ids]), :class => 'paginate')
+      =link_to(t('more'), next_page_path, :class => 'paginate')
   - else
     = render 'aspects/no_posts_message', :post_count => posts.length
diff --git a/app/views/aspects/index.mobile.haml b/app/views/aspects/index.mobile.haml
index a6e78e163dbf2caaff5cb083823cd0d0c4474742..8def29594bc17888126e6991ebd4929491aa7d58 100644
--- a/app/views/aspects/index.mobile.haml
+++ b/app/views/aspects/index.mobile.haml
@@ -12,8 +12,9 @@
   = link_to t('.post_a_message'), '#publisher_page', :id => 'publisher_button'
 #main_stream.stream
   = render 'shared/stream', :posts => @posts
-  #pagination
-    %a.more-link.paginate{:href => aspects_path(:a_ids => params[:a_ids], :page => params[:page] + 1)}
-      %h2= t("more")
+  -if @posts.length > 0
+    #pagination
+      %a.more-link.paginate{:href => next_page_path}
+        %h2= t("more")
 - content_for :subpages do
   = render 'shared/publisher', :aspect_ids => @aspect_ids
diff --git a/app/views/conversations/new.haml b/app/views/conversations/new.haml
index 40301b10ea171bef32b535d86d134e3aadd4fe09..b7877372b9c80fd47c4bfc7457ecd919b0bfc876 100644
--- a/app/views/conversations/new.haml
+++ b/app/views/conversations/new.haml
@@ -4,7 +4,7 @@
 
 :javascript
   $(document).ready(function () {
-    var data = $.parseJSON( '#{@all_contacts_and_ids.to_json.gsub("'", "\\\\'")}' ),
+    var data = $.parseJSON( "#{@contacts_json}" ),
         autocompleteInput = $("#contact_autocomplete");
 
     autocompleteInput.autoSuggest(data, {
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index d94d4582a4874203b080296fa097fae1e03a9efa..0e22c2623886764a541eea746f11feeaaf13339f 100644
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -79,7 +79,7 @@
 
   %body{:class => "#{yield(:body_class)}"}
     - unless @landing_page
-      #notification
+      #notifications
 
       - flash.each do |name, msg|
         = content_tag :div, msg, :id => "flash_#{name}"
diff --git a/app/views/notifications/_popup.haml b/app/views/notifications/_popup.haml
index 0dbc75d4c6e87d285e2924d3f0b96adde7b846f9..9bb8f36bbf9456ffd3660487237164e986d6d2d1 100644
--- a/app/views/notifications/_popup.haml
+++ b/app/views/notifications/_popup.haml
@@ -1,7 +1,7 @@
 -#   Copyright (c) 2010, Diaspora Inc.  This file is
 -#   licensed under the Affero General Public License version 3 or later.  See
 -#   the COPYRIGHT file.
-
-= person_image_tag(person)
-= link_to "#{person.name.titleize}", person_path(person.id)
-= object_link(note)
+.notification
+  = person_image_tag(person)
+  = link_to "#{person.name.titleize}", person_path(person.id)
+  = object_link(note)
diff --git a/app/views/notifications/index.html.haml b/app/views/notifications/index.html.haml
index 5f056c30f565e02c87c081181aea25edbf921379..9c4b1828d2f31dcc782361c48227af9f808e9d2d 100644
--- a/app/views/notifications/index.html.haml
+++ b/app/views/notifications/index.html.haml
@@ -1,52 +1,28 @@
-:javascript
-  $('.stream_element').live('mousedown', function(evt){
-    var note = $(this).closest('.stream_element'),
-        note_id = note.attr('data-guid'),
-        nBadge = $("#notification_badge_number");
-
-    if(note.hasClass('unread') ){
-      note.removeClass('unread');
-      $.ajax({
-        url: 'notifications/' + note_id,
-        type: 'PUT'
-      });
-    }
-      if(nBadge.html() != null) {
-      nBadge.html().replace(/\d+/, function(num){
-        num = parseInt(num);
-        nBadge.html(parseInt(num)-1);
-        if(num == 1) {
-          nBadge.addClass("hidden");
-        }
-    });
-
-    }
-  });
-
-  $('a.more').live('click', function(){
-    $(this).hide();
-    $(this).next('span').removeClass('hidden');
-  });
-
-.span-1
-  = image_tag 'icons/mail_big.png', :height => 30, :width => 30, :style=>"margin-top:3px;"
-.span-10
+.span-13
   %h2
+    %span.notification_count{:class => ('unread' if @notification_count > 0)}
+      = @notification_count
     = t('.notifications')
-.span-13.last.left
+.span-8.last.left
   = link_to t('.mark_all_as_read'), read_all_notifications_path, :class => 'button'
 
 .span-24.last
-  %ul.stream.notifications
+  .stream.notifications
     - @group_days.each do |day, notes|
-      %li
-        %h4= day
-        %ul.notifications_for_day
+      .day_group.span-24.last
+        .span-3
+          .date
+            .day= the_day(day.split(' '))
+            .month= the_month(day.split(' '))
+
+        .span-8.notifications_for_day
           - notes.each do |note|
             .stream_element{:data=>{:guid => note.id}, :class => "#{note.unread ? 'unread' : ''}"}
               %span.from
                 = notification_people_link(note)
                 = object_link(note)
 
-              .time= timeago(note.created_at)
+              %br
+              %time= timeago(note.created_at)
+        .span-13.last
     = will_paginate @notifications
diff --git a/app/views/people/_person.html.haml b/app/views/people/_person.html.haml
index 2dc6038f363136c6bb20a6ca8b6b0acd1d4b6204..362c019350e2c39706b953652cfc2e4027feafee 100644
--- a/app/views/people/_person.html.haml
+++ b/app/views/people/_person.html.haml
@@ -5,7 +5,8 @@
 .stream_element{:id => person.id}
   .right
     = render :partial => 'people/relationship_action',
-             :locals => { :person => person, :contact => contact, :request => request}
+             :locals => { :person => person, :contact => contact,
+                          :request => request, :current_user => current_user }
 
   = person_image_link(person)
 
diff --git a/app/views/people/contacts.haml b/app/views/people/contacts.haml
new file mode 100644
index 0000000000000000000000000000000000000000..eb0b26700b06280711279b87d5bbdf8e11d81a6b
--- /dev/null
+++ b/app/views/people/contacts.haml
@@ -0,0 +1,60 @@
+-#   Copyright (c) 2010, Diaspora Inc.  This file is
+-#   licensed under the Affero General Public License version 3 or later.  See
+-#   the COPYRIGHT file.
+
+
+- content_for :head do
+  = include_javascripts :people
+
+- content_for :page_title do
+  = @person.name
+
+.span-8.append-1.last
+  = render :partial => 'people/profile_sidebar', :locals => {:person => @person, :contact => @contact }
+
+.span-15.last
+  #author_info
+    - if user_signed_in? && !(@contact.persisted? || current_user.person == @person)
+      .right
+        - if @incoming_request
+          = link_to t('people.show.incoming_request', :name => truncate(@person.name, :length => 20, :separator => ' ', :omission => '')),
+            {:controller => "contacts",
+            :action => "new",
+            :person_id => @person.id},
+            :class => 'share_with button',
+            :rel => 'facebox'
+        -else
+          = link_to t('people.show.start_sharing'),
+            {:controller => "contacts",
+            :action => "new",
+            :person_id => @person.id},
+            :class => 'share_with button',
+            :rel => 'facebox'
+        - if @share_with
+          = javascript_tag "$(document).ready(function() {jQuery.facebox({ ajax: '#{new_contact_path(:person_id => @person.id)}' });});"
+
+
+    - else
+      - if user_signed_in? && @contact.person && @contact.receiving?
+        .right
+          = link_to t('.mention'), new_status_message_path(:person_id => @person.id), :class => 'button', :rel => 'facebox'
+          - if @contact.mutual?
+            = link_to t('.message'), new_conversation_path(:contact_id => @contact.id, :name => @contact.person.name, :contact_id => @contact.id), :class => 'button', :rel => 'facebox'
+
+    %h3
+      = @person.name
+      %span.diaspora_handle
+        = @person.diaspora_handle
+      .description
+        - if !@person.profile.tag_string.blank?
+          = @person.profile.format_tags(@person.profile.tag_string)
+          - if user_signed_in? && @person == current_user.person
+            %span.hover_edit
+              = link_to t('people.show.edit'), edit_profile_path
+
+  %hr
+
+  #people_stream.stream
+    - for hash in @hashes
+      = render :partial => 'people/person', :locals => hash
+  = will_paginate @contacts_of_contact
diff --git a/app/views/people/index.html.haml b/app/views/people/index.html.haml
index 4843cdc614b061353c20995055b9ebfe6615d07b..63153be6e6963e7c5d5cd32830e2ead9ae5750f0 100644
--- a/app/views/people/index.html.haml
+++ b/app/views/people/index.html.haml
@@ -7,6 +7,7 @@
 
 - content_for :head do
   = include_javascripts :people
+  = javascript_include_tag 'contact-list'
 
 .span-24.last
   - if params[:q].blank?
diff --git a/app/views/people/show.html.haml b/app/views/people/show.html.haml
index 8b310f8c129ccfba82da73d7df4b3a8517de963c..54ea641f2a11c59f6b26411a1a222339bc1fd9ad 100644
--- a/app/views/people/show.html.haml
+++ b/app/views/people/show.html.haml
@@ -13,14 +13,15 @@
   = render :partial => 'people/profile_sidebar', :locals => {:person => @person, :contact => @contact }
 
   - if user_signed_in? && @contact.persisted? && @contacts_of_contact.count > 0
-    .span-8.last
+    .span-8.last#contacts_of_contact
       %hr{:style=>"width:300px;"}
       .section.contact_pictures
         %h4
-          = @contacts_of_contact.length
-          = t('.similar_contacts')
+          = t('contacts', :count => @contacts_of_contact_count)
         - for person in @contacts_of_contact
           = person_image_link person
+      - if @contacts_of_contact.count > 25
+        %p.see_all= link_to t('.see_all'), person_contacts_path(@person)
 
 .span-15.last
   #author_info
@@ -73,7 +74,7 @@
       #main_stream.stream
         = render 'shared/stream', :posts => @posts, :commenting_disabled => @commenting_disabled
         #pagination
-          =link_to(t('more'), person_path(@person, :page => next_page), :class => 'paginate')
+          =link_to(t('more'), next_page_path, :class => 'paginate')
 
   - else
     #stream
diff --git a/app/views/people/show.mobile.haml b/app/views/people/show.mobile.haml
index 08ce19c1b7e673903af2a58ee4f206f39cdcbcf4..8bc11c86c4c8f8a42f6cee8a6aee7ad2dfc105e4 100644
--- a/app/views/people/show.mobile.haml
+++ b/app/views/people/show.mobile.haml
@@ -31,7 +31,7 @@
     #main_stream.stream
       = render 'shared/stream', :posts => @posts
       #pagination
-        =link_to(t('more'), person_path(@person, :page => next_page), :class => 'paginate')
+        =link_to(t('more'), next_page_path, :class => 'paginate')
 - else
   #stream
     %li{:style=>"text-align:center;"}
diff --git a/app/views/photos/show.mobile.haml b/app/views/photos/show.mobile.haml
old mode 100644
new mode 100755
index c373911c9a869081ace6c7a8b4cf866f4bd4be78..4aebfea691dfccabf81998a9e61757d430df6e9d
--- a/app/views/photos/show.mobile.haml
+++ b/app/views/photos/show.mobile.haml
@@ -6,3 +6,12 @@
 #show_content.photo
   = image_tag @photo.url(:scaled_full)
 
+  -if @additional_photos && @additional_photos.length > 1
+    #photo_controls
+    %table
+      %tr
+        %td
+          =link_to "←", @prev_photo, :rel => 'prefetch', :class => 'arrow'
+        %td{:width => '100%'}
+        %td
+          =link_to "→", @next_photo, :rel => 'prefetch', :class => 'arrow'
diff --git a/app/views/shared/_stream_element.html.haml b/app/views/shared/_stream_element.html.haml
index 614e6647224d3a8337079dcd226d6352a6cf6180..44ce12d3adc425492240d7489b156ecf783915cc 100644
--- a/app/views/shared/_stream_element.html.haml
+++ b/app/views/shared/_stream_element.html.haml
@@ -21,7 +21,7 @@
     .content
       .from
         = person_link(post.author, :class => 'author')
-        %time.timeago{:datetime => post.created_at}
+        %time.time.timeago{:datetime => post.created_at, :integer => post.created_at.to_i}
       = render 'status_messages/status_message', :post => post, :photos => post.photos
 
       .info
diff --git a/app/views/shared/_stream_element.mobile.haml b/app/views/shared/_stream_element.mobile.haml
index 1b00a09a70bf8739a0f9a83f85be3cb69fc67982..82a34279042bfa4930200df65fdbd9344bb9ede5 100644
--- a/app/views/shared/_stream_element.mobile.haml
+++ b/app/views/shared/_stream_element.mobile.haml
@@ -12,6 +12,6 @@
     = render 'status_messages/status_message', :post => post, :photos => post.photos
 
     .info
-      %span.time
+      %span.time{:integer => post.created_at.to_i}
         = t('ago', :time => time_ago_in_words(post.created_at))
       = link_to "#{t('comments', :count => post.comments.length)} →", status_message_path(post), :class => 'comment_link right'
diff --git a/app/views/status_messages/show.html.haml b/app/views/status_messages/show.html.haml
index 34cbfe9e00d43b8c5a1627c8aef2aa82cdaba453..83cada8575fd74f49370ce7c575e14e977bdbd46 100644
--- a/app/views/status_messages/show.html.haml
+++ b/app/views/status_messages/show.html.haml
@@ -12,7 +12,7 @@
       = markdownify(@status_message.text, :youtube_maps => @status_message[:youtube_titles])
 
     - for photo in @status_message.photos
-      .thumb_small= link_to (image_tag photo.url(:thumb_small)), photo_path(photo)
+      = link_to (image_tag photo.url(:thumb_small), :class => 'thumb_small'), photo_path(photo)
 
   %p.time
     = how_long_ago(@status_message)
diff --git a/app/views/tags/show.haml b/app/views/tags/show.haml
index 4b16d4476a32fd692c820602b2c3634a8108e81c..fd6777f23a434dab5cf6498aa913ff86ffb3ca39 100644
--- a/app/views/tags/show.haml
+++ b/app/views/tags/show.haml
@@ -23,7 +23,7 @@
     - if @posts.length > 0
       = render 'shared/stream', :posts => @posts
       #pagination
-        =link_to(t('more'), tag_path(params[:name], :page => next_page), :class => 'paginate')
+        =link_to(t('more'), next_page_path, :class => 'paginate')
     - else
       = t('.nobody_talking', :tag => "##{params[:name]}")
 
diff --git a/chef/cookbooks/debian/bootstrap.json b/chef/cookbooks/debian/bootstrap.json
new file mode 100644
index 0000000000000000000000000000000000000000..aba0834616de041ae0369004e0690eff4e145ff9
--- /dev/null
+++ b/chef/cookbooks/debian/bootstrap.json
@@ -0,0 +1 @@
+{"recipes": ["debian::bootstrap" ] } 
diff --git a/chef/cookbooks/debian/files/default/redis.conf b/chef/cookbooks/debian/files/default/redis.conf
new file mode 100644
index 0000000000000000000000000000000000000000..3f26920917c54320a0dd1f5e43e8bfeff9cf8a17
--- /dev/null
+++ b/chef/cookbooks/debian/files/default/redis.conf
@@ -0,0 +1,312 @@
+# Redis configuration file example
+
+# Note on units: when memory size is needed, it is possible to specifiy
+# it in the usual form of 1k 5GB 4M and so forth:
+#
+# 1k => 1000 bytes
+# 1kb => 1024 bytes
+# 1m => 1000000 bytes
+# 1mb => 1024*1024 bytes
+# 1g => 1000000000 bytes
+# 1gb => 1024*1024*1024 bytes
+#
+# units are case insensitive so 1GB 1Gb 1gB are all the same.
+
+# By default Redis does not run as a daemon. Use 'yes' if you need it.
+# Note that Redis will write a pid file in /usr/local/var/run/redis.pid when daemonized.
+daemonize no
+
+# When running daemonized, Redis writes a pid file in /usr/local/var/run/redis.pid by
+# default. You can specify a custom pid file location here.
+pidfile /usr/local/var/run/redis.pid
+
+# Accept connections on the specified port, default is 6379
+port 6379
+
+# If you want you can bind a single interface, if the bind option is not
+# specified all the interfaces will listen for incoming connections.
+#
+# bind 127.0.0.1
+
+# Close the connection after a client is idle for N seconds (0 to disable)
+timeout 300
+
+# Set server verbosity to 'debug'
+# it can be one of:
+# debug (a lot of information, useful for development/testing)
+# verbose (many rarely useful info, but not a mess like the debug level)
+# notice (moderately verbose, what you want in production probably)
+# warning (only very important / critical messages are logged)
+loglevel verbose
+
+# Specify the log file name. Also 'stdout' can be used to force
+# Redis to log on the standard output. Note that if you use standard
+# output for logging but daemonize, logs will be sent to /dev/null
+logfile stdout
+
+# Set the number of databases. The default database is DB 0, you can select
+# a different one on a per-connection basis using SELECT <dbid> where
+# dbid is a number between 0 and 'databases'-1
+databases 16
+
+################################ SNAPSHOTTING  #################################
+#
+# Save the DB on disk:
+#
+#   save <seconds> <changes>
+#
+#   Will save the DB if both the given number of seconds and the given
+#   number of write operations against the DB occurred.
+#
+#   In the example below the behaviour will be to save:
+#   after 900 sec (15 min) if at least 1 key changed
+#   after 300 sec (5 min) if at least 10 keys changed
+#   after 60 sec if at least 10000 keys changed
+#
+#   Note: you can disable saving at all commenting all the "save" lines.
+
+save 900 1
+save 300 10
+save 60 10000
+
+# Compress string objects using LZF when dump .rdb databases?
+# For default that's set to 'yes' as it's almost always a win.
+# If you want to save some CPU in the saving child set it to 'no' but
+# the dataset will likely be bigger if you have compressible values or keys.
+rdbcompression yes
+
+# The filename where to dump the DB
+dbfilename dump.rdb
+
+# The working directory.
+#
+# The DB will be written inside this directory, with the filename specified
+# above using the 'dbfilename' configuration directive.
+# 
+# Also the Append Only File will be created inside this directory.
+# 
+# Note that you must specify a directory here, not a file name.
+dir /usr/local/var/db/redis/
+
+################################# REPLICATION #################################
+
+# Master-Slave replication. Use slaveof to make a Redis instance a copy of
+# another Redis server. Note that the configuration is local to the slave
+# so for example it is possible to configure the slave to save the DB with a
+# different interval, or to listen to another port, and so on.
+#
+# slaveof <masterip> <masterport>
+
+# If the master is password protected (using the "requirepass" configuration
+# directive below) it is possible to tell the slave to authenticate before
+# starting the replication synchronization process, otherwise the master will
+# refuse the slave request.
+#
+# masterauth <master-password>
+
+################################## SECURITY ###################################
+
+# Require clients to issue AUTH <PASSWORD> before processing any other
+# commands.  This might be useful in environments in which you do not trust
+# others with access to the host running redis-server.
+#
+# This should stay commented out for backward compatibility and because most
+# people do not need auth (e.g. they run their own servers).
+# 
+# Warning: since Redis is pretty fast an outside user can try up to
+# 150k passwords per second against a good box. This means that you should
+# use a very strong password otherwise it will be very easy to break.
+#
+# requirepass foobared
+
+################################### LIMITS ####################################
+
+# Set the max number of connected clients at the same time. By default there
+# is no limit, and it's up to the number of file descriptors the Redis process
+# is able to open. The special value '0' means no limits.
+# Once the limit is reached Redis will close all the new connections sending
+# an error 'max number of clients reached'.
+#
+# maxclients 128
+
+# Don't use more memory than the specified amount of bytes.
+# When the memory limit is reached Redis will try to remove keys with an
+# EXPIRE set. It will try to start freeing keys that are going to expire
+# in little time and preserve keys with a longer time to live.
+# Redis will also try to remove objects from free lists if possible.
+#
+# If all this fails, Redis will start to reply with errors to commands
+# that will use more memory, like SET, LPUSH, and so on, and will continue
+# to reply to most read-only commands like GET.
+#
+# WARNING: maxmemory can be a good idea mainly if you want to use Redis as a
+# 'state' server or cache, not as a real DB. When Redis is used as a real
+# database the memory usage will grow over the weeks, it will be obvious if
+# it is going to use too much memory in the long run, and you'll have the time
+# to upgrade. With maxmemory after the limit is reached you'll start to get
+# errors for write operations, and this may even lead to DB inconsistency.
+#
+# maxmemory <bytes>
+
+############################## APPEND ONLY MODE ###############################
+
+# By default Redis asynchronously dumps the dataset on disk. If you can live
+# with the idea that the latest records will be lost if something like a crash
+# happens this is the preferred way to run Redis. If instead you care a lot
+# about your data and don't want to that a single record can get lost you should
+# enable the append only mode: when this mode is enabled Redis will append
+# every write operation received in the file appendonly.aof. This file will
+# be read on startup in order to rebuild the full dataset in memory.
+#
+# Note that you can have both the async dumps and the append only file if you
+# like (you have to comment the "save" statements above to disable the dumps).
+# Still if append only mode is enabled Redis will load the data from the
+# log file at startup ignoring the dump.rdb file.
+#
+# IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append
+# log file in background when it gets too big.
+
+appendonly no
+
+# The name of the append only file (default: "appendonly.aof")
+# appendfilename appendonly.aof
+
+# The fsync() call tells the Operating System to actually write data on disk
+# instead to wait for more data in the output buffer. Some OS will really flush 
+# data on disk, some other OS will just try to do it ASAP.
+#
+# Redis supports three different modes:
+#
+# no: don't fsync, just let the OS flush the data when it wants. Faster.
+# always: fsync after every write to the append only log . Slow, Safest.
+# everysec: fsync only if one second passed since the last fsync. Compromise.
+#
+# The default is "everysec" that's usually the right compromise between
+# speed and data safety. It's up to you to understand if you can relax this to
+# "no" that will will let the operating system flush the output buffer when
+# it wants, for better performances (but if you can live with the idea of
+# some data loss consider the default persistence mode that's snapshotting),
+# or on the contrary, use "always" that's very slow but a bit safer than
+# everysec.
+#
+# If unsure, use "everysec".
+
+# appendfsync always
+appendfsync everysec
+# appendfsync no
+
+################################ VIRTUAL MEMORY ###############################
+
+# Virtual Memory allows Redis to work with datasets bigger than the actual
+# amount of RAM needed to hold the whole dataset in memory.
+# In order to do so very used keys are taken in memory while the other keys
+# are swapped into a swap file, similarly to what operating systems do
+# with memory pages.
+#
+# To enable VM just set 'vm-enabled' to yes, and set the following three
+# VM parameters accordingly to your needs.
+
+vm-enabled no
+# vm-enabled yes
+
+# This is the path of the Redis swap file. As you can guess, swap files
+# can't be shared by different Redis instances, so make sure to use a swap
+# file for every redis process you are running. Redis will complain if the
+# swap file is already in use.
+#
+# The best kind of storage for the Redis swap file (that's accessed at random) 
+# is a Solid State Disk (SSD).
+#
+# *** WARNING *** if you are using a shared hosting the default of putting
+# the swap file under /tmp is not secure. Create a dir with access granted
+# only to Redis user and configure Redis to create the swap file there.
+vm-swap-file /tmp/redis.swap
+
+# vm-max-memory configures the VM to use at max the specified amount of
+# RAM. Everything that deos not fit will be swapped on disk *if* possible, that
+# is, if there is still enough contiguous space in the swap file.
+#
+# With vm-max-memory 0 the system will swap everything it can. Not a good
+# default, just specify the max amount of RAM you can in bytes, but it's
+# better to leave some margin. For instance specify an amount of RAM
+# that's more or less between 60 and 80% of your free RAM.
+vm-max-memory 0
+
+# Redis swap files is split into pages. An object can be saved using multiple
+# contiguous pages, but pages can't be shared between different objects.
+# So if your page is too big, small objects swapped out on disk will waste
+# a lot of space. If you page is too small, there is less space in the swap
+# file (assuming you configured the same number of total swap file pages).
+#
+# If you use a lot of small objects, use a page size of 64 or 32 bytes.
+# If you use a lot of big objects, use a bigger page size.
+# If unsure, use the default :)
+vm-page-size 32
+
+# Number of total memory pages in the swap file.
+# Given that the page table (a bitmap of free/used pages) is taken in memory,
+# every 8 pages on disk will consume 1 byte of RAM.
+#
+# The total swap size is vm-page-size * vm-pages
+#
+# With the default of 32-bytes memory pages and 134217728 pages Redis will
+# use a 4 GB swap file, that will use 16 MB of RAM for the page table.
+#
+# It's better to use the smallest acceptable value for your application,
+# but the default is large in order to work in most conditions.
+vm-pages 134217728
+
+# Max number of VM I/O threads running at the same time.
+# This threads are used to read/write data from/to swap file, since they
+# also encode and decode objects from disk to memory or the reverse, a bigger
+# number of threads can help with big objects even if they can't help with
+# I/O itself as the physical device may not be able to couple with many
+# reads/writes operations at the same time.
+#
+# The special value of 0 turn off threaded I/O and enables the blocking
+# Virtual Memory implementation.
+vm-max-threads 4
+
+############################### ADVANCED CONFIG ###############################
+
+# Glue small output buffers together in order to send small replies in a
+# single TCP packet. Uses a bit more CPU but most of the times it is a win
+# in terms of number of queries per second. Use 'yes' if unsure.
+glueoutputbuf yes
+
+# Hashes are encoded in a special way (much more memory efficient) when they
+# have at max a given numer of elements, and the biggest element does not
+# exceed a given threshold. You can configure this limits with the following
+# configuration directives.
+hash-max-zipmap-entries 64
+hash-max-zipmap-value 512
+
+# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in
+# order to help rehashing the main Redis hash table (the one mapping top-level
+# keys to values). The hash table implementation redis uses (see dict.c)
+# performs a lazy rehashing: the more operation you run into an hash table
+# that is rhashing, the more rehashing "steps" are performed, so if the
+# server is idle the rehashing is never complete and some more memory is used
+# by the hash table.
+# 
+# The default is to use this millisecond 10 times every second in order to
+# active rehashing the main dictionaries, freeing memory when possible.
+#
+# If unsure:
+# use "activerehashing no" if you have hard latency requirements and it is
+# not a good thing in your environment that Redis can reply form time to time
+# to queries with 2 milliseconds delay.
+#
+# use "activerehashing yes" if you don't have such hard requirements but
+# want to free memory asap when possible.
+activerehashing yes
+
+################################## INCLUDES ###################################
+
+# Include one or more other config files here.  This is useful if you
+# have a standard template that goes to all redis server but also need
+# to customize a few per-server settings.  Include files can include
+# other files, so use this wisely.
+#
+# include /path/to/local.conf
+# include /path/to/other.conf
diff --git a/chef/cookbooks/debian/main.json b/chef/cookbooks/debian/main.json
new file mode 100644
index 0000000000000000000000000000000000000000..7afec5fd065cdc43672802a09aa3c0429bfb1fcd
--- /dev/null
+++ b/chef/cookbooks/debian/main.json
@@ -0,0 +1 @@
+{"recipes": ["debian::main" ] } 
diff --git a/chef/cookbooks/debian/recipes/bootstrap.rb b/chef/cookbooks/debian/recipes/bootstrap.rb
new file mode 100644
index 0000000000000000000000000000000000000000..416ee1eedfa60bf3a85250db2267116d0cb717d2
--- /dev/null
+++ b/chef/cookbooks/debian/recipes/bootstrap.rb
@@ -0,0 +1,49 @@
+execute "bundler deps" do
+  command "apt-get install -y cpio"
+end
+execute "nokogiri deps" do
+  command "apt-get install -y libxml2-dev libxslt-dev"
+end
+
+execute "eventmachine deps" do
+  command "apt-get install -y gcc-c++"
+end
+
+execute "ssl lib" do
+  command "apt-get install -y libssl-dev libopenssl-ruby"
+end
+
+execute "curl" do
+  command "apt-get install -y libcurl4-openssl-dev"
+end
+
+execute "ffi" do
+  command "apt-get install -y libffi-ruby"
+end
+
+
+execute "htop" do
+  command "apt-get install -y htop psmisc screen"
+end
+
+execute "rvm deps" do
+  command "apt-get install -y bzip2"
+end
+
+def harden_ruby(ruby_string)
+  Dir.glob("/usr/local/rvm/wrappers/#{ruby_string}/*").each do |file|
+    link "/usr/local/bin/#{file.split('/').last}" do
+      to file
+    end
+  end
+  Dir.glob("/usr/local/rvm/gems/#{ruby_string}/bin/*").each do |file|
+    link "/usr/local/bin/#{file.split('/').last}" do
+      to file
+    end
+  end
+
+end
+
+harden_ruby("ree-1.8.7-2010.02")
+
+include_recipe "debian::post_bootstrap"
diff --git a/chef/cookbooks/debian/recipes/image_magick.rb b/chef/cookbooks/debian/recipes/image_magick.rb
new file mode 100644
index 0000000000000000000000000000000000000000..eed14458eb63e147602cea0caadb7e86d4dbf357
--- /dev/null
+++ b/chef/cookbooks/debian/recipes/image_magick.rb
@@ -0,0 +1,3 @@
+execute "install ImageMagick" do
+  command "apt-get install -y imagemagick libmagick9-dev"
+end
diff --git a/chef/cookbooks/debian/recipes/java.rb b/chef/cookbooks/debian/recipes/java.rb
new file mode 100644
index 0000000000000000000000000000000000000000..72ee1176eb71375907b8e9b999ee1ad5dafa9f5e
--- /dev/null
+++ b/chef/cookbooks/debian/recipes/java.rb
@@ -0,0 +1,3 @@
+execute "JAVA!! for Jammit" do
+  command "apt-get install -y java"
+end
diff --git a/chef/cookbooks/debian/recipes/main.rb b/chef/cookbooks/debian/recipes/main.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5d284929cca538673964c1b9de48083878abf01d
--- /dev/null
+++ b/chef/cookbooks/debian/recipes/main.rb
@@ -0,0 +1,5 @@
+include_recipe "debian::image_magick"
+include_recipe "debian::mysql"
+include_recipe "common::main"
+include_recipe "debian::nginx"
+include_recipe "debian::redis"
diff --git a/chef/cookbooks/debian/recipes/mysql.rb b/chef/cookbooks/debian/recipes/mysql.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d300d75d3e8211076f62189b528abe606483f2b0
--- /dev/null
+++ b/chef/cookbooks/debian/recipes/mysql.rb
@@ -0,0 +1,3 @@
+execute "install mysql" do
+  command "apt-get install -y mysql-server libmysqlclient-dev libmysql-ruby"
+end
diff --git a/chef/cookbooks/debian/recipes/nginx.rb b/chef/cookbooks/debian/recipes/nginx.rb
new file mode 100644
index 0000000000000000000000000000000000000000..c778792d200b219e58975273cf73a3259ba4ee2e
--- /dev/null
+++ b/chef/cookbooks/debian/recipes/nginx.rb
@@ -0,0 +1,4 @@
+execute "pcre dependency" do
+  command "apt-get install -y libpcre3 libpcre3-dev"
+end
+include_recipe "common::nginx"
diff --git a/chef/cookbooks/debian/recipes/post_bootstrap.rb b/chef/cookbooks/debian/recipes/post_bootstrap.rb
new file mode 100644
index 0000000000000000000000000000000000000000..277cd3ee829e16d7de41ab78c95acd0867021433
--- /dev/null
+++ b/chef/cookbooks/debian/recipes/post_bootstrap.rb
@@ -0,0 +1 @@
+include_recipe "debian::java"
diff --git a/chef/cookbooks/debian/recipes/redis.rb b/chef/cookbooks/debian/recipes/redis.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ccc34cee27f02e63000da88c8f409f0c2936981c
--- /dev/null
+++ b/chef/cookbooks/debian/recipes/redis.rb
@@ -0,0 +1,19 @@
+execute "download redis" do
+  command "wget http://ftp.us.debian.org/debian/pool/main/r/redis/redis-server_2.2.2-1_amd64.deb"
+end
+
+execute "install redis" do
+  command "dpkg -i redis-server_2.2.2-1_amd64.deb"
+end
+
+cookbook_file "/usr/local/etc/redis.conf" do
+  source "redis.conf"
+end
+
+execute "change redis.conf permissions" do
+  command "chmod 755 /usr/local/etc/redis.conf"
+end
+
+execute "make the redis db directory" do
+  command "mkdir -p /usr/local/var/db/redis"
+end
diff --git a/config/app_config.yml.example b/config/app_config.yml.example
index 58dc0bbadd571da1efc8f7d4d119149b3321b4db..c22764da944c8860128f6d6b160ee99104fbe4eb 100644
--- a/config/app_config.yml.example
+++ b/config/app_config.yml.example
@@ -31,8 +31,8 @@ default:
   # Secure websocket confguration (wss://)
   # requires SSL cert and key
   socket_secure: false
-  socket_private_key_location: '/full/path/to/file.key'
   socket_cert_chain_location: '/full/path/to/cert_chain.crt'
+  socket_private_key_location: '/full/path/to/file.key'
 
   # Diaspora is only tested against this default pubsub server.
   pubsub_server: 'https://pubsubhubbub.appspot.com/'
diff --git a/config/assets.yml b/config/assets.yml
index d80f78ec222ecbe74af4ab1ceaee8f760ba16c6e..075ac4f283bdfddfd43b7d23ac7f4b0c48f03582 100644
--- a/config/assets.yml
+++ b/config/assets.yml
@@ -22,18 +22,19 @@ javascripts:
     - public/javascripts/vendor/charCount.js
     - public/javascripts/jquery.autocomplete-custom.js
     - public/javascripts/jquery.infieldlabel-custom.js
-    - public/javascripts/fileuploader-custom.js
     - public/javascripts/keycodes.js
+    - public/javascripts/fileuploader-custom.js
     - public/javascripts/diaspora.js
     - public/javascripts/widgets/i18n.js
     - public/javascripts/widgets/alert.js
     - public/javascripts/widgets/embedder.js
     - public/javascripts/widgets/timeago.js
+    - public/javascripts/widgets/infinite-scroll.js
     - public/javascripts/widgets/directionDetector.js
+    - public/javascripts/widgets/notifications.js
     - public/javascripts/view.js
     - public/javascripts/stream.js
     - public/javascripts/search.js
-    - public/javascripts/infinite-scroll.js
   mobile:
     - public/javascripts/vendor/jquery152.min.js
     - public/javascripts/custom-mobile-scripting.js
@@ -41,7 +42,7 @@ javascripts:
     - public/javascripts/vendor/jquery.infinitescroll.min.js
     - public/javascripts/diaspora.js
     - public/javascripts/widgets/i18n.js
-    - public/javascripts/infinite-scroll.js
+    - public/javascripts/widgets/infinite-scroll.js
     - public/javascripts/rails.js
   mailchimp:
     - public/javascripts/vendor/mailchimp/jquery.form.js
diff --git a/config/database.yml.example b/config/database.yml.example
index b9b36387f7713a568349e024e7a86a7664603cd3..3ac1843487eac8ea6ab77fb17c3201d5ab778d42 100644
--- a/config/database.yml.example
+++ b/config/database.yml.example
@@ -1,21 +1,22 @@
-test:
+common: &common
   adapter: mysql2
-  database: diaspora_test
-  username: root
-  password: password
+  host: "localhost" 
+  port: 3306
+#  socket: /tmp/mysql.sock
+  username: "root"
+  password: "password"
   charset: utf8
   collation: utf8_bin
+
+
 development:
-  adapter: mysql2
+  <<: *common
   database: diaspora_development
-  username: root
-  password: password
-  charset: utf8
-  collation: utf8_bin
+
 production:
-  adapter: mysql2
+  <<: *common
   database: diaspora_production
-  username: root
-  password: password
-  charset: utf8
-  collation: utf8_bin
+
+test:
+  <<: *common
+  database: "diaspora_test"
diff --git a/config/locale_settings.yml b/config/locale_settings.yml
index 60fe3c7b902f25f34a32de1e3e5db237efe92a00..636fe6e831f6f55fa13df9d447452550f0e52e3d 100644
--- a/config/locale_settings.yml
+++ b/config/locale_settings.yml
@@ -1,5 +1,6 @@
 default: "en"
 available:
+  bg: "български език"
   br: "Brezhoneg"
   ca: "Català"
   cs: "Čeština"
@@ -21,6 +22,8 @@ available:
   id: "Bahasa Indonesia"
   is: "íslenska"  
   it: "Italiano"
+  ja: "日本語"
+  ko: "한국어"
   lt: "Lietuviškai"
   mk: "македонски"
   ml: "മലയാളം"
@@ -35,7 +38,7 @@ available:
   sk: "Slovenčina"
   sv: "Svenska"
   tr: "Türk"
-  zh: "中文"
+  zh-CN: "中文"
   zh-TW: "台灣中文"
 fallbacks:
   en-GB:
diff --git a/config/locales/cldr/README.md b/config/locales/cldr/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..153d10c19ec24913e939adcde07e13d7ac0a0f00
--- /dev/null
+++ b/config/locales/cldr/README.md
@@ -0,0 +1 @@
+DO NOT EDIT THIS FILES. Thanks!
diff --git a/config/locales/cldr/bg_plurals.rb b/config/locales/cldr/bg_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..642df1b9ff10a00d50cf49446df2da1f3439c632
--- /dev/null
+++ b/config/locales/cldr/bg_plurals.rb
@@ -0,0 +1 @@
+{ :bg => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/ca_plurals.rb b/config/locales/cldr/ca_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..67f246d79a895fd558cf492f85d39aef545e924d
--- /dev/null
+++ b/config/locales/cldr/ca_plurals.rb
@@ -0,0 +1 @@
+{ :ca => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/cs_plurals.rb b/config/locales/cldr/cs_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..48115c7b218f9c802dcf44529b52984a54d5361b
--- /dev/null
+++ b/config/locales/cldr/cs_plurals.rb
@@ -0,0 +1 @@
+{ :cs => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n == 1 ? :one : [2, 3, 4].include?(n) ? :few : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/cy_plurals.rb b/config/locales/cldr/cy_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..72ed2ac4d300ec97540820cedb7c8fb3515f2c9d
--- /dev/null
+++ b/config/locales/cldr/cy_plurals.rb
@@ -0,0 +1 @@
+{ :cy => { :i18n => {:plural => { :keys => [:one, :two, :many, :other], :rule => lambda { |n| n == 1 ? :one : n == 2 ? :two : n == 8 || n == 11 ? :many : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/da_plurals.rb b/config/locales/cldr/da_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..75d97ee78cbe679a7b942fe8a5b2907d8669b41c
--- /dev/null
+++ b/config/locales/cldr/da_plurals.rb
@@ -0,0 +1 @@
+{ :da => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/de_plurals.rb b/config/locales/cldr/de_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a0f157ce852d2add28808ccea3eb74859e697642
--- /dev/null
+++ b/config/locales/cldr/de_plurals.rb
@@ -0,0 +1 @@
+{ :de => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/el_plurals.rb b/config/locales/cldr/el_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5f61405a805c3f1557b2aeabde9732e8af021ea9
--- /dev/null
+++ b/config/locales/cldr/el_plurals.rb
@@ -0,0 +1 @@
+{ :el => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/en_plurals.rb b/config/locales/cldr/en_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e66a6117f47a9c5a50bd04e04d0e0a4b89bc2d67
--- /dev/null
+++ b/config/locales/cldr/en_plurals.rb
@@ -0,0 +1 @@
+{ :en => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/es_plurals.rb b/config/locales/cldr/es_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..abfa8cb18b40d226079dd861f9c8e3e72881bb7b
--- /dev/null
+++ b/config/locales/cldr/es_plurals.rb
@@ -0,0 +1 @@
+{ :es => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/eu_plurals.rb b/config/locales/cldr/eu_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8f0c5f463d5c025310c6e7b1d92659fc297cd456
--- /dev/null
+++ b/config/locales/cldr/eu_plurals.rb
@@ -0,0 +1 @@
+{ :eu => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/fi_plurals.rb b/config/locales/cldr/fi_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..51a57d48ca0094e1690bd5573e0333ba4994a641
--- /dev/null
+++ b/config/locales/cldr/fi_plurals.rb
@@ -0,0 +1 @@
+{ :fi => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/fr_plurals.rb b/config/locales/cldr/fr_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..eb783f2388caa76ef9c6fb0e5741d9ab6a0496c4
--- /dev/null
+++ b/config/locales/cldr/fr_plurals.rb
@@ -0,0 +1 @@
+{ :fr => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n && n != 2 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/ga_plurals.rb b/config/locales/cldr/ga_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..1301f8b3efa761dcefe10edb82cef11957dc5675
--- /dev/null
+++ b/config/locales/cldr/ga_plurals.rb
@@ -0,0 +1 @@
+{ :ga => { :i18n => {:plural => { :keys => [:one, :two, :other], :rule => lambda { |n| n == 1 ? :one : n == 2 ? :two : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/gl_plurals.rb b/config/locales/cldr/gl_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f94440a77c644807120491845e10540bbd965553
--- /dev/null
+++ b/config/locales/cldr/gl_plurals.rb
@@ -0,0 +1 @@
+{ :gl => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/he_plurals.rb b/config/locales/cldr/he_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..36ea35c26e2a267ba430b3ef1fd1d0f037e6d3d4
--- /dev/null
+++ b/config/locales/cldr/he_plurals.rb
@@ -0,0 +1 @@
+{ :he => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/hu_plurals.rb b/config/locales/cldr/hu_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..31ee31fb90064d3223f60dd764c494a92f954c59
--- /dev/null
+++ b/config/locales/cldr/hu_plurals.rb
@@ -0,0 +1 @@
+{ :hu => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/id_plurals.rb b/config/locales/cldr/id_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..183ae3cacc07d19f76c36de93af7b732c9a396ad
--- /dev/null
+++ b/config/locales/cldr/id_plurals.rb
@@ -0,0 +1 @@
+{ :id => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/is_plurals.rb b/config/locales/cldr/is_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b9b3fb66ea3ecc5601cd546567c86a3e65fd8a7f
--- /dev/null
+++ b/config/locales/cldr/is_plurals.rb
@@ -0,0 +1 @@
+{ :is => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/it_plurals.rb b/config/locales/cldr/it_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..4264caa5573b3f0a1181d27a7899e059666867c5
--- /dev/null
+++ b/config/locales/cldr/it_plurals.rb
@@ -0,0 +1 @@
+{ :it => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/ja_plurals.rb b/config/locales/cldr/ja_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..31aef412285388835caf9daf240268c32c8f654a
--- /dev/null
+++ b/config/locales/cldr/ja_plurals.rb
@@ -0,0 +1 @@
+{ :ja => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/ko_plurals.rb b/config/locales/cldr/ko_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..dff9b05438902a830694c2e4e69a0b13393db7db
--- /dev/null
+++ b/config/locales/cldr/ko_plurals.rb
@@ -0,0 +1 @@
+{ :ko => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/lt_plurals.rb b/config/locales/cldr/lt_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f13f5074b4a4afe11c97377551ccf5b704e28214
--- /dev/null
+++ b/config/locales/cldr/lt_plurals.rb
@@ -0,0 +1 @@
+{ :lt => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n % 10 == 1 && ![11, 12, 13, 14, 15, 16, 17, 18, 19].include?(n % 100) ? :one : [2, 3, 4, 5, 6, 7, 8, 9].include?(n % 10) && ![11, 12, 13, 14, 15, 16, 17, 18, 19].include?(n % 100) ? :few : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/mk_plurals.rb b/config/locales/cldr/mk_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3b2aeb73ccea6df8bd7b814dab68c2e810e85d36
--- /dev/null
+++ b/config/locales/cldr/mk_plurals.rb
@@ -0,0 +1 @@
+{ :mk => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n % 10 == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/ml_plurals.rb b/config/locales/cldr/ml_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..2815d104cd485ae421a53282f1e1c114aadb45ef
--- /dev/null
+++ b/config/locales/cldr/ml_plurals.rb
@@ -0,0 +1 @@
+{ :ml => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/nb_plurals.rb b/config/locales/cldr/nb_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8da3eaefb7fbdb8524a6a60d04b3c2def2505c11
--- /dev/null
+++ b/config/locales/cldr/nb_plurals.rb
@@ -0,0 +1 @@
+{ :nb => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/nl_plurals.rb b/config/locales/cldr/nl_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..acdb5cdf59654fd174344f60508714d355c274e5
--- /dev/null
+++ b/config/locales/cldr/nl_plurals.rb
@@ -0,0 +1 @@
+{ :nl => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/pa_plurals.rb b/config/locales/cldr/pa_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a1e3b3bfa4c3bb859958ae5047a4e8f97c75951e
--- /dev/null
+++ b/config/locales/cldr/pa_plurals.rb
@@ -0,0 +1 @@
+{ :pa => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/pl_plurals.rb b/config/locales/cldr/pl_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a27d719679eed06601138d81d3c163e956fcd97a
--- /dev/null
+++ b/config/locales/cldr/pl_plurals.rb
@@ -0,0 +1 @@
+{ :pl => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n == 1 ? :one : [2, 3, 4].include?(n % 10) && ![12, 13, 14].include?(n % 100) && ![22, 23, 24].include?(n % 100) ? :few : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/ro_plurals.rb b/config/locales/cldr/ro_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..452acb5cc20658242c4f30534f89a8a386962506
--- /dev/null
+++ b/config/locales/cldr/ro_plurals.rb
@@ -0,0 +1 @@
+{ :ro => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n == 1 ? :one : n == 0 ? :few : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/ru_plurals.rb b/config/locales/cldr/ru_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..65156cfba9908feadd80b72cd2443b30115f3b08
--- /dev/null
+++ b/config/locales/cldr/ru_plurals.rb
@@ -0,0 +1 @@
+{ :ru => { :i18n => {:plural => { :keys => [:one, :few, :many, :other], :rule => lambda { |n| n % 10 == 1 && n % 100 != 11 ? :one : [2, 3, 4].include?(n % 10) && ![12, 13, 14].include?(n % 100) ? :few : n % 10 == 0 || [5, 6, 7, 8, 9].include?(n % 10) || [11, 12, 13, 14].include?(n % 100) ? :many : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/sk_plurals.rb b/config/locales/cldr/sk_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..544999796fbbf523e36913c75b396696560f5ed7
--- /dev/null
+++ b/config/locales/cldr/sk_plurals.rb
@@ -0,0 +1 @@
+{ :sk => { :i18n => {:plural => { :keys => [:one, :few, :other], :rule => lambda { |n| n == 1 ? :one : [2, 3, 4].include?(n) ? :few : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/sl_plurals.rb b/config/locales/cldr/sl_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..0ccd47170d0cf4c6ed3010a6e0fef2cabb073d9b
--- /dev/null
+++ b/config/locales/cldr/sl_plurals.rb
@@ -0,0 +1 @@
+{ :sl => { :i18n => {:plural => { :keys => [:one, :two, :few, :other], :rule => lambda { |n| n % 100 == 1 ? :one : n % 100 == 2 ? :two : [3, 4].include?(n % 100) ? :few : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/sv_plurals.rb b/config/locales/cldr/sv_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..9bfa12f2404a930d4be21a1cb0de4f5dff17e15c
--- /dev/null
+++ b/config/locales/cldr/sv_plurals.rb
@@ -0,0 +1 @@
+{ :sv => { :i18n => {:plural => { :keys => [:one, :other], :rule => lambda { |n| n == 1 ? :one : :other } } } } }
\ No newline at end of file
diff --git a/config/locales/cldr/tr_plurals.rb b/config/locales/cldr/tr_plurals.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b0fb316ee87e666eefbfdfa6dfd09c4a971e5cf1
--- /dev/null
+++ b/config/locales/cldr/tr_plurals.rb
@@ -0,0 +1 @@
+{ :tr => { :i18n => {:plural => { :keys => [:other], :rule => lambda { |n| :other } } } } }
\ No newline at end of file
diff --git a/config/locales/devise/devise.bg.yml b/config/locales/devise/devise.bg.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e3462e30762a4eb9acbbb6322959b2a4d9e02286
--- /dev/null
+++ b/config/locales/devise/devise.bg.yml
@@ -0,0 +1,97 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+bg: 
+  devise: 
+    confirmations: 
+      confirmed: "Акаунтът е потвърден. Сега сте вписани."
+      new: 
+        resend_confirmation: "Повторно изпращане на инструкциите за отключване"
+      send_instructions: "След няколко минути ще получите ел. писмо съдържащо инструкции как да потвърдите акаунта си."
+    failure: 
+      inactive: "Акаунтът все още не е активиран."
+      invalid: "Невалидно потребителско име или парола."
+      invalid_token: "Данните за удостоверяване не са валидни."
+      locked: "Акаунтът ви е заключен."
+      timeout: "Сесията ви изтече, моля впишете се отново, за да продължите."
+      unauthenticated: "Впишете се или се регистрирайте, за да продължите."
+      unconfirmed: "Потвърдете акаунта, за да продължите."
+    invitations: 
+      invitation_token_invalid: "Предоставените данни за поканата не са валидни!"
+      send_instructions: "Поканата ви е изпратена."
+      updated: "Паролата е зададена. Сега сте вписани."
+    mailer: 
+      confirmation_instructions: 
+        confirm: "Потвърждаване на акаунта"
+        subject: "Инструкции за потвърждаване"
+        you_can_confirm: "Можете да потвърдите акаунта си чрез линка по-долу:"
+      hello: "Здравейте %{email}!"
+      invitation: 
+        accept: "Приеман поканата"
+        ignore: "Ако не желаете да приемете поканата, моля игнорирайте писмото."
+        no_account_till: "Акаунтът няма да бъде създаден докато не посетите връзката по-горе и не се регистрирате."
+        subject: "Поканени сте да се присъедините към Diaspora!"
+      inviters: 
+        accept_at: ", на адрес %{url}. Можете да приемете поканата чрез линка по-долу."
+        has_invited_you: "%{name} ви кани да се присъедините към Diaspora"
+        have_invited_you: "%{names} ви кани да се присъедините към Diaspora"
+      reset_password_instructions: 
+        change: "Промяна на паролата"
+        ignore: "Ако не сте заявили промяната, моля игнорирайте писмото."
+        someone_requested: "Някой е заявил връзка за промяна на паролата. Можете да я промените чрез връзката по-долу."
+        subject: "Инструкции за възстановяване на паролата"
+        wont_change: "Паролата ви няма да бъде променена докато не посетите връзката по-горе и не зададете нова."
+      unlock_instructions: 
+        account_locked: "Акаунтът ви е заключен поради голям брой неуспешни опити за вписване."
+        click_to_unlock: "За отключване на акаунта кликнете върху връзката по-долу:"
+        subject: "Инструкции за отключване"
+        unlock: "Отключване на акаунта"
+      welcome: "Добре дошли %{email}!"
+    passwords: 
+      edit: 
+        change_password: "Промяна на паролата"
+      new: 
+        forgot_password: "Забравена парола?"
+        no_account: "Не съществува акаунт с въведената ел. поща.  Ако очаквате покана, знайте че ние ги раздаваме възможно най-бързо"
+        send_password_instructions: "Изпращане на инструкции за възстановяване на паролата"
+      send_instructions: "Ще получите ел. писмо с инструкции за промяна на паролата."
+      updated: "Паролата е променена успешно. Сега сте вписани."
+    registrations: 
+      destroyed: "Довиждане! Акаунтът ви е изтрит успешно. Надяваме се да се видим отново."
+      signed_up: "Регистрирахте се успешно. Ако е включена опцията за потвърждаване ще получите ел. писмо с инструкции."
+      updated: "Обновихте успешно акаунта си."
+    sessions: 
+      new: 
+        alpha_software: "Ще ползвате софтуерен продукт в ранен етап на развитие."
+        bugs_and_feedback: "Имайте предвид, че ще се сблъскате със софтуерни грешки.  Препоръчваме ви да ползвате бутона Feedback (в десния край на страницата) за да съобщавате за всеки проблем!  Ще се потрудим да отстраним всеки проблем, за който ни съобщите, възможно най-бързо."
+        bugs_and_feedback_mobile: "Имайте предвид, че ще се сблъскате със софтуерни грешки. Препоръчваме ви да съобщавате за всеки проблем! Ще се потрудим да отстраним всеки проблем, за който ни съобщите, възможно най-бързо."
+        login: "Вписване"
+        modern_browsers: "поддържа само съвременни браузъри."
+        password: "Парола"
+        remember_me: "Запомни ме"
+        sign_in: "Вписване"
+        username: "Потребителско име"
+      signed_in: "Вписахте се успешно."
+      signed_out: "Отписахте се успешно."
+    shared: 
+      links: 
+        forgot_your_password: "Забравена парола?"
+        receive_confirmation: "Не сте получили инструкциите за отключване?"
+        receive_unlock: "Не сте получили инструкциите за отключване?"
+        sign_in: "Вписване"
+        sign_up: "Регистриране"
+        sign_up_closed: "За сега регистрациите не са възможни."
+      mail_signup_form: 
+        sign_up_for_an_invite: "Запишете се за покана!"
+    unlocks: 
+      new: 
+        resend_unlock: "Повторно изпращане на инструкциите за отключване"
+      send_instructions: "След няколко минути ще получите ел. писмо съдържащо инструкции как да отключите акаунта си."
+      unlocked: "Акаунтът е отключен. Сега сте вписани."
+  errors: 
+    messages: 
+      already_confirmed: "вече е потвърдено"
+      not_found: "не е открито"
+      not_locked: "не е заключена"
diff --git a/config/locales/devise/devise.da.yml b/config/locales/devise/devise.da.yml
index f9a808a4e13e841b8acc087d2affd57ad7f08d5a..f8b00e21fa8f56e134b8c9ad74b662f73226b958 100644
--- a/config/locales/devise/devise.da.yml
+++ b/config/locales/devise/devise.da.yml
@@ -12,7 +12,7 @@ da:
       send_instructions: "Du vil modtage en e-mail med instruktioner om hvordan du bekræfter din konto om et par minutter."
     failure: 
       inactive: "Din konto er endnu ikke aktiveret."
-      invalid: "Forkert e-mail eller adgangskode."
+      invalid: "Forkert brugernavn eller adgangskode."
       invalid_token: "Ugyldig token."
       locked: "Din konto er låst."
       timeout: "Du har været inaktiv for længe. Log ind for at fortsætte."
diff --git a/config/locales/devise/devise.es.yml b/config/locales/devise/devise.es.yml
index c807f4ce34d0e020fc6a471bab85d0f028f8de25..46df18487eefecf586edb334bd0935c5547552e0 100644
--- a/config/locales/devise/devise.es.yml
+++ b/config/locales/devise/devise.es.yml
@@ -12,7 +12,7 @@ es:
       send_instructions: "Recibirás un correo con instrucciones para confirmar tu cuenta en pocos minutos."
     failure: 
       inactive: "Tu cuenta aún no ha sido activada."
-      invalid: "Contraseña o correo incorrecto."
+      invalid: "Nombre de usuario o contraseña incorrectos."
       invalid_token: "Identificador de autenticación incorrecto."
       locked: "Tu cuenta está bloqueada."
       timeout: "Tu sesión ha expirado, por favor accede de nuevo para continuar."
diff --git a/config/locales/devise/devise.eu.yml b/config/locales/devise/devise.eu.yml
index 309fc22633ef9bea87d79197c08fc56f8cf98775..c93926650f306744af605b49fcd5594042df56d0 100644
--- a/config/locales/devise/devise.eu.yml
+++ b/config/locales/devise/devise.eu.yml
@@ -12,7 +12,7 @@ eu:
       send_instructions: "Minutu batzuetan kontua baieztatzeko argibideak jasoko dituzu e-postan."
     failure: 
       inactive: "Zure kontua ez da aktibatu oraindik."
-      invalid: "E-posta edo pasahitza okerra."
+      invalid: "Erabiltzaile edo pasahitz okerra."
       invalid_token: "Autentikazio datu akasduna."
       locked: "Zure kontua ez dago erabilgarri."
       timeout: "Zure sesioa bukatu da, autentikatu berriz jarraitzeko."
diff --git a/config/locales/devise/devise.gl.yml b/config/locales/devise/devise.gl.yml
index e903ef3cb2b464f5e7f175c967930063b39eac8a..9a90c1a5076794c8f4df9a0c8e7c6e4838fe38ce 100644
--- a/config/locales/devise/devise.gl.yml
+++ b/config/locales/devise/devise.gl.yml
@@ -6,32 +6,32 @@
 gl: 
   devise: 
     confirmations: 
-      confirmed: "A túa conta foi confirmada. Xa estás en Diaspora"
+      confirmed: "Confirmouse a súa conta. Xa está en Diaspora."
       new: 
-        resend_confirmation: "Volver a enviar instruccións de confirmación."
-      send_instructions: "Recibiraás un correo con instrucción para confirmar a túa conta nuns minutos."
+        resend_confirmation: "Volver enviar as instrucións de confirmación."
+      send_instructions: "En cuestión de minutos recibirá un correo electrónico con instrucións para confirmar a súa conta."
     failure: 
-      inactive: "A túa conta aínda non foi activada."
-      invalid: "Correo ou contrasinal incorrecta."
-      invalid_token: "Invitación inválida."
-      locked: "A túa conta está bloqueada."
-      timeout: "A túa sesión rematou, entra de novo para continuar."
-      unauthenticated: "Tes que entrar ou rexistrarte antes de seguir."
-      unconfirmed: "Tes que confirmar a túa conta antes de seguir."
+      inactive: "Aínda non se activou a súa conta."
+      invalid: "O correo electrónico ou contrasinal son incorrectos."
+      invalid_token: "A invitación non é válida."
+      locked: "A súa conta está bloqueada."
+      timeout: "A súa sesión rematou, volva identificarse para continuar."
+      unauthenticated: "Ten que identificarse ou rexistrarte para continuar."
+      unconfirmed: "Ten que confirmar a súa conta para continuar."
     invitations: 
-      invitation_token_invalid: "Está invitación non é valida!"
-      send_instructions: "A túa invitación foi enviada."
-      updated: "O teu contrasinal estableceuse correctamente."
+      invitation_token_invalid: "A invitación non é valida!"
+      send_instructions: "Enviouse a invitación."
+      updated: "O novo contrasinal gardouse correctamente."
     mailer: 
       confirmation_instructions: 
-        confirm: "Confirmar conta"
-        subject: "Instruccións de confirmación"
-        you_can_confirm: "Podes confirmar a túa conta a través do enlace de abaixo:"
+        confirm: "Confirmar a conta"
+        subject: "Instrucións de confirmación"
+        you_can_confirm: "Pode confirmar a súa conta mediante a ligazón que hai máis abaixo:"
       hello: "Ola %{email}!"
       invitation: 
-        accept: "Aceptar convite"
-        ignore: "Se non queres aceptar a invitación, por favor ignora este correo."
-        no_account_till: "A túa conta non se creará ata que premas o link de arriba e te rexistres."
+        accept: "Aceptar a invitación"
+        ignore: "Se non quere aceptar a invitación, non ten máis que ignorar esta mensaxe."
+        no_account_till: "A súa conta non se creará ata que premas a ligazón que hai máis arriba e se rexistre."
         subject: "Fuches invitado a formar parte de Diaspora!"
       inviters: 
         accept_at: ", %{url}, podes aceptar mediante o link de abaixo."
@@ -70,7 +70,7 @@ gl:
         login: "Nome de usuario"
         modern_browsers: "só acepta navegadores actuais."
         password: "Contrasinal"
-        remember_me: "Lémbrame"
+        remember_me: "Lembrar os datos."
         sign_in: "Entrar"
         username: "Nome de usuario"
       signed_in: "Entrou satisfactoriamente."
diff --git a/config/locales/devise/devise.he.yml b/config/locales/devise/devise.he.yml
index 6f59b8b0734daa805c35b254d17c645ce80dc162..9823a00aeb5185d28b169ce7f3c94efc5fcb3287 100644
--- a/config/locales/devise/devise.he.yml
+++ b/config/locales/devise/devise.he.yml
@@ -12,7 +12,7 @@ he:
       send_instructions: "בעוד מספר דקות תתקבל לתיבת הדוא״ל שלך הודעה עם הנחיות כיצד לאמת את חשבונך."
     failure: 
       inactive: "חשבונך לא הופעל עדיין."
-      invalid: "הססמה או הדוא״ל שגויים."
+      invalid: "שם המשתמש או הססמה שגויים."
       invalid_token: "אסימון האימות שגוי."
       locked: "חשבונך נעול."
       timeout: "ההפעלה שלך פגה, נא להיכנס שוב כדי להמשיך."
diff --git a/config/locales/devise/devise.it.yml b/config/locales/devise/devise.it.yml
index e12bd126e94605d9719b719615c22b75c50fdbf8..881385883afb0f3650fff1f579635e44a1e4c518 100644
--- a/config/locales/devise/devise.it.yml
+++ b/config/locales/devise/devise.it.yml
@@ -12,7 +12,7 @@ it:
       send_instructions: "Tra pochi minuti riceverai una email per confermare il tuo account."
     failure: 
       inactive: "Il tuo account non è ancora stato attivato."
-      invalid: "Email o password errati."
+      invalid: "Nome utente o password errati."
       invalid_token: "Token di autenticazione errato."
       locked: "Il tuo account è bloccato."
       timeout: "La tua sessione è scaduta, effettua di nuovo l'accesso per continuare."
@@ -71,7 +71,7 @@ it:
         modern_browsers: "supporta soltano i browser recenti."
         password: "Password"
         remember_me: "Ricordami"
-        sign_in: "Registrati"
+        sign_in: "Accedi"
         username: "Nome utente"
       signed_in: "Accesso effettuato con successo."
       signed_out: "Disconnessione effettuata con successo."
diff --git a/config/locales/devise/devise.ja.yml b/config/locales/devise/devise.ja.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9c40979cf582a53168337abfaa0bf8b5b17b3e1e
--- /dev/null
+++ b/config/locales/devise/devise.ja.yml
@@ -0,0 +1,97 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+ja: 
+  devise: 
+    confirmations: 
+      confirmed: "アカウントの認証に成功しました。既にログイン済みです。"
+      new: 
+        resend_confirmation: "認証メールを再送する"
+      send_instructions: "数分後にアカウント認証の手続きメールが届きます。"
+    failure: 
+      inactive: "アカウントはまだ承認されていません。"
+      invalid: "ユーザ名またはパスワードが不正です。"
+      invalid_token: "無効な認証トークンです。"
+      locked: "アカウントがロックされています。"
+      timeout: "セッション切れになりました。続くにはもう一度ログインしてください。"
+      unauthenticated: "進むにはログインまたは新規登録する必要があります。"
+      unconfirmed: "進にはアカウントを確認する必要があります。"
+    invitations: 
+      invitation_token_invalid: "ご使用の招待トークンは無効です!"
+      send_instructions: "招待メールを送信しました。"
+      updated: "パスワードの設定に成功しました。既にログイン済みです。"
+    mailer: 
+      confirmation_instructions: 
+        confirm: "アカウントを認証する"
+        subject: "認証手続き"
+        you_can_confirm: "次のリンクからアカウントが認証できます。"
+      hello: "%{email}さん、こんにちは!"
+      invitation: 
+        accept: "招待を承諾する"
+        ignore: "招待にご興味がない場合は、このメールを無視してください。"
+        no_account_till: "上のリンクへアクセスして新規登録するまではアカウントが作成されません。"
+        subject: "ダイアスポラへ参加しませんか!"
+      inviters: 
+        accept_at: "、%{url}。下のリンクから承諾できます。"
+        has_invited_you: "%{name}さんはダイアスポラへの参加を招待しています。"
+        have_invited_you: "%{names}さん等はダイアスポラへの参加を招待しています。"
+      reset_password_instructions: 
+        change: "パスワードを変更する"
+        ignore: "再設定を申請した覚えがない場合はこのメールを無視してください。"
+        someone_requested: "パスワード変更リンクの申請を預かりました。下のリンクから変更可能です。"
+        subject: "パスワード再設定手続き"
+        wont_change: "上のリンクをアクセスして新しいパスワードを登録するまではパスワードが変更されません。"
+      unlock_instructions: 
+        account_locked: "ログイン失敗が多すぎたため、アカウントがロックされました。"
+        click_to_unlock: "アカウントのロックを解除するのに下記のリンクにクリックしてください。"
+        subject: "ロック解除説明"
+        unlock: "アカウントのロックを解除する"
+      welcome: "%{email}さん、ようこそ!"
+    passwords: 
+      edit: 
+        change_password: "パスワードを変更する"
+      new: 
+        forgot_password: "パスワードを忘れましたか。"
+        no_account: "このメールアドレスに一致するアカウントは存在しません。招待待ちの方は、なるべく早く出せるように努力していますので、もう少々お待ちください。"
+        send_password_instructions: "パスワード再発行の手続きメールを送ってください。"
+      send_instructions: "数分後にパスワード再発行の手続きメールが届きます。"
+      updated: "パスワードの変更に成功しました。既にログイン済みです。"
+    registrations: 
+      destroyed: "さようなら!アカウントの取消しに成功しました。またのご参加をお待ちしています。"
+      signed_up: "新規登録に成功しました。設定が有効な場合、確認メールも送信されました。"
+      updated: "アカウントの更新に成功しました。"
+    sessions: 
+      new: 
+        alpha_software: "これから使うソフトはアルファ版です。"
+        bugs_and_feedback: "バク発生に覚悟してください。小さな支障でもページ右側の「フィードバック」ボタンからご報告願います!頂いた問題報告はなるべく早く解決できるよう努力します。"
+        bugs_and_feedback_mobile: "バク発生に覚悟してください。小さな支障でもご報告願います!頂いた問題報告はなるべく早く解決できるよう努力します。"
+        login: "ログイン"
+        modern_browsers: "最新型のブラウザにしか対応していません。"
+        password: "パスワード"
+        remember_me: "ログインしたままにする"
+        sign_in: "ログイン"
+        username: "ユーザ名"
+      signed_in: "ログインに成功しました。"
+      signed_out: "ログアウトに成功しました。"
+    shared: 
+      links: 
+        forgot_your_password: "パスワードを忘れましたか。"
+        receive_confirmation: "認証手続きメールが届きませんでしたか。"
+        receive_unlock: "ロック解除の説明が届きませんでしたか。"
+        sign_in: "ログイン"
+        sign_up: "新規登録"
+        sign_up_closed: "一般の新規登録は現在受け付けていません。"
+      mail_signup_form: 
+        sign_up_for_an_invite: "参加招待の希望者として登録したい!"
+    unlocks: 
+      new: 
+        resend_unlock: "ロック解除手続きメールを再送する"
+      send_instructions: "数分後にアカウントロック解除の手続きメールが届きます。"
+      unlocked: "アカウントのロック解除に成功しました。既にログイン済みです。"
+  errors: 
+    messages: 
+      already_confirmed: "既に認証済みです。"
+      not_found: "見つかりませんでした。"
+      not_locked: "ロックされませんでした。"
diff --git a/config/locales/devise/devise.ko.yml b/config/locales/devise/devise.ko.yml
new file mode 100644
index 0000000000000000000000000000000000000000..07f9e724c4dee531b525a1f7bdfd5ad60ddf699e
--- /dev/null
+++ b/config/locales/devise/devise.ko.yml
@@ -0,0 +1,97 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+ko: 
+  devise: 
+    confirmations: 
+      confirmed: "계정을 성공적으로 확인한 뒤 로그인하였습니다."
+      new: 
+        resend_confirmation: "확인 메일 다시 보내기"
+      send_instructions: "몇 분 안으로 계정을 확인하기 위한 메일이 도착합니다."
+    failure: 
+      inactive: "아직 계정이 활성화되지 않았습니다."
+      invalid: "유효하지 않은 사용자명과 암호"
+      invalid_token: "유효하지 않은 인증 토큰"
+      locked: "계정이 잠겼습니다."
+      timeout: "세션이 만료되었습니다. 다시 로그인하십시오."
+      unauthenticated: "더 나아가려면 로그인하거나 가입해야 합니다."
+      unconfirmed: "더 나아가기 전에 계정을 확인해야 합니다."
+    invitations: 
+      invitation_token_invalid: "초대장 토큰이 유효하지 않습니다!"
+      send_instructions: "초대장을 보냈습니다"
+      updated: "암호를 성공적으로 바꾼 뒤 로그인하였습니다."
+    mailer: 
+      confirmation_instructions: 
+        confirm: "계정 확인하기"
+        subject: "확인 안내"
+        you_can_confirm: "아래 링크로 계정을 확인할 수 있습니다:"
+      hello: "%{email} 님 환영합니다!"
+      invitation: 
+        accept: "초대 수락하기"
+        ignore: "초대를 수락하지 않으려면 이 메일을 무시하십시오."
+        no_account_till: "계정은 가입하지 않는 한 만들어지지 않습니다."
+        subject: "디아스포라로 초대합니다!"
+      inviters: 
+        accept_at: "이 링크로 수락할 수 있습니다: %{url}"
+        has_invited_you: "%{name} 님이 귀하를 디아스포라에 초대하였습니다."
+        have_invited_you: "%{name} 님이 귀하를 디아스포라에 초대하였습니다."
+      reset_password_instructions: 
+        change: "암호 바꾸기"
+        ignore: "암호 초기화를 요청하지 않았다면 이 메일을 무시하십시오."
+        someone_requested: "아래 링크로 암호를 다시 정할 수 었습니다:"
+        subject: "암호 초기화 안내"
+        wont_change: "암호는 링크를 클릭해서 새 암호를 만들기 전까지 바뀌지 않습니다."
+      unlock_instructions: 
+        account_locked: "귀하의 계정은 로그인을 여러번 실패해 잠겼습니다."
+        click_to_unlock: "아래 링크로 계정을 풀을 수 있습니다."
+        subject: "계정 풀기 안내"
+        unlock: "계정 풀기"
+      welcome: "%{email} 님 환영합니다!"
+    passwords: 
+      edit: 
+        change_password: "암호 바꾸기"
+      new: 
+        forgot_password: "암호를 잊었습니까?"
+        no_account: "등록되지 않은 이메일 주소입니다."
+        send_password_instructions: "암호 초기화 메일 보내기"
+      send_instructions: "몇 분 안으로 암호를 초기화하기 위한 메일이 도착합니다."
+      updated: "암호를 성공적으로 바꾼 뒤 로그인하였습니다."
+    registrations: 
+      destroyed: "계정을 성공적으로 취소하였습니다."
+      signed_up: "성공적으로 가입하였습니다."
+      updated: "계정을 성공적으로 갱신하였습니다."
+    sessions: 
+      new: 
+        alpha_software: "이 소프트웨어는 알파 실험 단계입니다."
+        bugs_and_feedback: "여러 버그를 경험하실 수 있습니다. 오른쪽의 피드백 단추로 문제점을 보고해주십시오! 보고하신 문제점을 빠르게 해결하기 위해 최선을 다하겠습니다."
+        bugs_and_feedback_mobile: "여러 버그를 경험하실 수 있습니다. 문제점을 보고해주십시오! 보고하신 문제점을 빠르게 해결하기 위해 최선을 다하겠습니다."
+        login: "로그인"
+        modern_browsers: "최신 브라우저만 지원합니다."
+        password: "암호"
+        remember_me: "로그인 유지"
+        sign_in: "로그인"
+        username: "사용자명"
+      signed_in: "성공적으로 로그인하였습니다."
+      signed_out: "성공적으로 로그아웃하였습니다."
+    shared: 
+      links: 
+        forgot_your_password: "암호를 잊었습니까?"
+        receive_confirmation: "확인 안내를 받지 못했습니까?"
+        receive_unlock: "풀기 안내를 받지 못했슸니까?"
+        sign_in: "로그인"
+        sign_up: "가입하기"
+        sign_up_closed: "공개 가입이 닫혀있습니다."
+      mail_signup_form: 
+        sign_up_for_an_invite: "초대받고 싶으면 이메일 주소를 등록해두십시오!"
+    unlocks: 
+      new: 
+        resend_unlock: "풀기 메일 다시 보내기"
+      send_instructions: "몇 분 안으로 계정을 풀기 위한 메일이 도착합니다."
+      unlocked: "계정을 성공적으로 풀은 뒤 로그인하였습니다."
+  errors: 
+    messages: 
+      already_confirmed: ": 이미 확인되었습니다"
+      not_found: ": 찾을 수 없습니다"
+      not_locked: ": 잠겨있지 읺습니다"
diff --git a/config/locales/devise/devise.ml.yml b/config/locales/devise/devise.ml.yml
index 281b6012563b70c84bb13f03b6389f1bd29ac8d5..82acd053ad14383c813a5e8f67db7c19ff88643c 100644
--- a/config/locales/devise/devise.ml.yml
+++ b/config/locales/devise/devise.ml.yml
@@ -31,30 +31,30 @@ ml:
       invitation: 
         accept: "ക്ഷണം സ്വീകരിക്കു"
         ignore: "താങ്കള്‍ക്ക് ഈ ക്ഷണം സ്വീകരിക്കേണ്ടെങ്കില്‍ ദയവായി ഈ കത്ത് അവഗണിക്കുക."
-        no_account_till: "Your account won't be created until you access the link above and sign up."
+        no_account_till: "മുകളിലുള്ള കണ്ണി ഉപയോഗിച്ച് ഇതില്‍ ചേരാതെ താങ്കളുടെ അക്കൌണ്ട് നിര്‍മ്മിക്കില്ല."
         subject: "ഡയസ്പോറയില്‍ ചേരാന്‍ താങ്കളെ ക്ഷണിച്ചിരിക്കുന്നു!"
       inviters: 
         accept_at: ", at %{url}, you can accept it through the link below."
-        has_invited_you: "%{name} has invited you to join Diaspora"
-        have_invited_you: "%{names} have invited you to join Diaspora"
+        has_invited_you: "%{name} താങ്കളെ ഡയസ്പോറയില്‍ ചേരുന്നതിനായി ക്ഷണിച്ചിരിക്കുന്നു"
+        have_invited_you: "%{names} താങ്കളെ ഡയസ്പോറയില്‍ ചേരുന്നതിനായി ക്ഷണിച്ചിരിക്കുന്നു"
       reset_password_instructions: 
         change: "എന്റെ രഹസ്യവാക്ക് മാറ്റുക"
         ignore: "താങ്കള്‍ ഇത് ആവശ്യപ്പെട്ടിലെങ്കില്‍ ദയവായി അവഗണിക്കുക."
-        someone_requested: "Someone has requested a link to change your password, and you can do this through the link below."
+        someone_requested: "താങ്കളുടെ രഹസ്യവാക്ക് മാറ്റുന്നതിന് ആരോ അപേക്ഷ നല്‍കിയിരിക്കുന്നു. മാറ്റുന്നതിനായി താഴെയുള്ള കണ്ണി തിരഞ്ഞെടുക്കാവുന്നതാണ്."
         subject: "Reset password instructions"
-        wont_change: "Your password won't change until you access the link above and create a new one."
+        wont_change: "മുകളിലുള്ള കണ്ണിയിലൂടെ പൂതിയ ഒരു രഹസ്യവാക്ക് നിര്‍മ്മിക്കാതെ അത് മാറ്റപ്പെടില്ല."
       unlock_instructions: 
         account_locked: "Your account has been locked due to an excessive amount of unsuccessful sign in attempts."
-        click_to_unlock: "Click the link below to unlock your account:"
-        subject: "Unlock Instructions"
-        unlock: "Unlock my account"
+        click_to_unlock: "നിങ്ങളുടെ അക്കൌണ്ട് തുറക്കുന്നതിനായി താഴെയുള്ള കണ്ണി തെരഞ്ഞെടുക്കുക:"
+        subject: "അക്കൌണ്ട് തുറക്കുന്നതിനുള്ള വിവരങ്ങള്‍"
+        unlock: "എന്റെ ആക്കൌണ്ട് തുറക്കുക"
       welcome: "സ്വാഗതം %{email}!"
     passwords: 
       edit: 
         change_password: "എന്റെ രഹസ്യവാക്ക് മാറ്റുക"
       new: 
         forgot_password: "താങ്കളുടെ രഹസ്യവാക്ക് മറന്നോ?"
-        no_account: "No account with this email exsists.  If you are waiting for an invite, we are rolling them out as soon as possible"
+        no_account: "No account with this email exists.  If you are waiting for an invite, we are rolling them out as soon as possible"
         send_password_instructions: "Send me reset password instructions"
       send_instructions: "You will receive an email with instructions about how to reset your password in a few minutes."
       updated: "Your password was changed successfully. You are now signed in."
diff --git a/config/locales/devise/devise.pl.yml b/config/locales/devise/devise.pl.yml
index 33d61ed08aa69322e300f7a42f48d9c185e7596f..21776eb18e025947de1c5e8166e022fb9dc119d5 100644
--- a/config/locales/devise/devise.pl.yml
+++ b/config/locales/devise/devise.pl.yml
@@ -54,7 +54,7 @@ pl:
         change_password: "Zmień hasło"
       new: 
         forgot_password: "Nie pamiętasz hasła?"
-        no_account: "No account with this email exsists.  If you are waiting for an invite, we are rolling them out as soon as possible"
+        no_account: "Konto o takim emailu nie istnieje. Jeżeli czekasz na nowe zaproszenia, wydajemy je tak szybko, jak to tylko możliwe."
         send_password_instructions: "Wyślij mi instrukcje resetowania hasła"
       send_instructions: "W ciągu kilku minut otrzymasz e-maila zawierającego instrukcjie dotyczące zresetowania hasła."
       updated: "Twoje hasło zostało zmienione. Zalogowano pomyślnie."
diff --git a/config/locales/devise/devise.sl.yml b/config/locales/devise/devise.sl.yml
index 5f6e86f8f139277d9e5cffec85293d3d42f0a379..203f6f0ee03fec0b526e0e9bdcd8e31f98ecb415 100644
--- a/config/locales/devise/devise.sl.yml
+++ b/config/locales/devise/devise.sl.yml
@@ -12,7 +12,7 @@ sl:
       send_instructions: "V nekaj minutah boste po e-pošti prejeli navodila, kako potrditi vaš uporabniški račun."
     failure: 
       inactive: "Vaš račun še ni aktiviran."
-      invalid: "Napačen e-naslov ali geslo."
+      invalid: "Napačeno uporabniško ime ali geslo."
       invalid_token: "Neveljavna avtentikacija."
       locked: "Vaš račun je zaklenjen."
       timeout: "Vaša seja je potekla. Za nadaljevanje se ponovno prijavite."
@@ -54,7 +54,7 @@ sl:
         change_password: "Spremeni geslo"
       new: 
         forgot_password: "Ste pozabili geslo?"
-        no_account: "Uporabniški račun s tem e-naslovom ne obstaja. V kolikor čakate na povabilo, ga lahko v kratkem pričakujete."
+        no_account: "Uporabniški račun s tem e-naslovom ne obstaja. V kolikor še čakate na povabilo, ga lahko v kratkem pričakujete."
         send_password_instructions: "Pošlji navodila za ponastavitev gesla"
       send_instructions: "V nekaj minutah boste po e-pošti prejeli navodila za ponastavitev vašega gesla."
       updated: "Vaše geslo je bilo uspešno spremenjeno. Zdaj ste prijavljeni."
diff --git a/config/locales/devise/devise.zh-CN.yml b/config/locales/devise/devise.zh-CN.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0f87631d28a5e42f278d531fcfde7c410ecc7cee
--- /dev/null
+++ b/config/locales/devise/devise.zh-CN.yml
@@ -0,0 +1,97 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+zh-CN: 
+  devise: 
+    confirmations: 
+      confirmed: "帐号确认成功。您已经成功登录。"
+      new: 
+        resend_confirmation: "重送发送帐号确认邮件"
+      send_instructions: "您会在几分钟内收到一封邮件,它将指引您完成帐号确认步骤。"
+    failure: 
+      inactive: "你的帐号尚未激活。"
+      invalid: "邮箱或密码有误。"
+      invalid_token: "验证信息不合法。"
+      locked: "您的帐号已锁定。"
+      timeout: "会话超时。若要继续,请重新登录。"
+      unauthenticated: "请您登录或注册。"
+      unconfirmed: "你必须先验证帐号才能继续。"
+    invitations: 
+      invitation_token_invalid: "邀请码验证失败。"
+      send_instructions: "邀请发送成功。"
+      updated: "密码设定成功。您已经成功登录。"
+    mailer: 
+      confirmation_instructions: 
+        confirm: "确认帐号"
+        subject: "帐号确认步骤"
+        you_can_confirm: "你可以点击下面的链接确认帐号:"
+      hello: "您好, %{email}!"
+      invitation: 
+        accept: "接受邀请"
+        ignore: "如果您不想接受邀请, 请忽略这封邮件。"
+        no_account_till: "点击以上链接并注册后, 你才能创建帐号。"
+        subject: "您被邀请加入Diaspora!"
+      inviters: 
+        accept_at: " (%{url}), 你可以点击下面的链接接收邀请。"
+        has_invited_you: "%{name} 邀请您加入Diaspora"
+        have_invited_you: "%{names} 邀请您加入Diaspora"
+      reset_password_instructions: 
+        change: "重置密码"
+        ignore: "如果您并没有请求重置密码, 请忽略这封信件。"
+        someone_requested: "有人请求重置您的密码,若确实要这么做,请点击下面的链接。"
+        subject: "密码重置步骤"
+        wont_change: "在点击以上链接重置密码后,您的密码才会改变。"
+      unlock_instructions: 
+        account_locked: "您的帐号因为登录失败次数异常而被锁定。"
+        click_to_unlock: "点击下面的链接以解锁您的帐号:"
+        subject: "帐号解锁步骤"
+        unlock: "解锁帐号"
+      welcome: "欢迎您, %{email}!"
+    passwords: 
+      edit: 
+        change_password: "修改密码"
+      new: 
+        forgot_password: "忘记密码?"
+        no_account: "没有与此邮箱关联的帐号。如果您在等待邀请函, 我们将尽快寄出."
+        send_password_instructions: "请向我发送密码重置步骤"
+      send_instructions: "几分钟内您将收到一封包含密码重置步骤的邮件。"
+      updated: "密码修改成功。您已经登入了。"
+    registrations: 
+      destroyed: "再见!您的帐号已经关闭。希望不久后再会。"
+      signed_up: "您已经成功注册。如果有设定的话, 确认信会送到您的邮箱。"
+      updated: "帐号更新成功。"
+    sessions: 
+      new: 
+        alpha_software: "你即将使用处于开发初期的功能。"
+        bugs_and_feedback: "给您一个提醒, 你将可能遇到bug。 遇到任何问题,都请您点击浏览器右边的\"反馈\"按钮向我们反馈! 我们会尽快处理您反馈的任何问题。"
+        bugs_and_feedback_mobile: "给您一个提醒, 你将可能遇到bug。 遇到任何问题都请你向我们反馈! 我们会尽快处理你反馈的任何问题."
+        login: "登录"
+        modern_browsers: "只支持较新的浏览器。"
+        password: "密码"
+        remember_me: "记住密码"
+        sign_in: "登录"
+        username: "用户名"
+      signed_in: "登录成功。"
+      signed_out: "登出成功。"
+    shared: 
+      links: 
+        forgot_your_password: "忘记密码?"
+        receive_confirmation: "没有收到确认步骤?"
+        receive_unlock: "没有收到重置步骤?"
+        sign_in: "登录"
+        sign_up: "注册"
+        sign_up_closed: "目前不开放公开注册。"
+      mail_signup_form: 
+        sign_up_for_an_invite: "凭邀请函注册!"
+    unlocks: 
+      new: 
+        resend_unlock: "重新发送解锁步骤"
+      send_instructions: "几分钟后您将收到一封邮件,它将指引您解锁您的帐号。"
+      unlocked: "帐号解锁成功。你已经登录。"
+  errors: 
+    messages: 
+      already_confirmed: "已确认"
+      not_found: "未找到"
+      not_locked: "未锁定"
diff --git a/config/locales/diaspora/ar.yml b/config/locales/diaspora/ar.yml
index 45f838a7f8818006b156227d044da4b2b0b5e023..63936dda4353cf67eece1b8a4a7aafa4d5b03401 100644
--- a/config/locales/diaspora/ar.yml
+++ b/config/locales/diaspora/ar.yml
@@ -354,7 +354,7 @@ ar:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "to accept or ignore it."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/bg.yml b/config/locales/diaspora/bg.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ca353a089c33fb94c2a765f991a35ecda6bf9378
--- /dev/null
+++ b/config/locales/diaspora/bg.yml
@@ -0,0 +1,617 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+bg: 
+  _comments: "Коментари"
+  _home: "Home"
+  _photos: "снимки"
+  _services: "Услуги"
+  account: "Акаунт"
+  activerecord: 
+    errors: 
+      models: 
+        contact: 
+          attributes: 
+            person_id: 
+              taken: "must be unique among this user's contacts."
+        person: 
+          attributes: 
+            diaspora_handle: 
+              taken: "вече е зает."
+        request: 
+          attributes: 
+            from_id: 
+              taken: "is a duplicate of a pre-existing request."
+        user: 
+          attributes: 
+            email: 
+              taken: "е вече заета."
+            person: 
+              invalid: "is invalid."
+            username: 
+              taken: "е вече заето."
+  ago: "преди %{time}"
+  all_aspects: "Всички аспекти"
+  application: 
+    helper: 
+      unknown_person: "непознато лице"
+      video_title: 
+        unknown: "Unknown Video Title"
+  are_you_sure: "Сигурни ли сте?"
+  aspect_memberships: 
+    destroy: 
+      failure: "Лицето не бе премахнато от аспекта"
+      no_membership: "Избраното лице не може да бъде намерено в този апект"
+      success: "Лицето е премахнато от аспекта"
+  aspects: 
+    add_to_aspect: 
+      failure: "Контактът не бе добавен към аспекта."
+      success: "Контактът е добавен към аспекта."
+    aspect_contacts: 
+      done_editing: "готово"
+    aspect_stream: 
+      activity: "активност"
+      post_time: "ред на публикуване"
+      sort_by: "сортиране по:"
+    contacts_not_visible: "Контактите в аспекта няма да бъдат видими един за друг."
+    contacts_visible: "Контактите в аспекта ще бъдат видими един за друг."
+    create: 
+      failure: "Аспектът не бе създаден."
+      success: "Новият аспект %{name} бе създаден"
+    destroy: 
+      failure: "%{name} не е празен, затова не може да бъде изтрит."
+      success: "%{name} бе изтрит."
+    edit: 
+      add_existing: "Добавяне на съществуващ контакт"
+      aspect_list_is_not_visible: "списъкът на аспекта е скрит за останалите в аспекта"
+      aspect_list_is_visible: "списъкът на аспекта е открит за останалите в аспекта"
+      confirm_remove_aspect: "Наистина ли желаете да бъде премахнат аспектът?"
+      done: "Готово"
+      make_aspect_list_visible: "нека аспектът бъде видим"
+      remove_aspect: "Изтриване на аспекта"
+      rename: "преименуване"
+      update: "update"
+      updating: "updating"
+    few: "%{count} аспекта"
+    helper: 
+      are_you_sure: "Наистина ли желаете да бъде изтриете аспектът?"
+      aspect_not_empty: "Аспектът не е празен"
+      remove: "премахване"
+    index: 
+      handle_explanation: "Това е вашият адрес в Diaspora. Наподобява адрес на ел. поща - давате го на хора, за да се свържат с вас."
+      no_contacts: "Няма контакти"
+      post_a_message: "публикуване на съобщение >>"
+    manage: 
+      add_a_new_aspect: "Добавяне на аспект"
+      add_a_new_contact: "Добавяне на контакт"
+      drag_to_add: "Влачете за да добавите хора"
+      manage_aspects: "Управление на аспектите"
+      no_requests: "Няма нови покани"
+      requests: "Покани"
+    many: "%{count} аспекта"
+    move_contact: 
+      error: "Грешка при преместване на контакт: %{inspect}"
+      failure: "didn't work %{inspect}"
+      success: "Лицето е преместено в нов аспект"
+    new_aspect: 
+      create: "Създаване"
+      name: "Име"
+    no_posts_message: 
+      start_talking: "Няма публикации. Бъдете първи!"
+    one: "1 аспект"
+    other: "%{count} аспекта"
+    seed: 
+      family: "Семейство"
+      work: "Работа"
+    show: 
+      edit_aspect: "редактиране на аспекта"
+    update: 
+      failure: "Аспектът %{name} има твърде дълго име. Не може да бъде запаметен."
+      success: "Аспектът %{name} е успешно редактиран."
+    zero: "няма аспекти"
+  back: "Назад"
+  bookmarklet: 
+    explanation: "%{link} от където и да е, запаметявайки връзката като отметка."
+    explanation_link_text: "Публикувайте в Diaspora"
+    post_something: "Публикувайте нещо в Diaspora"
+    post_success: "Публикувано!"
+  cancel: "Отказ"
+  comments: 
+    few: "%{count} коментара"
+    many: "%{count} коментара"
+    new_comment: 
+      comment: "коментар"
+      commenting: "Коментиране..."
+    one: "1 коментар"
+    other: "%{count} коментара"
+    zero: "няма коментари"
+  contacts: 
+    create: 
+      failure: "Контактът не бе създаден"
+    destroy: 
+      failure: "Връзката с %{name} не бе премахната"
+      success: "Връзката с %{name} е премахната"
+    few: "%{count} контакта"
+    many: "%{count} контакта"
+    one: "1 контакт"
+    other: "%{count} контакта"
+    share_with_pane: 
+      accepts: "Щом %{name} приеме ще можете да следите публикациите си в Diaspora"
+      add_new_aspect: "добавяне на нов аспект"
+      share_with: "Започнете да споделяте с %{name}"
+    zero: "няма контакти"
+  conversations: 
+    create: 
+      sent: "Съобщението е изпратено"
+    destroy: 
+      success: "Разговорът е премахнат успешно"
+    helper: 
+      new_messages: 
+        few: "%{count} нови съобщения"
+        many: "%{count} нови съобщения"
+        one: "1 ново съобщение"
+        other: "%{count} нови съобщения"
+        zero: "няма нови съобщения"
+    index: 
+      create_a_new_message: "създаване на съобщение"
+      inbox: "Входящи"
+      message_inbox: "Входяща кутия"
+      new_message: "Ново съобщение"
+      no_conversation_selected: "няма избран разговор"
+      no_messages: "няма съобщения"
+    new: 
+      send: "Изпращане"
+      subject: "тема"
+      to: "до"
+    show: 
+      delete: "изтриване и блокиране"
+      reply: "отговор"
+  date: 
+    formats: 
+      birthday: "%B %d"
+      birthday_with_year: "%B %d %Y"
+      fullmonth_day: "%B %d"
+  delete: "Изтриване"
+  email: "Ел. поща"
+  error_messages: 
+    helper: 
+      correct_the_following_errors_and_try_again: "Поправете следните грешки и опитайте отново."
+      invalid_fields: "Невалидни полета"
+  fill_me_out: "Попълнете ме"
+  hide: "Скриване"
+  home: 
+    show: 
+      already_account: "вече имате акаунт?"
+      choice: "Choice"
+      choice_explanation: "Diaspora предоставя възможност за сортиране на контактите в групи наречени аспекти. Те са уникална функция, която позволява споделянето на снимки, истории и шеги само с хората, за които са предвидени."
+      learn_about_host: "Научете как да стартирате Diaspora на собствен сървър."
+      login_here: "се впишете"
+      ownership: "Собственост"
+      ownership_explanation: "Вие притежавате снимките си и не е необходимо да се отказвате от това си право само за да ги споделите. Вие запазвате собствеността си върху всичко споделено в Diaspora - това ви осигурява контрол над разпространението."
+      share_what_you_want: "Споделяйте каквото желаете, с когото пожелаете."
+      simplicity: "Леснота"
+      simplicity_explanation: "Споделянето чрез Diaspora е просто и лесно. Характерно за Diaspora е че запазва личния ви живот поверителен без нужда от настройване различни страници с безброй опции."
+      tagline_first_half: "Споделете каквото желаете,"
+      tagline_second_half: "с когото пожелаете."
+  invitations: 
+    check_token: 
+      not_found: "Данните за поканата не са намерени"
+    create: 
+      already_contacts: "Вече сте свързани с тава лице"
+      already_sent: "Вече сте свързани с тава лице."
+      no_more: "Не разполагате с повече покани."
+      rejected: "The following email addresses had problems: "
+      sent: "Покани са изпратени до: "
+    edit: 
+      sign_up: "регистриране"
+    new: 
+      already_invited: "Вече е поканен"
+      aspect: "Аспект"
+      comma_seperated_plz: "Можете да въведете повече от една ел. поща като ги разделяте със запетаи."
+      if_they_accept_info: "ако приемат ще бъдат добавени към аспекта в който сте ги поканили."
+      invite_someone_to_join: "Поканете някой в Diaspora!"
+      personal_message: "Лично съобщение"
+      resend: "Повторно изпращане"
+      send_an_invitation: "Изпращане на поканата"
+      send_invitation: "Send invitation"
+      to: "До"
+  layouts: 
+    application: 
+      have_a_problem: "Имате проблем? Открийте решението тук"
+      powered_by: "POWERED BY DIASPORA*"
+      public_feed: "Public Diaspora Feed for %{name}"
+      toggle: "toggle mobile site"
+      whats_new: "какво ново?"
+      your_aspects: "вашите аспекти"
+    header: 
+      blog: "блог"
+      code: "код"
+      login: "Вписване"
+      logout: "отписване"
+      profile: "профил"
+      settings: "настройки"
+  likes: 
+    likes: 
+      people_dislike_this: 
+        few: "не е харесана от %{count} човека"
+        many: "не е харесана е от %{count} човека"
+        one: "не е харесана от 1 човек"
+        other: "не е харесана от %{count} човека"
+        zero: "всички са я харесали"
+      people_like_this: 
+        few: "харесана от %{count} човека"
+        many: "харесана от %{count} човека"
+        one: "1 person liked this"
+        other: "%{count} people liked this"
+        zero: "no people liked this"
+  more: "Още"
+  next: "next"
+  no_results: "Няма намерени резултати"
+  notifications: 
+    also_commented: "also commented on %{post_author}'s"
+    also_commented_deleted: "добави коментар на вече изтрита публикация"
+    comment_on_post: "коментира ваша"
+    deleted: "deleted"
+    helper: 
+      new_notifications: 
+        few: "%{count} нови известия"
+        many: "%{count} нови известия"
+        one: "1 ново известие"
+        other: "%{count} нови известия"
+        zero: "няма нови известия"
+    index: 
+      and: "и"
+      and_others: "и %{number} други"
+      mark_all_as_read: "Маркиране на всички като прочетени"
+      notifications: "Известия"
+    mentioned: "ви спомена в"
+    new_request: "ви предложи да споделяте."
+    post: "публикация"
+    private_message: "ви изпрати съобщение."
+    request_accepted: "прие поканата ви за споделяне."
+  notifier: 
+    also_commented: 
+      commented: "has also commented on %{post_author}'s post:"
+      sign_in: "Sign in to view it."
+      subject: "%{name} has also commented on %{post_author}'s post."
+    comment_on_post: 
+      commented: "has commented on your post:"
+      sign_in: "Sign in to view it."
+      subject: "%{name} коментира ваша публикация."
+    diaspora: "the diaspora email robot"
+    hello: "Здравейте %{name}!"
+    love: "love,"
+    manage_your_email_settings: "manage your email settings"
+    mentioned: 
+      mentioned: "ви спомена в публикация:"
+      sign_in: "Впишете се, за да я прегледате."
+      subject: "%{name} ви спомена в Diaspora*"
+    new_request: 
+      just_sent_you: "just sent you a contact request on Diaspora*"
+      sign_in: "Впишете се тук"
+      subject: "new Diaspora* contact request from %{from}"
+      try_it_out: "You should really think about checking it out."
+    private_message: 
+      message_subject: "Тема: %{subject}"
+      private_message: "ви изпрати лично съобщение:"
+      sign_in: "Впишете се, за да го прегледате."
+      subject: "%{name} ви изпрати лично съобщени в Diaspora*"
+    request_accepted: 
+      accepted: "has accepted your contact request!"
+      sign_in: "Впишете се тук"
+      subject: "%{name} has accepted your contact request on Diaspora*"
+    single_admin: 
+      admin: "Вашият администратор на Diaspora"
+      subject: "Съобщение относно акаунта ви в Diaspora:"
+    thanks: "Благодаря,"
+  ok: "Добре"
+  or: "или"
+  password: "Парола"
+  password_confirmation: "Потвърждаване на паролата"
+  people: 
+    add_contact_small: 
+      add_contact_from_tag: "add contact from tag"
+    aspect_list: 
+      edit_membership: "принадлежност към аспекти"
+    few: "%{count} човека"
+    helper: 
+      people_on_pod_are_aware_of: " people on pod are aware of"
+      results_for: " резултата за %{params}"
+    index: 
+      couldnt_find_them_send_invite: "Не можете да ги намерите?  Пратете им покана!"
+      no_one_found: "...и никой не е намерен."
+      no_results: "Hey! You need to search for something."
+      results_for: "резултат от търсенето за"
+    many: "%{count} човека"
+    one: "1 човек"
+    other: "%{count} човека"
+    person: 
+      add_contact: "добавяне на контакт"
+      already_connected: "Вече сте свързани"
+      pending_request: "Pending request"
+      thats_you: "Това сте вие!"
+    profile_sidebar: 
+      bio: "биографични данни"
+      born: "рожден ден"
+      cannot_remove: "Лицето %{name} не може да бъде премахнато от последния аспект. (Ако желаете да бъде прекратена връзката с лицето е необходимо да премахнете контакта.)"
+      edit_my_profile: "Редактирайте профилът си"
+      gender: "пол"
+      in_aspects: "in aspects"
+      location: "местоположние"
+      remove_contact: "премахване на контакт"
+      remove_from: "Премахване на %{name} от %{aspect}?"
+    show: 
+      add_some: "add some"
+      does_not_exist: "Person does not exist!"
+      edit: "edit"
+      incoming_request: "%{name} желае да споделя с вас"
+      mention: "Mention"
+      message: "Съобщение"
+      no_posts: "няма публикации за изобразяване!"
+      not_connected: "Вие не споделяте с лицето"
+      recent_posts: "Скорошни публикации"
+      recent_public_posts: "Скорошни публични публикации"
+      return_to_aspects: "Назад към страницата с аспекти"
+      see_all: "Вижте всички"
+      start_sharing: "започнете да споделяте"
+      to_accept_or_ignore: "to accept or ignore it."
+      you_have_no_tags: "you have no tags!"
+    webfinger: 
+      fail: "За съжаление %{handle} не може да бъде намерен."
+    zero: "няма хора"
+  photos: 
+    create: 
+      integrity_error: "Снимката не бе качена. Сигурни ли сте, че сте избрали изображение?"
+      runtime_error: "Снимката не бе качена. Сигурни ли сте, че сте закопчали колана си?"
+      type_error: "Снимката не бе качена. Сигурни ли сте, че е добавено изображение?"
+    destroy: 
+      notice: "Снимката е изтрита."
+    edit: 
+      editing: "Редактиране"
+    new: 
+      back_to_list: "Назад към списъка"
+      new_photo: "Нова снимка"
+      post_it: "публикуване!"
+    new_photo: 
+      empty: "{file} е празен. Моля, изберете наново файловете без празния."
+      invalid_ext: "{file} е с невалидно разширение. Позволени са само: {extensions}."
+      size_error: "{file} е твърде голям. Максималният разрешен размер е {sizeLimit}."
+    new_profile_photo: 
+      or_select_one: "или изберете една от вашите (вече качени)"
+      upload: "Качете нова снимка за профила!"
+    photo: 
+      view_all: "всички снимки на %{name}"
+    show: 
+      collection_permalink: "collection permalink"
+      delete_photo: "Изтриване на изображение"
+      edit: "редактиране"
+      edit_delete_photo: "Редактиране на описанието / изтриване"
+      make_profile_photo: "ползване като профилна снимка"
+      original_post: "Оригинална публикация"
+      permalink: "permalink"
+      update_photo: "Update Photo"
+      view: "view"
+    update: 
+      error: "Снимката не бе изтрита."
+      notice: "Photo successfully updated."
+  post_visibilites: 
+    update: 
+      post_hidden: "Публикацията на %{name} е скрита."
+  posts: 
+    doesnt_exist: "публикацията не съществува!"
+  previous: "previous"
+  profile: "Профил"
+  profiles: 
+    edit: 
+      allow_search: "Разрешете търсенето в Diaspora за вас"
+      edit_profile: "Редактиране на профила"
+      first_name: "Собствено име"
+      last_name: "Фамилно име"
+      update_profile: "Обновяване на профила"
+      your_bio: "Биографични данни"
+      your_birthday: "Дата на раждане"
+      your_gender: "Пол"
+      your_location: "Местоположение"
+      your_name: "Име"
+      your_photo: "Снимка"
+      your_private_profile: "Вашият личен профил"
+      your_public_profile: "Вашият публичен профил"
+      your_tags: "Опишете се с до 5 #марки"
+      your_tags_placeholder: "например: #България #diaspora #фитнес #music"
+    update: 
+      failed: "Failed to update profile"
+      updated: "Profile updated"
+  registrations: 
+    closed: "Signups are closed on this Diaspora pod."
+    create: 
+      success: "Вие се присъединихте към Diaspora!"
+    edit: 
+      cancel_my_account: "Cancel my account"
+      edit: "Edit %{name}"
+      leave_blank: "(оставете празно ако не желаете да го променяте)"
+      password_to_confirm: "(за да бъдат потвърдени промените е необходима текущата ви парола)"
+      unhappy: "Unhappy?"
+      update: "Update"
+    new: 
+      enter_email: "Въведете ел. поща"
+      enter_password: "Въведете парола"
+      enter_password_again: "Въведете отново същата парола"
+      enter_username: "Изберете си потребителско име (само букви, цифри и долна черта)"
+      sign_up: "Регистриране"
+      sign_up_for_diaspora: "Регистрирайте се в Diaspora"
+  requests: 
+    create: 
+      sending: "Изпращане"
+      sent: "You've asked to share with %{name}.  They should see it next time they log in to Diaspora."
+    destroy: 
+      error: "Моля, изберете аспект!"
+      ignore: "Ignored contact request."
+      success: "Сега споделяте."
+    helper: 
+      new_requests: 
+        few: "%{count} new requests!"
+        many: "%{count} new requests!"
+        one: "new request!"
+        other: "%{count} нови покани!"
+        zero: "няма нови покани"
+    manage_aspect_contacts: 
+      existing: "Съществуващи контакти"
+      manage_within: "Manage contacts within"
+    new_request_to_person: 
+      sent: "sent!"
+  search: "Търсене"
+  services: 
+    create: 
+      success: "Удостоверяването приключи успешно."
+    destroy: 
+      success: "Удостоверението е изтрито успешно."
+    failure: 
+      error: "възникна грешка при свързването с услугата"
+    finder: 
+      friends: 
+        few: "%{count} приятеля"
+        many: "%{count} приятеля"
+        one: "1 приятел"
+        other: "%{count} приятеля"
+        zero: "няма приятели"
+      invite_your_friends_from: "Поканете приятелите си от %{service}"
+      not_connected: "not connected"
+    index: 
+      connect_to_facebook: "Свързване с facebook"
+      connect_to_twitter: "Свързване с twitter"
+      disconnect: "изключване"
+      edit_services: "Редактиране на услугите"
+      logged_in_as: "вписани сте като"
+      really_disconnect: "изключване на свързаността с %{service}?"
+    inviter: 
+      click_link_to_accept_invitation: "Click this link to accept your invitation"
+      join_me_on_diaspora: "Join me on DIASPORA*"
+    remote_friend: 
+      invite: "invite"
+      resend: "resend"
+  settings: "Настройки"
+  shared: 
+    add_contact: 
+      create_request: "Търси по Diaspora адрес"
+      diaspora_handle: "diaspora@handle.org"
+      enter_a_diaspora_username: "Въведете потребителско име от Diaspora:"
+      know_email: "Знаете адресите на ел. им поща? Трябва да ги поканите"
+      your_diaspora_username_is: "Вашето потребителско име в Diaspora е %{diaspora_handle}"
+    contact_list: 
+      all_contacts: "Всички контакти"
+      cannot_remove: "Лицето не може да бъде премахнато от последния аспект. (Ако желаете да бъде прекратена връзката с лицето е необходимо да премахнете контакта.)"
+    footer: 
+      logged_in_as: "вписани сте като %{name}"
+      your_aspects: "вашите аспекти"
+    invitations: 
+      by_email: "по ел. поща"
+      dont_have_now: "За момента не разполагате с покани, но скоро ще имате!"
+      from_facebook: "От Facebook"
+      invitations_left: "(остават още %{count})"
+      invite_someone: "Поканете някого"
+      invite_your_friends: "Намерете приятелите си"
+      invites: "Покани"
+      invites_closed: "Invites are currently closed on this Diaspora pod"
+    notification: 
+      new: "New %{type} from %{from}"
+    public_explain: 
+      logged_in: "вписани сте в %{service}"
+      manage: "управление на свързаните услуги"
+      outside: "Публичните съобщения ще са видими и за хора извън Diaspora."
+      title: "Настройте свързване с услуга"
+    publisher: 
+      add_photos: "добавете снимки"
+      all: "всички"
+      all_contacts: "всички контакти"
+      click_to_share_with: "Кликнете, за да споделите: "
+      make_public: "направете публично"
+      post_a_message_to: "Публикувайте публично съобяение в %{aspect}"
+      posting: "Публикуване..."
+      public: "Публично"
+      publishing_to: "публикуване в: "
+      share: "Споделете"
+      share_with: "споделяне с"
+      whats_on_your_mind: "какво мислите?"
+    reshare: 
+      reshare: "споделяне с"
+    stream_element: 
+      dislike: "Не ми харесва"
+      like: "Харесва ми"
+  status_messages: 
+    create: 
+      success: "Successfully mentioned: %{names}"
+    destroy: 
+      failure: "Публикацията не бе изтрита"
+    helper: 
+      no_message_to_display: "Няма съобщение за изобразяване."
+    new: 
+      mentioning: "Mentioning: %{person}"
+    show: 
+      destroy: "Изтриване"
+      not_found: "За съжаление публикацията не може да бъде намерена."
+      permalink: "permalink"
+  stream_helper: 
+    hide_comments: "скриване на коментарите"
+    show_comments: "всички коментари"
+  tags: 
+    show: 
+      nobody_talking: "Никой не е говорил за %{tag}."
+      people_tagged_with: "Хора маркирани с %{tag}"
+      posts_tagged_with: "Публикации с марка #%{tag}"
+  the_world: "светът"
+  undo: "Отмяна?"
+  username: "Потребителско име"
+  users: 
+    destroy: "Акаунтът е затворен успешно."
+    edit: 
+      also_commented: "...някой коментира публикация на ваш контакт?"
+      change: "Промяна"
+      change_language: "Промяна на езика"
+      change_password: "Промяна на паролата"
+      close_account: "Затваряне на акаунта"
+      comment_on_post: "...някой коментира ваша публикация?"
+      current_password: "Текуща парола"
+      download_photos: "снимките ви"
+      download_xml: "данните ви (XML формат)"
+      edit_account: "Редактиране на акаунта"
+      export_data: "Сваляне на..."
+      mentioned: "...бъдете споменат в публикация?"
+      new_password: "Нова парола"
+      private_message: "...получите лично съобщение?"
+      receive_email_notifications: "Получаване на известие по ел. поща когато..."
+      request_acceptence: "...бъде приета отправена от вас покана за споделяне?"
+      request_received: "...получите покана за споделяне?"
+      your_email: "Вашата ел. поща"
+      your_handle: "Вашият адрес в Diaspora"
+    getting_started: 
+      connect_on_diaspora: "Connect on Diaspora"
+      connect_services: "Свързване към други услуги"
+      could_not_find_anyone: "Could not find any friends on Diaspora*. Use the friend finder to invite them."
+      edit_profile: "Edit your profile"
+      finished: "Готово!"
+      save_and_continue: "Запиши и продължи"
+      signup_steps: "Finish your sign up by completing these three steps:"
+      skip: "прескачане на страницата"
+      step_2: 
+        find_your_friends_on_diaspora: "Желаете ли да намерите приятелите си от Facebook в Diaspora?"
+        skip: "Skip"
+      step_3: 
+        finish: "Готово"
+        people_already_on_diaspora: "Хора, които вече са в Diaspora"
+      welcome: "Добре дошли в Diaspora!"
+    public: 
+      does_not_exist: "Потребителят %{username} не съществува!"
+    update: 
+      email_notifications_changed: "Адресът за известяване е променен"
+      language_changed: "Езикът е сменен"
+      language_not_changed: "Езикът не бе променен"
+      password_changed: "Паролата е променена"
+      password_not_changed: "Паролата не бе променена"
+  webfinger: 
+    fetch_failed: "failed to fetch webfinger profile for %{profile_url}"
+    hcard_fetch_failed: "there was a problem fetching the hcard for %{account}"
+    no_person_constructed: "No person could be constructed from this hcard."
+    not_enabled: "webfinger does not seem to be enabled for %{account}'s host"
+    xrd_fetch_failed: "there was an error getting the xrd from account %{account}"
diff --git a/config/locales/diaspora/br.yml b/config/locales/diaspora/br.yml
index d3034bb99ea4b1cfed25ec562071aa8d4656b17e..d80de325c4a009a05a89c458c64df0a611fe6230 100644
--- a/config/locales/diaspora/br.yml
+++ b/config/locales/diaspora/br.yml
@@ -52,7 +52,7 @@ br:
     aspect_contacts: 
       done_editing: "done editing"
     aspect_stream: 
-      activity: "activity"
+      activity: "oberiantiz"
       post_time: "post time"
       sort_by: "diskouezh hervez:"
     contacts_not_visible: "Contacts in this aspect will not be able to see each other."
@@ -80,7 +80,7 @@ br:
       aspect_not_empty: "Aspect not empty"
       remove: "skarzhañ"
     index: 
-      handle_explanation: "This is your diaspora handle. Like an email address, you can give this to people to reach you."
+      handle_explanation: "Ar postel-mañ zo ho skor diaspora. E-giz ur chomlec'h-postel e c'hellit skignat anezhañ a-benn bezañ kavet gant an dud."
       no_contacts: "Darempred ebet"
       post_a_message: "post a message >>"
     manage: 
@@ -266,7 +266,7 @@ br:
       and_others: "ha %{number} reoù all"
       mark_all_as_read: "Mark All as Read"
       notifications: "Notifications"
-    mentioned: "has mentioned you in their"
+    mentioned: "en deus meneget ac'hanoc'h e-barzh ur skrid"
     new_request: "offered to share with you."
     post: "post"
     private_message: "sent you a message."
@@ -354,12 +354,12 @@ br:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "to accept or ignore it."
       you_have_no_tags: "you have no tags!"
     webfinger: 
-      fail: "Sorry, we couldn't find %{handle}."
+      fail: "Siwazh, n'eus ket moaien kavout %{handle}."
     zero: "den ebet"
   photos: 
     create: 
@@ -494,7 +494,7 @@ br:
   settings: "Settings"
   shared: 
     add_contact: 
-      create_request: "Find by Diaspora handle"
+      create_request: "Klask diwar ar skor Diaspora"
       diaspora_handle: "diaspora@handle.org"
       enter_a_diaspora_username: "Enter a Diaspora username:"
       know_email: "Know their email address? You should invite them"
@@ -584,7 +584,7 @@ br:
       request_acceptence: "...your share request is accepted?"
       request_received: "...you receive a new share request?"
       your_email: "Ho postel"
-      your_handle: "Your diaspora handle"
+      your_handle: "Ho skor diaspora"
     getting_started: 
       connect_on_diaspora: "Connect on Diaspora"
       connect_services: "Connect your other services"
@@ -596,7 +596,7 @@ br:
       skip: "skip getting started"
       step_2: 
         find_your_friends_on_diaspora: "Would you like to find your Facebook friends on Diaspora?"
-        skip: "Skip"
+        skip: "Tremen e-biou"
       step_3: 
         finish: "Echuiñ"
         people_already_on_diaspora: "People already on Diaspora"
diff --git a/config/locales/diaspora/ca.yml b/config/locales/diaspora/ca.yml
index 43aee2cf30992d40472550f9c8d08cbd433d0833..36e3b408031dbd46ebd4f5ea5be1d55e237068ed 100644
--- a/config/locales/diaspora/ca.yml
+++ b/config/locales/diaspora/ca.yml
@@ -301,7 +301,7 @@ ca:
     private_message: "us ha enviat un missatge."
     comment_on_post: "ha comentat la vostra"
     also_commented: "also commented on your contact's"
-    mentioned: "us ha mencionat a la seva"
+    mentioned: "us ha mencionat a una publicació"
     post: "publicació"
     deleted: "suprimida"
     also_commented_deleted: "ha comentat una publicació suprimida"
@@ -386,8 +386,7 @@ ca:
       not_connected: "No esteu compartint amb aquesta persona"
       recent_posts: "Publicacions recents"
       recent_public_posts: "Publicacions públiques recents"
-      similar_contacts: "contactes similars"
-      start_sharing: "comença a compartir"
+      see_all: "Visualitza'ls tots"
       message: "Envia-li un missatge"
       mention: "Menciona'l"
     profile_sidebar:
@@ -582,7 +581,7 @@ ca:
     reshare:
       reshare: "Torna a compartir"
     public_explain:
-      title: "Esteu a punt de publicar un missatge públic!"
+      title: "Configureu els serveis connectats"
       outside: "Els missatges públics seran visibles per qualsevol des de fora del Diàspora."
       logged_in: "s'ha entrat en %{service}"
       manage: "gestiona els serveis connectats"
diff --git a/config/locales/diaspora/cs.yml b/config/locales/diaspora/cs.yml
index af3d2113f2207d16f998700316e07ad85fdd6b47..b8336a00af69a78038859e4f2be6823635d092b9 100644
--- a/config/locales/diaspora/cs.yml
+++ b/config/locales/diaspora/cs.yml
@@ -228,7 +228,7 @@ cs:
     header: 
       blog: "blog"
       code: "kód"
-      login: "přihlášení"
+      login: "přihlásit"
       logout: "odhlásit"
       profile: "profil"
       settings: "nastavení"
@@ -251,7 +251,7 @@ cs:
   no_results: "Nebyly nalezeny žádné výsledky"
   notifications: 
     also_commented: "také komentoval v %{post_author}"
-    also_commented_deleted: "komentován smazaný příspěvek"
+    also_commented_deleted: "komentoval ve smazaném příspěvku"
     comment_on_post: "komentoval váš"
     deleted: "smazáno"
     helper: 
@@ -266,7 +266,7 @@ cs:
       and_others: "a %{number} dalších"
       mark_all_as_read: "Označit vše jako přečtené"
       notifications: "Oznámení"
-    mentioned: "vás zmínil v jejich"
+    mentioned: "vás zmínil v příspěvku"
     new_request: "nabídnul vám sdílení."
     post: "zpráva"
     private_message: "vám poslal zprávu."
@@ -354,7 +354,7 @@ cs:
       recent_posts: "Poslední příspěvky"
       recent_public_posts: "Poslední veřejné příspěvky"
       return_to_aspects: "Návrat na vaši stránku s aspekty"
-      similar_contacts: "podobné kontakty"
+      see_all: "Zobrazit všechno"
       start_sharing: "začít sdílet"
       to_accept_or_ignore: "přijmout nebo ignorovat."
       you_have_no_tags: "nemáte žádné značky!"
@@ -520,7 +520,7 @@ cs:
       logged_in: "přihlášen do %{service}"
       manage: "upravit připojené služby"
       outside: "Veřejné příspěvky budou dostupné pro ostatní mimo Diasporu."
-      title: "Chystáte se poslat veřejnou zprávu!"
+      title: "Nastavit související služby"
     publisher: 
       add_photos: "přidat fotky"
       all: "všechny"
diff --git a/config/locales/diaspora/cy.yml b/config/locales/diaspora/cy.yml
index 3e60d58125a59be062d40c0d6a9f00bab5ea76d3..074d2cc6341fa631df2245e64de730d6a4c4992b 100644
--- a/config/locales/diaspora/cy.yml
+++ b/config/locales/diaspora/cy.yml
@@ -354,7 +354,7 @@ cy:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "to accept or ignore it."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/da.yml b/config/locales/diaspora/da.yml
index 647eb553cd33676f7d59c8bb44b07482a70dc2ea..869e56acb9512f6297ee4e8991d7d9d706eee57f 100644
--- a/config/locales/diaspora/da.yml
+++ b/config/locales/diaspora/da.yml
@@ -82,7 +82,7 @@ da:
     index: 
       handle_explanation: "Dette er dit diaspora handle. Som med en e-mail-adresse, kan du give denne til folk, så de kan kontakte dig."
       no_contacts: "Ingen kontakter"
-      post_a_message: "post a message >>"
+      post_a_message: "post en besked >>"
     manage: 
       add_a_new_aspect: "Tilføj et nyt aspekt"
       add_a_new_contact: "Tilføj en ny kontaktperson"
@@ -113,10 +113,10 @@ da:
     zero: "ingen aspekter"
   back: "Tilbage"
   bookmarklet: 
-    explanation: "%{link} from anywhere by bookmarking this link."
+    explanation: "%{link} alle steder fra ved at bogmærke dette link."
     explanation_link_text: "Post på Diaspora"
-    post_something: "Post something to Diaspora"
-    post_success: "Posted! Closing!"
+    post_something: "Post noget til Diaspora"
+    post_success: "Posted! Lukker!"
   cancel: "Annullér"
   comments: 
     few: "%{count} kommentarer"
@@ -144,9 +144,9 @@ da:
     zero: "Ingen kontaktpersoner"
   conversations: 
     create: 
-      sent: "Message sent"
+      sent: "Meddelelse sendt"
     destroy: 
-      success: "Conversation successfully removed"
+      success: "Samtale slettet med succes"
     helper: 
       new_messages: 
         few: "%{count} nye beskeder"
@@ -180,7 +180,7 @@ da:
       correct_the_following_errors_and_try_again: "Ret følgende fejl og prøv igen."
       invalid_fields: "Ugyldige felter"
   fill_me_out: "Udfyld mig"
-  hide: "Hide"
+  hide: "Skjul"
   home: 
     show: 
       already_account: "har du allerede en konto?"
@@ -222,7 +222,7 @@ da:
       have_a_problem: "Har du et problem? Find svaret her"
       powered_by: "POWERED BY DIASPORA*"
       public_feed: "Offentligt Diaspora nyheds feed for  %{name}"
-      toggle: "toggle mobile site"
+      toggle: "skift mobil side"
       whats_new: "Hvad er nyt?"
       your_aspects: "dine aspekter"
     header: 
@@ -248,7 +248,7 @@ da:
         zero: "ingen personer kunne lide det"
   more: "Mere"
   next: "Næste"
-  no_results: "No Results Found"
+  no_results: "Ingen resultater fundet"
   notifications: 
     also_commented: "kommenterede også på %{post_author}'s"
     also_commented_deleted: "kommenterede på en slettet post"
@@ -354,7 +354,7 @@ da:
       recent_posts: "Nylige indlæg"
       recent_public_posts: "Seneste offentlige indlæg"
       return_to_aspects: "Tilbage til aspektsoversigt"
-      similar_contacts: "lignende kontakter"
+      see_all: "Se alle"
       start_sharing: "begynd at dele"
       to_accept_or_ignore: "at godkende eller ignorere det."
       you_have_no_tags: "du har ingen tags!"
@@ -398,7 +398,7 @@ da:
       notice: "Billedet blev opdateret."
   post_visibilites: 
     update: 
-      post_hidden: "%{name}'s post has been hidden."
+      post_hidden: "%{name}'s post er blevet skjult."
   posts: 
     doesnt_exist: "den post eksisterer ikke!"
   previous: "Forrige"
@@ -503,8 +503,8 @@ da:
       all_contacts: "Alle kontaktpersoner"
       cannot_remove: "Kan ikke fjerne person fra sidste aspekt."
     footer: 
-      logged_in_as: "logged in as %{name}"
-      your_aspects: "your aspects"
+      logged_in_as: "logget ind som %{name}"
+      your_aspects: "Dine aspekter"
     invitations: 
       by_email: "vha. Email"
       dont_have_now: "Du har ikke nogen lige nu, men der kommer snart flere invitationer!"
@@ -561,7 +561,7 @@ da:
       people_tagged_with: "Personer tagged med %{tag}"
       posts_tagged_with: "Poster tagged med #%{tag}"
   the_world: "Verden"
-  undo: "Undo?"
+  undo: "Fortryd?"
   username: "Brugernavn"
   users: 
     destroy: "Kontoen er nu lukket."
diff --git a/config/locales/diaspora/de.yml b/config/locales/diaspora/de.yml
index e480596658a3ceb3e954e94dc30bfd5f609e3ae4..0d57f8490f4666a4360c9474358c69cf9acd1d01 100644
--- a/config/locales/diaspora/de.yml
+++ b/config/locales/diaspora/de.yml
@@ -266,7 +266,7 @@ de:
       and_others: "und %{number} andere"
       mark_all_as_read: "Markiere alle als gelesen"
       notifications: "Benachrichtigungen"
-    mentioned: "hat dich erwähnt in "
+    mentioned: "hat dich in einem Beitrag erwähnt"
     new_request: "hat angeboten mit dir zu teilen."
     post: "Beitrag"
     private_message: "hat dir eine Nachricht gesendet."
@@ -354,7 +354,7 @@ de:
       recent_posts: "Neueste Beiträge"
       recent_public_posts: "Neueste öffentliche Beiträge"
       return_to_aspects: "Kehre zur Aspekt-Übersicht zurück."
-      similar_contacts: "ähnliche Kontakte"
+      see_all: "Alle zeigen"
       start_sharing: "Fang an zu teilen!"
       to_accept_or_ignore: "um zu akzeptieren oder zu ignorieren."
       you_have_no_tags: "Du hast keine Tags!"
@@ -520,7 +520,7 @@ de:
       logged_in: "Eingeloggt in %{service}"
       manage: "verbundene Dienste verwalten"
       outside: "Öffentliche Nachrichten sind für andere außerhalb von Diaspora sichtbar."
-      title: "Du bist dabei, eine öffentliche Nachricht zu posten!"
+      title: "Verbundene Dienste verwalten"
     publisher: 
       add_photos: "Fotos hinzufügen"
       all: "alle"
@@ -573,8 +573,8 @@ de:
       close_account: "Konto schließen"
       comment_on_post: "… jemand deinen Beitrag kommentiert hat?"
       current_password: "Derzeitiges Passwort"
-      download_photos: "Meine Fotos herunterladen"
-      download_xml: "Meine Daten herunterladen (XML)"
+      download_photos: "Fotos herunterladen"
+      download_xml: "Daten herunterladen (XML)"
       edit_account: "Konto bearbeiten"
       export_data: "Daten exportieren"
       mentioned: "… du in einem Beitrag erwähnt wirst?"
diff --git a/config/locales/diaspora/el.yml b/config/locales/diaspora/el.yml
index b4225e33a07d628150f93e269b342d085f77d8a9..f57f9456ecd7dbf864e895942f190c2527be6a69 100644
--- a/config/locales/diaspora/el.yml
+++ b/config/locales/diaspora/el.yml
@@ -343,7 +343,7 @@ el:
       remove_contact: "αφαίρεση επαφής"
       remove_from: "Αφαίρεση του χρήστη %{name} από τη πτυχή %{aspect}?"
     show: 
-      add_some: "προσθέστε κάποιον"
+      add_some: "προσθέστε κάποιες"
       does_not_exist: "Ο/Η χρήστης δεν υπάρχει!"
       edit: "επεξεργασία"
       incoming_request: "Ο/Η %{name} θέλει να μοιραστεί μαζί σας"
@@ -354,7 +354,7 @@ el:
       recent_posts: "Πρόσφατες δημοσιεύσεις"
       recent_public_posts: "Πρόσφατες Δημόσιες Δημοσιεύσεις"
       return_to_aspects: "Επιστροφή στη σελίδα με τις πτυχές σας"
-      similar_contacts: "παρόμοιες επαφές"
+      see_all: "Εμφάνιση όλων"
       start_sharing: "ξεκινήσετε την κοινή χρήση"
       to_accept_or_ignore: "να το αποδεχθεί ή να το αγνοήσει."
       you_have_no_tags: "δεν έχετε ετικέτες!"
diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml
index fe501ff2928872e3c474f111ee37536bbf3e51e4..0711255634c8a159cdf68398452740c2ce6bd1b0 100644
--- a/config/locales/diaspora/en.yml
+++ b/config/locales/diaspora/en.yml
@@ -254,9 +254,9 @@ en:
     header:
       profile: "profile"
       settings: "settings"
-      logout: "logout"
+      logout: "log out"
       blog: "blog"
-      login: "login"
+      login: "log in"
       code: "code"
     application:
       powered_by: "POWERED BY DIASPORA*"
@@ -287,10 +287,10 @@ en:
     private_message: "sent you a message."
     comment_on_post: "commented on your"
     also_commented: "also commented on %{post_author}'s"
-    mentioned: "has mentioned you in a post"
-    post: "post"
+    mentioned: "has mentioned you in a "
+    post: "post."
     deleted: "deleted"
-    also_commented_deleted: "commented on a deleted post"
+    also_commented_deleted: "commented on a deleted post."
     index:
       notifications: "Notifications"
       mark_all_as_read: "Mark All as Read"
@@ -365,7 +365,7 @@ en:
       not_connected: "You are not sharing with this person"
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       message: "Message"
       mention: "Mention"
@@ -553,7 +553,7 @@ en:
     reshare:
       reshare: "Reshare"
     public_explain:
-      title: "You are about to post a public message!"
+      title: "Set up connected services"
       outside: "Public messages will be available for others outside of Diaspora to see."
       logged_in: "logged in to %{service}"
       manage: "manage connected services"
diff --git a/config/locales/diaspora/en_shaw.yml b/config/locales/diaspora/en_shaw.yml
index 50f8bd40f2363d50ec21a25b45c6b2ea04df68d0..b2a396ffed29533c8438ec359779bd291a4975aa 100644
--- a/config/locales/diaspora/en_shaw.yml
+++ b/config/locales/diaspora/en_shaw.yml
@@ -266,7 +266,7 @@ en_shaw:
       and_others: "𐑯 %{number} 𐑳𐑞𐑼𐑟"
       mark_all_as_read: "𐑥𐑸𐑒 𐑷𐑤 𐑨𐑟 𐑮𐑧𐑛"
       notifications: "𐑯𐑴𐑑𐑦𐑓𐑦𐑒𐑱𐑖𐑩𐑯𐑟"
-    mentioned: "𐑣𐑨𐑟 𐑥𐑧𐑯𐑖𐑩𐑯𐑛 𐑿 𐑦𐑯 𐑞𐑺"
+    mentioned: "𐑣𐑨𐑟 𐑥𐑧𐑯𐑖𐑩𐑯𐑛 𐑿 𐑦𐑯 𐑩 𐑐𐑴𐑕𐑑"
     new_request: "𐑪𐑓𐑼𐑛 𐑑 𐑖𐑺 𐑢𐑦𐑞 𐑿."
     post: "𐑐𐑴𐑕𐑑"
     private_message: "𐑕𐑧𐑯𐑑 𐑿 𐑩 𐑥𐑧𐑕𐑩𐑡."
@@ -354,7 +354,7 @@ en_shaw:
       recent_posts: "𐑮𐑰𐑕𐑩𐑯𐑑 𐑐𐑴𐑕𐑑𐑕"
       recent_public_posts: "𐑮𐑰𐑕𐑩𐑯𐑑 𐑐𐑳𐑚𐑤𐑦𐑒 𐑐𐑴𐑕𐑑𐑕"
       return_to_aspects: "𐑮𐑦𐑑𐑻𐑯 𐑑 𐑿𐑼 𐑨𐑕𐑐𐑧𐑒𐑑𐑕 𐑐𐑱𐑡"
-      similar_contacts: "𐑕𐑦𐑥𐑦𐑤𐑼 𐑒𐑪𐑯𐑑𐑨𐑒𐑑𐑕"
+      see_all: "𐑕𐑰 𐑷𐑤"
       start_sharing: "𐑕𐑑𐑸𐑑 𐑖𐑺𐑦𐑙"
       to_accept_or_ignore: "𐑑 𐑩𐑒𐑕𐑧𐑐𐑑 𐑹 𐑦𐑜𐑯𐑹 𐑦𐑑."
       you_have_no_tags: "𐑿 𐑣𐑨𐑝 𐑯𐑴 𐑑𐑨𐑜𐑟!"
@@ -520,7 +520,7 @@ en_shaw:
       logged_in: "𐑤𐑪𐑜𐑛 𐑦𐑯 𐑑 %{service}"
       manage: "𐑥𐑨𐑯𐑩𐑡 𐑒𐑩𐑯𐑧𐑒𐑑𐑩𐑛 𐑕𐑻𐑝𐑦𐑕𐑩𐑟"
       outside: "𐑐𐑳𐑚𐑤𐑦𐑒 𐑥𐑧𐑕𐑩𐑡𐑩𐑟 𐑢𐑦𐑤 𐑚𐑰 𐑩𐑝𐑱𐑤𐑩𐑚𐑩𐑤 𐑓𐑹 𐑳𐑞𐑼𐑟 𐑬𐑑𐑕𐑲𐑛 𐑝 ·𐑛𐑦𐑨𐑕𐑐𐑹𐑩 𐑑 𐑕𐑰."
-      title: "𐑿 𐑸 𐑩𐑚𐑬𐑑 𐑑 𐑐𐑴𐑕𐑑 𐑩 𐑐𐑳𐑚𐑤𐑦𐑒 𐑥𐑧𐑕𐑩𐑡!"
+      title: "𐑕𐑧𐑑 𐑳𐑐 𐑒𐑩𐑯𐑧𐑒𐑑𐑩𐑛 𐑕𐑻𐑝𐑦𐑕𐑩𐑟"
     publisher: 
       add_photos: "𐑨𐑛 𐑓𐑴𐑑𐑴𐑟"
       all: "𐑷𐑤"
diff --git a/config/locales/diaspora/eo.yml b/config/locales/diaspora/eo.yml
index d01b9105db6c8be560cc30933e7924bedfe89aa9..25c00ea8692836a824ce1ffa01a1c3384762f988 100644
--- a/config/locales/diaspora/eo.yml
+++ b/config/locales/diaspora/eo.yml
@@ -354,7 +354,7 @@ eo:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "to accept or ignore it."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/es-CL.yml b/config/locales/diaspora/es-CL.yml
index 06de1f90089141500ae0d244f98238670810b4ce..907d71d1ea3d8abfcdaa88050f447dbcf68cae15 100644
--- a/config/locales/diaspora/es-CL.yml
+++ b/config/locales/diaspora/es-CL.yml
@@ -266,7 +266,7 @@ es-CL:
       and_others: "y otros %{number}"
       mark_all_as_read: "Marcar todo como leido"
       notifications: "Notificaciones"
-    mentioned: "te mencionó en su"
+    mentioned: "te mencionó en un post"
     new_request: "quiere compartir contigo."
     post: "post"
     private_message: "te envió un mensaje."
@@ -354,7 +354,7 @@ es-CL:
       recent_posts: "Posteos Recientes"
       recent_public_posts: "Posteos Públicos Recientes"
       return_to_aspects: "Volver a tu página de aspectos"
-      similar_contacts: "Contactos similares"
+      see_all: "Ver todos"
       start_sharing: "Empezar a compartir"
       to_accept_or_ignore: "aceptar o ignorar."
       you_have_no_tags: "No tienes ninguna etiqueta!"
@@ -520,7 +520,7 @@ es-CL:
       logged_in: "entrar a %{service}"
       manage: "manejar los servicios conectados"
       outside: "Los mensajes públicos estarán disponibles para que otros fuera de Diaspora los puedan ver."
-      title: "¡Estás a punto de postear un mensaje público!"
+      title: "Configurar los servicios conectados"
     publisher: 
       add_photos: "agregar fotos"
       all: "todo"
diff --git a/config/locales/diaspora/es.yml b/config/locales/diaspora/es.yml
index 66be51f6e1d56e25963ddd01e06f60c7ca78dfca..2eed19d3ff05ea50c157152cb6bd358241452bb8 100644
--- a/config/locales/diaspora/es.yml
+++ b/config/locales/diaspora/es.yml
@@ -42,59 +42,59 @@ es:
   are_you_sure: "¿Estás seguro?"
   aspect_memberships: 
     destroy: 
-      failure: "No se pudo eliminar a la persona del Aspecto"
-      no_membership: "No se pudo encontrar a la persona seleccionada en ese Aspecto"
-      success: "Persona eliminada con éxito del Aspecto"
+      failure: "No se pudo eliminar a la persona del aspecto"
+      no_membership: "No se pudo encontrar a la persona seleccionada en ese aspecto"
+      success: "Persona eliminada con éxito del aspecto"
   aspects: 
     add_to_aspect: 
-      failure: "Error añadiendo el contacto al Aspecto."
-      success: "Contacto añadido con éxito al Aspecto."
+      failure: "Error añadiendo el contacto al aspecto."
+      success: "Contacto añadido con éxito al aspecto."
     aspect_contacts: 
       done_editing: "Aceptar"
     aspect_stream: 
       activity: "actividad"
       post_time: "fecha de publicación"
       sort_by: "ordenar por:"
-    contacts_not_visible: "Los contactos de este Aspecto no podrán verse."
-    contacts_visible: "Los contactos de este Aspecto podrán verse."
+    contacts_not_visible: "Los contactos de este aspecto no podrán verse."
+    contacts_visible: "Los contactos de este aspecto podrán verse."
     create: 
-      failure: "Error creando el Aspecto."
-      success: "Tu nuevo Aspecto %{name} fue creado."
+      failure: "Error creando el aspecto."
+      success: "Tu nuevo aspecto %{name} fue creado."
     destroy: 
       failure: "El aspecto %{name} no está vacío y no pudo ser borrado."
       success: "%{name} fue eliminado con éxito."
     edit: 
       add_existing: "Añadir un contacto existente."
-      aspect_list_is_not_visible: "Lista de contactos oculta para los demás en el Aspecto"
-      aspect_list_is_visible: "Lista de contactos visible para los demás en el Aspecto"
-      confirm_remove_aspect: "¿Seguro que quieres eliminar este Aspecto?"
+      aspect_list_is_not_visible: "la lista de contactos del aspecto está ocultada"
+      aspect_list_is_visible: "la lista de contactos del aspecto es visible"
+      confirm_remove_aspect: "¿Seguro que quieres eliminar este aspecto?"
       done: "Listo"
-      make_aspect_list_visible: "Hacer visible la lista de contactos en el Aspecto."
-      remove_aspect: "Eliminar este Aspecto"
+      make_aspect_list_visible: "Lista de contactos visible."
+      remove_aspect: "Eliminar este aspecto"
       rename: "renombrar"
       update: "Actualizar"
       updating: "actualizando"
     few: "%{count} aspectos"
     helper: 
-      are_you_sure: "¿Seguro que quieres eliminar este Aspecto?"
-      aspect_not_empty: "El Aspecto no está vacío"
+      are_you_sure: "¿Seguro que quieres eliminar este aspecto?"
+      aspect_not_empty: "El aspecto no está vacío"
       remove: "eliminar"
     index: 
       handle_explanation: "Ésta es tu dirección Diaspora*. Como una dirección de correo, puedes dársela a la gente para que te encuentren."
       no_contacts: "No hay contactos"
       post_a_message: "publica un mensaje >>"
     manage: 
-      add_a_new_aspect: "Añadir nuevo Aspecto"
+      add_a_new_aspect: "Añadir nuevo aspecto"
       add_a_new_contact: "Añadir nuevo contacto"
       drag_to_add: "Arrastrar para añadir"
-      manage_aspects: "Gestionar Aspectos"
+      manage_aspects: "Gestión de aspectos"
       no_requests: "No hay nuevas solicitudes"
       requests: "Solicitudes"
     many: "%{count} aspectos"
     move_contact: 
       error: "Error moviendo el contacto: %{inspect}"
       failure: "%{inspect} no funcionó"
-      success: "Contacto movido al nuevo Aspecto"
+      success: "El contacto fue movido al nuevo aspecto"
     new_aspect: 
       create: "Crear"
       name: "Nombre"
@@ -106,10 +106,10 @@ es:
       family: "Familia"
       work: "Trabajo"
     show: 
-      edit_aspect: "editar Aspecto"
+      edit_aspect: "editar aspecto"
     update: 
-      failure: "Tu Aspecto, %{name}, tenía un nombre demasiado largo para guardarlo."
-      success: "Tu Aspecto, %{name}, fue editado con éxito."
+      failure: "Tu aspecto, %{name}, tenía un nombre muy largo para guardarlo."
+      success: "Tu aspecto, %{name}, fue editado con éxito."
     zero: "no hay aspectos"
   back: "Atrás"
   bookmarklet: 
@@ -139,7 +139,7 @@ es:
     other: "%{count} contactos"
     share_with_pane: 
       accepts: "Una vez que %{name} acepte, veras sus demás publicaciones en Diaspora*"
-      add_new_aspect: "añadir nuevo Aspecto"
+      add_new_aspect: "añadir nuevo aspecto"
       share_with: "Empezar a compartir con %{name}"
     zero: "no hay contactos"
   conversations: 
@@ -185,7 +185,7 @@ es:
     show: 
       already_account: "¿Todavía no tienes una cuenta?"
       choice: "Elección"
-      choice_explanation: "Diaspora* te permite organizar conexiones en grupos llamados Aspectos. En Diaspora*, los Aspectos aseguran que tus fotos, historias y bromas sean compartidas sólo con la gente que tu quieras."
+      choice_explanation: "Diaspora* te permite organizar conexiones en grupos llamados aspectos. En Diaspora*, los aspectos aseguran que tus fotos, historias y bromas sean compartidas sólo con la gente que tu quieras."
       learn_about_host: "Aprende acerca de cómo hostear tu propio servidor Diaspora*."
       login_here: "conectar aquí"
       ownership: "propiedad"
@@ -210,7 +210,7 @@ es:
       already_invited: "Ya invitado"
       aspect: "Aspecto"
       comma_seperated_plz: "Puedes escribir múltiples direcciones de correo separadas por comas."
-      if_they_accept_info: "Si aceptan, serán añadidos al Aspecto que selecciones."
+      if_they_accept_info: "Si aceptan, serán añadidos al aspecto que selecciones."
       invite_someone_to_join: "¡Invita a alguien a unirse a Diaspora*!"
       personal_message: "Mensaje Personal"
       resend: "Reenviado"
@@ -224,7 +224,7 @@ es:
       public_feed: "Canal público de %{name} "
       toggle: "cambiar sitio movil"
       whats_new: "Novedades en Diaspora*"
-      your_aspects: "Tus Aspectos"
+      your_aspects: "tus aspectos"
     header: 
       blog: "Blog"
       code: "Código"
@@ -252,7 +252,7 @@ es:
   notifications: 
     also_commented: "participó en la publicación de %{post_author}"
     also_commented_deleted: "participó en una publicación eliminada"
-    comment_on_post: "comentó en tu"
+    comment_on_post: "comentó tu"
     deleted: "eliminado"
     helper: 
       new_notifications: 
@@ -266,7 +266,7 @@ es:
       and_others: "y otros %{number}"
       mark_all_as_read: "Marcar todo como leído"
       notifications: "Notificaciones"
-    mentioned: "te nombró en su"
+    mentioned: "te mencionó en una"
     new_request: "quisiera compartir contigo."
     post: "publicación"
     private_message: "te envió un mensaje."
@@ -285,9 +285,9 @@ es:
     love: "¡Qué pasa!"
     manage_your_email_settings: "configura tu correo"
     mentioned: 
-      mentioned: "te nombró en una publicación:"
+      mentioned: "te mencionó en una publicación:"
       sign_in: "Conéctate para verlo."
-      subject: "%{name} te ha nombrado en Diaspora*"
+      subject: "%{name} te mencionó en Diaspora*"
     new_request: 
       just_sent_you: "acaban de enviarte una solicitud de contacto Diaspora*"
       sign_in: "Conéctate aquí"
@@ -314,7 +314,7 @@ es:
     add_contact_small: 
       add_contact_from_tag: "añadir contacto desde una etiqueta"
     aspect_list: 
-      edit_membership: "editar el Aspecto donde está el contacto"
+      edit_membership: "editar aspectos asociados"
     few: "%{count} personas"
     helper: 
       people_on_pod_are_aware_of: "La gente que está en POD son conscientes de"
@@ -335,10 +335,10 @@ es:
     profile_sidebar: 
       bio: "Biografía"
       born: "Fecha de Nacimiento"
-      cannot_remove: "%{name} no puede eliminarse del último Aspecto. (Si quieres dejar de compartir con él, debes elimínarlo.)"
+      cannot_remove: "%{name} no puede eliminarse del último aspecto. (Si quieres dejar de compartir, deberas eliminarlo.)"
       edit_my_profile: "Editar mi perfil"
       gender: "Género / Sexo"
-      in_aspects: "en Aspectos"
+      in_aspects: "en aspectos"
       location: "Ubicación "
       remove_contact: "eliminar contacto"
       remove_from: "¿Eliminar a %{name} de %{aspect}?"
@@ -353,8 +353,8 @@ es:
       not_connected: "No estás conectado con esta persona."
       recent_posts: "Últimas Publicaciones"
       recent_public_posts: "Últimas Publicaciones (El mundo)"
-      return_to_aspects: "Volver a tu página de Aspectos."
-      similar_contacts: "Contactos similares"
+      return_to_aspects: "Volver a tu página de aspectos"
+      see_all: "Ver todos"
       start_sharing: "Empezar a compartir"
       to_accept_or_ignore: "Aceptar o ignorar"
       you_have_no_tags: "¡No tienes etiquetas!"
@@ -446,7 +446,7 @@ es:
       sending: "Enviando"
       sent: "Quisieras compartir con %{name}. Lo verá la próxima vez que entre en Diaspora*."
     destroy: 
-      error: "¡Selecciona un Aspecto!"
+      error: "¡Selecciona un aspecto!"
       ignore: "Solicitud de contacto ignorada."
       success: "Ahora están compartiendo."
     helper: 
@@ -501,10 +501,10 @@ es:
       your_diaspora_username_is: "Su nombre de usuario Diaspora* es: %{diaspora_handle}"
     contact_list: 
       all_contacts: "Todos los contactos"
-      cannot_remove: "No puede eliminarse a la persona del último Aspecto. (Si quieres desconectar de esta persona debes elminarla de tus contactos.)"
+      cannot_remove: "No puede eliminarse a la persona del último aspecto. (Si quieres dejar de compartir deberas elminarla.)"
     footer: 
       logged_in_as: "Conectado como %{name}"
-      your_aspects: "Tus Aspectos"
+      your_aspects: "tus aspectos"
     invitations: 
       by_email: "por Email"
       dont_have_now: "No tienes invitaciones ahora mismo pero, ¡pronto llegarán más!"
@@ -520,7 +520,7 @@ es:
       logged_in: "Conectado a %{service}"
       manage: "Servicios conectados"
       outside: "Las publicaciones para \"el mundo\" podrán verse fuera de Diaspora*."
-      title: "¡Estás a punto de hacer una publicación!"
+      title: "Configurar los servicios conectados"
     publisher: 
       add_photos: "Añadir fotos"
       all: "todo"
@@ -533,7 +533,7 @@ es:
       publishing_to: "publicar en: "
       share: "Compartir"
       share_with: "compartir con"
-      whats_on_your_mind: "¿Qué tienes en mente?"
+      whats_on_your_mind: "...y qué te cuentas?"
     reshare: 
       reshare: "Publicar en..."
     stream_element: 
@@ -561,7 +561,7 @@ es:
       people_tagged_with: "Personas etiquetadas en %{tag}"
       posts_tagged_with: "Publicaciones etiquetadas con #%{tag}"
   the_world: "el mundo"
-  undo: "Deshacer?"
+  undo: "¿Deshacer?"
   username: "Nombre de usuario"
   users: 
     destroy: "Cuenta cerrada con éxito."
diff --git a/config/locales/diaspora/eu.yml b/config/locales/diaspora/eu.yml
index 0094f951571502052e69ed7bcd1e6fe1ef5bc692..818350088e3c89ede07d1410f6d5320fbb38ae6f 100644
--- a/config/locales/diaspora/eu.yml
+++ b/config/locales/diaspora/eu.yml
@@ -266,7 +266,7 @@ eu:
       and_others: "eta beste %{number}(e)k"
       mark_all_as_read: "Guztiak irakurrita"
       notifications: "Jakinarazpenak"
-    mentioned: "aipatu zaituzte bere"
+    mentioned: "(e)k zu aipatu zaitu mezu batean"
     new_request: "(e)k zurekin partekatu nahi du."
     post: "mezua"
     private_message: "(e)k mezu bat bidali dizu."
@@ -354,7 +354,7 @@ eu:
       recent_posts: "Mezu Berrienak"
       recent_public_posts: "Azken berri publikoak"
       return_to_aspects: "Zure alderdi orrialdera itzuli"
-      similar_contacts: "antzeko adiskide"
+      see_all: "Guztiak ikusi"
       start_sharing: "harremanetan hasi"
       to_accept_or_ignore: "onartu edo utzi."
       you_have_no_tags: "ez duzu etiketarik!"
@@ -520,7 +520,7 @@ eu:
       logged_in: "%{service}(e)n sartuta"
       manage: "kudeatu lotutako zerbitzuak"
       outside: "Mezu publikoak edozeinek irakurtzeko ahalmena izango ditu, Diaspora kontua ez badu ere."
-      title: "Mezu publiko bat partekatzear zaude!"
+      title: "Zerbitzu konektatuak kudeatu"
     publisher: 
       add_photos: "argazkiak gehitu"
       all: "guztiak"
diff --git a/config/locales/diaspora/fi.yml b/config/locales/diaspora/fi.yml
index 7de04f2c52d7f84bf9f0d5a1ac64b428fa512847..cdb50c6d9b0da7abdba11cbb4348ae97eff0b6c3 100644
--- a/config/locales/diaspora/fi.yml
+++ b/config/locales/diaspora/fi.yml
@@ -354,7 +354,7 @@ fi:
       recent_posts: "Viimeisimmät tapahtumat"
       recent_public_posts: "Viimeisimmät julkiset tapahtumat"
       return_to_aspects: "Palaa näkymiin"
-      similar_contacts: "Yhteiset kontaktit"
+      see_all: "See all"
       start_sharing: "aloita jakamaan"
       to_accept_or_ignore: "hyväksyäksesi, tai hylätäksesi sen."
       you_have_no_tags: "Sinulla ei ole tageja!"
diff --git a/config/locales/diaspora/fr.yml b/config/locales/diaspora/fr.yml
index fc4f67c94f316d683ba828e00a5183b2da385db8..cdc7bb7d73151c00d081acede88cbbebec33defc 100644
--- a/config/locales/diaspora/fr.yml
+++ b/config/locales/diaspora/fr.yml
@@ -113,7 +113,7 @@ fr:
     zero: "aucun aspect"
   back: "Retour"
   bookmarklet: 
-    explanation: "%{link} depuis n'importe où ajoutant ce bookmarklet à vos marque-pages/favoris."
+    explanation: "%{link} depuis n'importe où en ajoutant ce bookmarklet à vos marque-pages ou favoris."
     explanation_link_text: "Publier sur Diaspora"
     post_something: "Publier quelque chose sur Diaspora"
     post_success: "Publié ! Fermeture !"
@@ -229,7 +229,7 @@ fr:
       blog: "blog"
       code: "code"
       login: "connexion"
-      logout: "se déconnecter"
+      logout: "déconnexion"
       profile: "profil"
       settings: "paramètres"
   likes: 
@@ -266,7 +266,7 @@ fr:
       and_others: "et %{number} autres"
       mark_all_as_read: "Tout marquer comme lu"
       notifications: "Notifications"
-    mentioned: "vous a mentionné(e) dans son"
+    mentioned: "vous a mentionné(e) dans une publication"
     new_request: "a proposé de partager avec vous."
     post: "message"
     private_message: "vous a envoyé un message."
@@ -354,7 +354,7 @@ fr:
       recent_posts: "Messages récents"
       recent_public_posts: "Messages publics récents"
       return_to_aspects: "Retourner à votre page des aspects"
-      similar_contacts: "Contacts similaires"
+      see_all: "Tout afficher"
       start_sharing: "commencer à partager"
       to_accept_or_ignore: "pour l'accepter ou l'ignorer."
       you_have_no_tags: "vous n'avez aucun tag !"
@@ -520,7 +520,7 @@ fr:
       logged_in: "connecté(e) à %{service}"
       manage: "gérer les services connectés"
       outside: "Les messages publics pourront être vus par d'autres en dehors de Diaspora."
-      title: "Vous êtes sur le point d'envoyer un message public !"
+      title: "Mettre en place des services connectés"
     publisher: 
       add_photos: "ajouter des photos"
       all: "tous"
diff --git a/config/locales/diaspora/ga.yml b/config/locales/diaspora/ga.yml
index e2b78f78e17a1587161c2fd3b7fd46afe8bf97e3..c1affa0ee0c37af4e3350481c14b4e2569f082ad 100644
--- a/config/locales/diaspora/ga.yml
+++ b/config/locales/diaspora/ga.yml
@@ -354,7 +354,7 @@ ga:
       recent_posts: "Póstanna Déanaí"
       recent_public_posts: "Póstanna Phoiblí Déanaí"
       return_to_aspects: "Dul siar chuig leathanach gnéithe"
-      similar_contacts: "teagmháillí cosúil"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "chun glacadh leis nó neamhaird a dhéanamh de"
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/he.yml b/config/locales/diaspora/he.yml
index 59dabd8bb150809af36b6e91948495ecd6da004e..49351ec28f221fd40544dd756ec71bb82b22cd75 100644
--- a/config/locales/diaspora/he.yml
+++ b/config/locales/diaspora/he.yml
@@ -82,7 +82,7 @@ he:
     index: 
       handle_explanation: "זהו שם המשתמש שלך בדיאספורה. כמו כתובת דואר אלקטרוני, ניתן לחלוק אותו עם אנשים כדי שיגיעו אליך."
       no_contacts: "אין אנשי קשר"
-      post_a_message: "post a message >>"
+      post_a_message: "פרסום הודעה >>"
     manage: 
       add_a_new_aspect: "הוספת היבט חדש"
       add_a_new_contact: "הוספת איש קשר חדש"
@@ -266,7 +266,7 @@ he:
       and_others: "ו־%{number} אחרים"
       mark_all_as_read: "סימון הכול כלאחר קריאה"
       notifications: "התרעות"
-    mentioned: "הזכיר/ה אותך ב־"
+    mentioned: "הזכיר/ה אותך ברשומה"
     new_request: "הציע/ה לשתף אתך."
     post: "רשומה"
     private_message: "שלח/ה לך הודעה."
@@ -354,7 +354,7 @@ he:
       recent_posts: "רשומות אחרונות"
       recent_public_posts: "הרשומות הציבוריות האחרונות"
       return_to_aspects: "באפשרותך לחזור לעמוד ההיבטים שלך"
-      similar_contacts: "אנשי קשר דומים"
+      see_all: "צפייה בהכול"
       start_sharing: "התחלת השיתוף"
       to_accept_or_ignore: "כדי לקבל או לדחות אותה."
       you_have_no_tags: "אין לך תגיות!"
@@ -448,7 +448,7 @@ he:
     destroy: 
       error: "נא לבחור בהיבט!"
       ignore: "התעלמת מבקשת החברות."
-      success: "אתם חברים כעת."
+      success: "את/ה משתף/ת כעת."
     helper: 
       new_requests: 
         few: "%{count} בקשות חדשות!"
@@ -511,7 +511,7 @@ he:
       from_facebook: "מ־Facebook"
       invitations_left: "(%{count} נותרו)"
       invite_someone: "שליחת הזמנה"
-      invite_your_friends: "הזמנת החברים שלך"
+      invite_your_friends: "חיפוש החברים שלך"
       invites: "הזמנות"
       invites_closed: "נכון לעכשיו ההזמנות לפוד זה של דיאספורה סגורות"
     notification: 
@@ -520,7 +520,7 @@ he:
       logged_in: "נכנסת אל %{service}"
       manage: "ניהול השירותים המקושרים"
       outside: "ההודעות הציבוריות יהיו זמינות לצפייה חיצונית גם מחוץ לרשת דיאספורה."
-      title: "ההודעה מיועדת לפרסום ציבורי!"
+      title: "הגדרת שירותים מקושרים"
     publisher: 
       add_photos: "הוספת תמונות"
       all: "הכול"
diff --git a/config/locales/diaspora/hu.yml b/config/locales/diaspora/hu.yml
index 2e39a89e057461ea90c9e6a817ee89f0a92d66ed..7c2c9204505b6270508de02f747a670508946797 100644
--- a/config/locales/diaspora/hu.yml
+++ b/config/locales/diaspora/hu.yml
@@ -266,7 +266,7 @@ hu:
       and_others: "és %{number} másik"
       mark_all_as_read: "Mind megjelölése olvasottként"
       notifications: "Értesítések"
-    mentioned: "megemlítettek téged a"
+    mentioned: "megemlített téged egy bejegyzésben"
     new_request: "megosztást ajánlott neked."
     post: "bejegyzés"
     private_message: "üzenetet küldött neked."
@@ -354,7 +354,7 @@ hu:
       recent_posts: "Legutóbbi bejegyzések"
       recent_public_posts: "Legutóbbi nyilvános bejegyzések"
       return_to_aspects: "Menj vissza a csoportokhoz"
-      similar_contacts: "hasonló kapcsolatok"
+      see_all: "Összes"
       start_sharing: "Megosztás indítása"
       to_accept_or_ignore: "hogy elfogadd vagy elutasítsd."
       you_have_no_tags: "nincs címkéd!"
@@ -520,7 +520,7 @@ hu:
       logged_in: "bejelentkezve ide: %{service}"
       manage: "kapcsolódó szolgáltatások kezelése"
       outside: "A publikus üzeneteket a Diaspora-n kívüli személyek is láthatják."
-      title: "Publikus üzenetet fogsz megjelentetni!"
+      title: "Kapcsolódó szolgáltatások beállítása"
     publisher: 
       add_photos: "képek hozzáadása"
       all: "összes"
diff --git a/config/locales/diaspora/id.yml b/config/locales/diaspora/id.yml
index 6b76ef15e5be198ec778b6a5ca7ce675f705bc68..cad5310198b173406f74d0c14cfd0ab82596615e 100644
--- a/config/locales/diaspora/id.yml
+++ b/config/locales/diaspora/id.yml
@@ -354,7 +354,7 @@ id:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "to accept or ignore it."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/is.yml b/config/locales/diaspora/is.yml
index 1ac36afc54f5b7e37c978d409e3b21f2d84d3548..f28d037869d95b7d5dc24e106a7bf7ffd56c03f4 100644
--- a/config/locales/diaspora/is.yml
+++ b/config/locales/diaspora/is.yml
@@ -354,7 +354,7 @@ is:
       recent_posts: "Nýlegar færslur"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "svipaðir tengiliðir"
+      see_all: "See all"
       start_sharing: "Byrja að samnýta"
       to_accept_or_ignore: "að samþykkja eða hunsa það."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/it.yml b/config/locales/diaspora/it.yml
index 53e708ad40f8cab963131ce0a40f72ac7c101323..e861fb5f75f7f6ff164cf0757a245f23af7815ea 100644
--- a/config/locales/diaspora/it.yml
+++ b/config/locales/diaspora/it.yml
@@ -33,7 +33,7 @@ it:
             username: 
               taken: "è già stato preso."
   ago: "%{time} fa"
-  all_aspects: "All aspects"
+  all_aspects: "Tutti gli aspetti"
   application: 
     helper: 
       unknown_person: "persona sconosciuta"
@@ -59,22 +59,22 @@ it:
     contacts_visible: "I contatti in questo aspetto potranno vedersi tra loro."
     create: 
       failure: "Creazione dell'aspetto fallita."
-      success: "Clicca sul segno più nella parte sinistra per dire a Diaspora chi può vedere il tuo nuovo aspetto."
+      success: "Il tuo nuovo aspetto %name è stato creato"
     destroy: 
-      failure: "%{name} non è stato rimosso perchè non è vuoto."
+      failure: "%{name} non è stato rimosso perché non è vuoto."
       success: "%{name} è stato rimosso con successo."
     edit: 
       add_existing: "Aggiungi un contatto esistente"
-      aspect_list_is_not_visible: "aspect list is hidden to others in aspect"
-      aspect_list_is_visible: "aspect list is visible to others in aspect"
+      aspect_list_is_not_visible: "l'elenco degli aspetti è nascosto agli altri nell'aspetto"
+      aspect_list_is_visible: "l'elenco degli aspetti è visibile agli altri nell'aspetto"
       confirm_remove_aspect: "Sei sicuro di voler eliminare questo aspetto?"
-      done: "Done"
-      make_aspect_list_visible: "rendi i contatti presenti in questo aspetto visibili agli altri"
+      done: "Completato"
+      make_aspect_list_visible: "rendi visibile la lista degli aspetti?"
       remove_aspect: "Elimina questo aspetto"
       rename: "rinomina"
-      update: "update"
-      updating: "updating"
-    few: "%{count} aspects"
+      update: "aggiorna"
+      updating: "aggiornamento in corso"
+    few: "%{count} aspetti"
     helper: 
       are_you_sure: "Sei sicuro di voler eliminare questo aspetto?"
       aspect_not_empty: "Aspetto non vuoto"
@@ -82,15 +82,15 @@ it:
     index: 
       handle_explanation: "Questo è il tuo contatto Diaspora. Lo puoi dare alle persone per farti trovare, come un indirizzo email."
       no_contacts: "Nessun contatto"
-      post_a_message: "post a message >>"
+      post_a_message: "invia un messaggio >>"
     manage: 
-      add_a_new_aspect: "Aggiungi un nuovo aspetto"
+      add_a_new_aspect: "Aggiungi aspetto della vita"
       add_a_new_contact: "Aggiungi un nuovo contatto"
       drag_to_add: "Trascina per aggiungere qualcuno"
-      manage_aspects: "Amministra aspetti"
+      manage_aspects: "Amministra gli aspetti della tua vita"
       no_requests: "Nessuna nuova richiesta"
       requests: "Richieste"
-    many: "%{count} aspects"
+    many: "%{count} aspetti"
     move_contact: 
       error: "Errore nello spostare il contatto: %{inspect}"
       failure: "non ha funzionato %{inspect}"
@@ -100,8 +100,8 @@ it:
       name: "Nome"
     no_posts_message: 
       start_talking: "Nessuno ha ancora detto niente. Inizia la conversazione!"
-    one: "1 aspect"
-    other: "%{count} aspects"
+    one: "un aspetto"
+    other: "%{count} aspetti"
     seed: 
       family: "Famiglia"
       work: "Lavoro"
@@ -110,23 +110,23 @@ it:
     update: 
       failure: "Il tuo  aspetto, %{name}, ha un nome troppo lungo per poter essere salvato."
       success: "Il tuo aspetto, %{name}, è stato modificato con successo."
-    zero: "no aspects"
+    zero: "nessun aspetto"
   back: "Indietro"
   bookmarklet: 
-    explanation: "%{link} from anywhere by bookmarking this link."
-    explanation_link_text: "Post to Diaspora"
-    post_something: "Post something to Diaspora"
-    post_success: "Posted! Closing!"
+    explanation: "%{link} da ovunque aggiungendo come segnalibro questo link."
+    explanation_link_text: "Pubblica su Diaspora"
+    post_something: "Pubblica qualcosa su Diaspora"
+    post_success: "Inviato! Sta per chiudersi!"
   cancel: "Annulla"
   comments: 
-    few: "%{count} comments"
-    many: "%{count} comments"
+    few: "%{count} commenti"
+    many: "%{count} commenti"
     new_comment: 
-      comment: "Commento"
+      comment: "commento"
       commenting: "Invio commento in corso..."
-    one: "1 comment"
-    other: "%{count} comments"
-    zero: "no comments"
+    one: "1 commento"
+    other: "%{count} commenti"
+    zero: "nessun commento"
   contacts: 
     create: 
       failure: "Impossibile creare il contatto"
@@ -134,40 +134,40 @@ it:
       failure: "Impossibile disconnettersi da %{name}"
       success: "Disconnessione effettuata con successo da %{name}"
     few: "%{count} contatti"
-    many: "%{count} contacts"
+    many: "%{count} contatti"
     one: "1 contatto"
     other: "%{count} contatti"
     share_with_pane: 
-      accepts: "Quando %{name} avrà accettato, inizierete a vedere reciprocamente i vostri posts su Diaspora"
+      accepts: "Quando %{name} avrà accettato, inizierete a vedere reciprocamente i vostri post su Diaspora"
       add_new_aspect: "aggiungi ad un nuovo aspetto"
       share_with: "Inizia a condividere con %{name}"
     zero: "nessun contatto"
   conversations: 
     create: 
-      sent: "Message sent"
+      sent: "Messaggio inviato"
     destroy: 
-      success: "Conversation successfully removed"
+      success: "Conversazione rimossa con successo"
     helper: 
       new_messages: 
-        few: "%{count} new messages"
-        many: "%{count} new messages"
-        one: "1 new messages"
-        other: "%{count} new messages"
-        zero: "no new messages"
+        few: "%{count} nuovi messaggi"
+        many: "%{count} nuovi messaggi"
+        one: "un nuovo messaggio"
+        other: "%{count} nuovi messaggi"
+        zero: "nessun nuovo messaggio"
     index: 
-      create_a_new_message: "create a new message"
-      inbox: "Inbox"
-      message_inbox: "Message Inbox"
-      new_message: "New Message"
-      no_conversation_selected: "no conversation selected"
-      no_messages: "no messages"
+      create_a_new_message: "scrivi un nuovo messaggio"
+      inbox: "In arrivo"
+      message_inbox: "Messaggi in arrivo"
+      new_message: "Nuovo Messaggio"
+      no_conversation_selected: "nessuna conversazione selezionata"
+      no_messages: "nessun messaggio"
     new: 
-      send: "Send"
-      subject: "subject"
-      to: "to"
+      send: "Invia"
+      subject: "oggetto"
+      to: "a"
     show: 
-      delete: "delete and block conversation"
-      reply: "reply"
+      delete: "cancella e blocca la conversazione"
+      reply: "rispondi"
   date: 
     formats: 
       birthday: "%d %B"
@@ -180,10 +180,10 @@ it:
       correct_the_following_errors_and_try_again: "Correggi i seguenti errori e riprova."
       invalid_fields: "Campi non validi"
   fill_me_out: "Riempimi"
-  hide: "Hide"
+  hide: "Nascondi"
   home: 
     show: 
-      already_account: "hai già account?"
+      already_account: "hai già un account?"
       choice: "Scelta"
       choice_explanation: "Diaspora ti permette di suddividere le tue connessioni in gruppi chiamati aspetti. Solo su Diaspora, gli aspetti fanno si che le foto, i racconti e gli scherzi siano condivisi solamente con le persone che desideri."
       learn_about_host: "Impara come ospitare il tuo server Diaspora."
@@ -213,7 +213,7 @@ it:
       if_they_accept_info: "se loro accettano, saranno aggiunti all'aspetto in cui li hai invitati."
       invite_someone_to_join: "Invita qualcuno ad unirsi a Diaspora!"
       personal_message: "Messaggio privato"
-      resend: "Inviato di nuovo"
+      resend: "Invia di nuovo"
       send_an_invitation: "Invia un invito"
       send_invitation: "Invito inviato"
       to: "A"
@@ -221,34 +221,34 @@ it:
     application: 
       have_a_problem: "Hai un problema? Trova qui la soluzione"
       powered_by: "CREATO CON DIASPORA*"
-      public_feed: "Public Diaspora Feed for %{name}"
+      public_feed: "Feed pubblici Diaspora di %{name}"
       toggle: "attiva/disattiva sito mobile"
       whats_new: "novità"
-      your_aspects: "I tuoi aspetti"
+      your_aspects: "i tuoi aspetti"
     header: 
       blog: "blog"
       code: "codice"
       login: "accedi"
       logout: "esci"
-      profile: "profile"
-      settings: "settings"
+      profile: "profilo"
+      settings: "impostazioni"
   likes: 
     likes: 
       people_dislike_this: 
-        few: "%{count} people disliked this"
-        many: "%{count} people disliked this"
-        one: "1 person disliked this"
-        other: "%{count} people disliked this"
-        zero: "no people disliked this"
+        few: "non piace a %{count} persone"
+        many: "non piace a %{count} persone "
+        one: "non piace ad una persona "
+        other: "non piace a %{count} persone"
+        zero: "non piace a zero persone"
       people_like_this: 
-        few: "%{count} people liked this"
-        many: "%{count} people liked this"
-        one: "1 person liked this"
-        other: "%{count} people liked this"
-        zero: "no people liked this"
+        few: "piace a %{count} persone"
+        many: "piace a %{count} persone"
+        one: "piace ad una persona"
+        other: "piace a %{count} persone"
+        zero: "piace a nessuno"
   more: "Altro"
   next: "successivo"
-  no_results: "No Results Found"
+  no_results: "Nessun Risultato Trovato"
   notifications: 
     also_commented: "ha anche commentato su quello di %{post_author}"
     also_commented_deleted: "hai commentato un post cancellato"
@@ -256,47 +256,47 @@ it:
     deleted: "eliminato"
     helper: 
       new_notifications: 
-        few: "%{count} new notifications"
-        many: "%{count} new notifications"
-        one: "1 new notifications"
-        other: "%{count} new notifications"
-        zero: "no new notifications"
+        few: "%{count} nuove notifiche"
+        many: "%{count} nuove notifiche"
+        one: "una nuova notifica"
+        other: "%{count} nuove notifiche"
+        zero: "nessuna notifica"
     index: 
-      and: "and"
-      and_others: "and %{number} others"
+      and: "e"
+      and_others: "e altri %{number}"
       mark_all_as_read: "Segna Tutti come Letti"
       notifications: "Notifiche"
-    mentioned: "ti ha menzionato nel suo"
+    mentioned: "ti ha menzionato in un post"
     new_request: "vuole condividere con te."
     post: "post"
-    private_message: "sent you a message."
+    private_message: "ti ha inviato un messaggio."
     request_accepted: "ha accettato la tua richiesta di condivisione."
   notifier: 
     also_commented: 
       commented: "ha anche commentato sul post di %{post_author}:"
-      sign_in: "Autenticati per vederlo."
+      sign_in: "Accedi per vederlo."
       subject: "%{name} ha anche commentato sul post di %{post_author}."
     comment_on_post: 
       commented: "ha commentato il tuo post:"
-      sign_in: "Autenticati per vederlo."
+      sign_in: "Accedi per vederlo."
       subject: "%{name} ha commentato il tuo post."
     diaspora: "l'email robot di diaspora"
     hello: "Ciao %{name}!"
     love: "amore,"
-    manage_your_email_settings: "manage your email settings"
+    manage_your_email_settings: "gestisci le tue impostazioni email"
     mentioned: 
       mentioned: "ti ha menzionato in un post:"
-      sign_in: "Loggati per vederlo."
+      sign_in: "Accedi per vederlo."
       subject: "%{name} ti ha menzionato su Diaspora*"
     new_request: 
       just_sent_you: "ti ha appena inviato una richiesta di contatto su Diaspora*"
-      sign_in: "accedi qui"
+      sign_in: "Accedi qui"
       subject: "nuova richiesta di contatto su Diaspora* da %{from}"
       try_it_out: "Dovresti veramente provarlo."
     private_message: 
-      message_subject: "Subject: %{subject}"
-      private_message: "has sent you a private message:"
-      sign_in: "Sign in to view it."
+      message_subject: "Oggetto: %{subject}"
+      private_message: "ti ha inviato un messaggio privato:"
+      sign_in: "Accedi per vederlo."
       subject: "%{name} ti ha inviato un messaggio privato su Diaspora*"
     request_accepted: 
       accepted: "ha accettato la tua richiesta di contatto!"
@@ -312,10 +312,10 @@ it:
   password_confirmation: "Conferma password"
   people: 
     add_contact_small: 
-      add_contact_from_tag: "add contact from tag"
+      add_contact_from_tag: "aggiungi contatto da etichetta"
     aspect_list: 
       edit_membership: "modifica appartenenza all'aspetto"
-    few: "%{count} people"
+    few: "%{count} persone"
     helper: 
       people_on_pod_are_aware_of: " le persone sul pod sanno che"
       results_for: " risultati per %{params}"
@@ -324,14 +324,14 @@ it:
       no_one_found: "...e nessuno è stato trovato."
       no_results: "Ehi! Devi inserire qualcosa da cercare."
       results_for: "risultati della ricerca per"
-    many: "%{count} people"
-    one: "1 person"
-    other: "%{count} people"
+    many: "%{count} persone"
+    one: "una persona"
+    other: "%{count} persone"
     person: 
       add_contact: "aggiungi contatto"
       already_connected: "Già connesso"
-      pending_request: "richiesta in sospeso"
-      thats_you: "sei tu!"
+      pending_request: "Richiesta in sospeso"
+      thats_you: "Sei tu!"
     profile_sidebar: 
       bio: "bio"
       born: "data di nascita"
@@ -339,41 +339,41 @@ it:
       edit_my_profile: "Modifica il mio profilo"
       gender: "sesso"
       in_aspects: "negli aspetti"
-      location: "location"
+      location: "dove ti trovi"
       remove_contact: "rimuovi contatto"
       remove_from: "Rimuovere %{name} da %{aspect}?"
     show: 
-      add_some: "add some"
+      add_some: "aggiungine alcune"
       does_not_exist: "La persona non esiste!"
-      edit: "edit"
+      edit: "modifica"
       incoming_request: "%{name} vuole condividere con te"
-      mention: "Mention"
-      message: "Message"
+      mention: "Menziona"
+      message: "Messaggio"
       no_posts: "nessun post da mostrare!"
       not_connected: "Non sei in contatto con %{name}"
       recent_posts: "Post Recenti"
       recent_public_posts: "Post pubblici recenti"
       return_to_aspects: "Torna alla pagina dei tuoi aspetti"
-      similar_contacts: "contatti simili"
+      see_all: "Visualizza tutti"
       start_sharing: "inizia a condividere"
       to_accept_or_ignore: "per accettarla o ignorarla."
-      you_have_no_tags: "you have no tags!"
+      you_have_no_tags: "non hai etichette!"
     webfinger: 
       fail: "Spiacenti, non possiamo trovare %{handle}."
-    zero: "no people"
+    zero: "nessuna persona"
   photos: 
     create: 
       integrity_error: "Il caricamento della foto non è riuscito. Sei sicuro che fosse un'immagine?"
-      runtime_error: "La fotografia non si è caricata.  Hai dimenticato forse la cintura?"
+      runtime_error: "La fotografia non si è caricata. Hai dimenticato forse di allacciare la cintura?"
       type_error: "La foto non si è caricata.  Sei sicuro di aver aggiunto un'immagine?"
     destroy: 
       notice: "Foto eliminata."
     edit: 
-      editing: "Modifica"
+      editing: "Modifica in corso"
     new: 
       back_to_list: "Torna all'elenco"
       new_photo: "Nuova foto"
-      post_it: "inseriscila!"
+      post_it: "condividi!"
     new_photo: 
       empty: "{file} è vuoto, per favore seleziona di nuovo i file senza di esso."
       invalid_ext: "{file} ha un estensione non valida. Sono permesse soltanto {extensions}."
@@ -388,7 +388,7 @@ it:
       delete_photo: "Elimina foto"
       edit: "modifica"
       edit_delete_photo: "Modifica descrizione della foto / elimina foto"
-      make_profile_photo: "usala come foto profilo"
+      make_profile_photo: "usa come immagine del profilo"
       original_post: "Post Originale"
       permalink: "permalink"
       update_photo: "Aggiorna Foto"
@@ -398,28 +398,28 @@ it:
       notice: "Foto aggiornata con successo."
   post_visibilites: 
     update: 
-      post_hidden: "%{name}'s post has been hidden."
+      post_hidden: "Il post di %{name} è stato nascosto."
   posts: 
-    doesnt_exist: "that post does not exist!"
+    doesnt_exist: "questo post non esiste!"
   previous: "precedente"
   profile: "Profilo"
   profiles: 
     edit: 
       allow_search: "Permetti ad altri di trovarti su Diaspora"
-      edit_profile: "Edita il profilo"
+      edit_profile: "Modifica il profilo"
       first_name: "Nome"
       last_name: "Cognome"
       update_profile: "Aggiorna Profilo"
       your_bio: "La tua biografia"
       your_birthday: "Il tuo compleanno"
       your_gender: "Sesso"
-      your_location: "Your location"
+      your_location: "Dove ti trovi"
       your_name: "Il tuo nome"
       your_photo: "La tua foto"
-      your_private_profile: "Your private profile"
-      your_public_profile: "Your public profile"
-      your_tags: "You: in 5 #tags"
-      your_tags_placeholder: "i.e. #diaspora #ironing #kittens #music"
+      your_private_profile: "Il tuo profilo privato"
+      your_public_profile: "Il tuo profilo pubblico"
+      your_tags: "Tu: in 5 #tags"
+      your_tags_placeholder: "per esempio #diaspora #stirare #gattini #musica"
     update: 
       failed: "Aggiornamento del profilo non riuscito"
       updated: "Profilo aggiornato"
@@ -428,7 +428,7 @@ it:
     create: 
       success: "Ti sei unito a Diaspora!"
     edit: 
-      cancel_my_account: "Cancele il mio account"
+      cancel_my_account: "Cancella il mio account"
       edit: "Modifica %{name}"
       leave_blank: "(lascialo bianco se non vuoi modificarlo)"
       password_to_confirm: "(abbiamo bisogno della tua password per confermare le tue modifiche)"
@@ -444,23 +444,23 @@ it:
   requests: 
     create: 
       sending: "Invio in corso..."
-      sent: "Hai chiesto di condividire come %{name}. Dovrebbero vederlo nel loro prossimo accesso."
+      sent: "Hai chiesto di condividere come %{name}. Dovrebbero vederlo nel loro prossimo accesso su Diaspora."
     destroy: 
       error: "Seleziona un aspetto!"
-      ignore: "Richiesta di amicizia ignorata."
-      success: "Adesso siete amici."
+      ignore: "Richiesta di entrare in contatto ignorata."
+      success: "Adesso potete condividere."
     helper: 
       new_requests: 
-        few: "%{count} new requests!"
-        many: "%{count} new requests!"
-        one: "new request!"
-        other: "%{count} new requests!"
-        zero: "no new requests"
+        few: "%{count} nuove richieste!"
+        many: "%{count} nuove richieste!"
+        one: "una nuova richiesta!"
+        other: "%{count} nuove richieste!"
+        zero: "nessuna nuova richiesta"
     manage_aspect_contacts: 
       existing: "Contatti esistenti"
-      manage_within: "Amministra contatti tra"
+      manage_within: "Amministra contatti"
     new_request_to_person: 
-      sent: "inviato!"
+      sent: "richiesta inviata!"
   search: "Cerca"
   services: 
     create: 
@@ -472,7 +472,7 @@ it:
     finder: 
       friends: 
         few: "%{count} amici"
-        many: "%{count} friends"
+        many: "%{count} amici"
         one: "1 amico"
         other: "%{count} amici"
         zero: "nessun amico"
@@ -483,7 +483,7 @@ it:
       connect_to_twitter: "Connettiti a twitter"
       disconnect: "disconnetti"
       edit_services: "Modifica servizi"
-      logged_in_as: "connesso come"
+      logged_in_as: "accesso effettuato come"
       really_disconnect: "disconnettere %{service}?"
     inviter: 
       click_link_to_accept_invitation: "Fai click su questo link per accettare l'invito"
@@ -494,24 +494,24 @@ it:
   settings: "Impostazioni"
   shared: 
     add_contact: 
-      create_request: "Cerca tramite contatto Diaspora"
+      create_request: "Cerca fra i nomi utente Diaspora"
       diaspora_handle: "Contatto Diaspora"
-      enter_a_diaspora_username: "Inserisci un username Diaspora"
+      enter_a_diaspora_username: "Inserisci un nome utente Diaspora"
       know_email: "Conosci i loro indirizzi email? Dovresti invitarli"
-      your_diaspora_username_is: "Il tuo username Diaspora è: %{diaspora_handle}"
+      your_diaspora_username_is: "Il tuo nome utente Diaspora è: %{diaspora_handle}"
     contact_list: 
       all_contacts: "Tutti i contatti"
       cannot_remove: "Impossibile rimuovere la persona dall'ultimo aspetto."
     footer: 
-      logged_in_as: "logged in as %{name}"
-      your_aspects: "your aspects"
+      logged_in_as: "accesso effettuato come %{name}"
+      your_aspects: "i tuoi aspetti"
     invitations: 
       by_email: "via Email"
       dont_have_now: "Non ne hai alcuno per il momento, ma altri arriveranno presto!"
       from_facebook: "Da Facebook"
       invitations_left: "(%{count} rimanenti)"
       invite_someone: "Invita qualcuno"
-      invite_your_friends: "Invita i tuoi amici"
+      invite_your_friends: "Cerca i tuoi amici"
       invites: "Inviti"
       invites_closed: "Al momento gli inviti sono chiusi su questo pod Diaspora."
     notification: 
@@ -520,75 +520,75 @@ it:
       logged_in: "accesso effettuato a %{service}"
       manage: "gestisci i servizi collegati"
       outside: "I messaggi pubblici saranno visibili a persone al di fuori di Diaspora."
-      title: "Stai per inviare un messaggio pubblico!"
+      title: "Configura i servizi collegati"
     publisher: 
       add_photos: "aggiungi foto"
       all: "tutti"
       all_contacts: "tutti i contatti"
-      click_to_share_with: "Click to share with: "
-      make_public: "pubblica"
+      click_to_share_with: "Clicca per condividere con: "
+      make_public: "rendi pubblico"
       post_a_message_to: "Invia un messaggio a %{aspect}"
       posting: "Invio in corso..."
-      public: "Public"
-      publishing_to: "publishing to: "
+      public: "Pubblico"
+      publishing_to: "stai condividendo con: "
       share: "Condividi"
-      share_with: "Condividi con"
+      share_with: "condividi con"
       whats_on_your_mind: "cosa stai pensando?"
     reshare: 
       reshare: "Ricondividi"
     stream_element: 
-      dislike: "I dislike this"
-      like: "I like this"
+      dislike: "Non mi piace"
+      like: "Mi piace"
   status_messages: 
     create: 
-      success: "Successfully mentioned: %{names}"
+      success: "Menzionati con successo: %{names}"
     destroy: 
       failure: "Eliminazione post non riuscita"
     helper: 
       no_message_to_display: "Nessun messaggio da visualizzare."
     new: 
-      mentioning: "Mentioning: %{person}"
+      mentioning: "stai menzionando: %{person}"
     show: 
       destroy: "Elimina"
-      not_found: "Sorry, we couldn't find that post."
+      not_found: "Ci scusiamo, non possiamo trovare il post."
       permalink: "permalink"
   stream_helper: 
     hide_comments: "nascondi i commenti"
     show_comments: "mostra tutti i commenti"
   tags: 
     show: 
-      nobody_talking: "Nobody is talking about %{tag} yet."
-      people_tagged_with: "People tagged with %{tag}"
-      posts_tagged_with: "Posts tagged with #%{tag}"
+      nobody_talking: "Nessuno sta ancora parlando di %{tag}."
+      people_tagged_with: "Persone etichettate come %{tag}"
+      posts_tagged_with: "Post etichettati come #%{tag}"
   the_world: "il mondo"
-  undo: "Undo?"
-  username: "Username"
+  undo: "Annullare?"
+  username: "Nome Utente"
   users: 
     destroy: "Account chiuso con successo."
     edit: 
-      also_commented: "...someone also comments on your contact's post?"
+      also_commented: "...qualcun altro ha commentato il post del tuo contatto?"
       change: "Cambia"
       change_language: "Cambia Lingua"
       change_password: "Cambia Password"
       close_account: "Chiudi Account"
-      comment_on_post: "...someone comments on your post?"
+      comment_on_post: "...qualcuno ha commentato il tuo post?"
       current_password: "Password attuale"
       download_photos: "scarica le mie foto"
       download_xml: "scarica il mio xml"
       edit_account: "Modifica account"
       export_data: "Esporta Dati"
-      mentioned: "...you are mentioned in a post?"
+      mentioned: "...sei menzionato in un post?"
       new_password: "Nuova Password"
-      private_message: "...you receive a private message?"
+      private_message: "...hai ricevuto un messaggio privato?"
       receive_email_notifications: "Vuoi ricevere notifiche via email?"
-      request_acceptence: "...your share request is accepted?"
-      request_received: "...you receive a new share request?"
+      request_acceptence: "...la tua richiesta di condivisione è stata accettata?"
+      request_received: "...la tua richiesta di condivisione è stata accettata?"
       your_email: "La tua email"
       your_handle: "Il tuo contatto Diaspora"
     getting_started: 
       connect_on_diaspora: "Connetti su Diaspora"
       connect_services: "Collega i tuoi servizi"
-      could_not_find_anyone: "Could not find any friends on Diaspora*. Use the friend finder to invite them."
+      could_not_find_anyone: "Non è possibile trovare neanche un tuo amico su Diaspora*. Usa barra di ricerca amici per trovarli."
       edit_profile: "Modifica il tuo profilo"
       finished: "Finito!"
       save_and_continue: "Salva e continua"
@@ -612,6 +612,6 @@ it:
   webfinger: 
     fetch_failed: "impossibile recuperare il profilo webfinger da %{profile_url}"
     hcard_fetch_failed: "impossibile recuperare l'hcard di %{account}"
-    no_person_constructed: "Questa hcard non contiene i dati di una persona."
+    no_person_constructed: "Non si può risalire a neanche una persona da questa hcard."
     not_enabled: "webfinger non attivo sull'host di %{account}"
     xrd_fetch_failed: "impossibile recuperare il xrd dall'account %{account}"
diff --git a/config/locales/diaspora/ja.yml b/config/locales/diaspora/ja.yml
new file mode 100644
index 0000000000000000000000000000000000000000..af17b41abe16c3785eb1795adaaf3d39689c223f
--- /dev/null
+++ b/config/locales/diaspora/ja.yml
@@ -0,0 +1,617 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+ja: 
+  _comments: "Comments"
+  _home: "Home"
+  _photos: "写真"
+  _services: "Services"
+  account: "Account"
+  activerecord: 
+    errors: 
+      models: 
+        contact: 
+          attributes: 
+            person_id: 
+              taken: "このユーザの他の連絡先と重複してはいけません。"
+        person: 
+          attributes: 
+            diaspora_handle: 
+              taken: "既に使われています。"
+        request: 
+          attributes: 
+            from_id: 
+              taken: "既存のリクエストと重複しています。"
+        user: 
+          attributes: 
+            email: 
+              taken: "既に使われています。"
+            person: 
+              invalid: "無効です。"
+            username: 
+              taken: "既に使われています。"
+  ago: "%{time} ago"
+  all_aspects: "All Aspects"
+  application: 
+    helper: 
+      unknown_person: "unknown person"
+      video_title: 
+        unknown: "Unknown Video Title"
+  are_you_sure: "本当にいいですか。"
+  aspect_memberships: 
+    destroy: 
+      failure: "人をアスペクトから除外するのに失敗しました"
+      no_membership: "選択した人はそのアスペクト内に見つかりませんでした"
+      success: "人をアスペクトから除外するのに成功しました"
+  aspects: 
+    add_to_aspect: 
+      failure: "Failed to add contact to aspect."
+      success: "Successfully added contact to aspect."
+    aspect_contacts: 
+      done_editing: "done editing"
+    aspect_stream: 
+      activity: "activity"
+      post_time: "post time"
+      sort_by: "sort by:"
+    contacts_not_visible: "Contacts in this aspect will not be able to see each other."
+    contacts_visible: "Contacts in this aspect will be able to see each other."
+    create: 
+      failure: "Aspect creation failed."
+      success: "Your new aspect %{name} was created"
+    destroy: 
+      failure: "%{name} is not empty and could not be removed."
+      success: "%{name} was successfully removed."
+    edit: 
+      add_existing: "Add an existing contact"
+      aspect_list_is_not_visible: "aspect list is hidden to others in aspect"
+      aspect_list_is_visible: "aspect list is visible to others in aspect"
+      confirm_remove_aspect: "Are you sure you want to delete this aspect?"
+      done: "Done"
+      make_aspect_list_visible: "make aspect list visible?"
+      remove_aspect: "Delete this aspect"
+      rename: "rename"
+      update: "update"
+      updating: "updating"
+    few: "%{count} aspects"
+    helper: 
+      are_you_sure: "Are you sure you want to delete this aspect?"
+      aspect_not_empty: "Aspect not empty"
+      remove: "remove"
+    index: 
+      handle_explanation: "This is your diaspora handle. Like an email address, you can give this to people to reach you."
+      no_contacts: "No contacts"
+      post_a_message: "post a message >>"
+    manage: 
+      add_a_new_aspect: "Add a new aspect"
+      add_a_new_contact: "Add a new contact"
+      drag_to_add: "Drag to add people"
+      manage_aspects: "Manage aspects"
+      no_requests: "No new requests"
+      requests: "Requests"
+    many: "%{count} aspects"
+    move_contact: 
+      error: "Error moving contact: %{inspect}"
+      failure: "didn't work %{inspect}"
+      success: "Person moved to new aspect"
+    new_aspect: 
+      create: "Create"
+      name: "Name"
+    no_posts_message: 
+      start_talking: "Nobody has said anything yet.  Get the conversation started!"
+    one: "1 aspect"
+    other: "%{count} aspects"
+    seed: 
+      family: "Family"
+      work: "Work"
+    show: 
+      edit_aspect: "edit aspect"
+    update: 
+      failure: "Your aspect, %{name}, had too long name to be saved."
+      success: "Your aspect, %{name}, has been successfully edited."
+    zero: "no aspects"
+  back: "前へ"
+  bookmarklet: 
+    explanation: "%{link} from anywhere by bookmarking this link."
+    explanation_link_text: "Post to Diaspora"
+    post_something: "Post something to Diaspora"
+    post_success: "Posted! Closing!"
+  cancel: "取り消す"
+  comments: 
+    few: "コメント%{count}件"
+    many: "コメント%{count}件"
+    new_comment: 
+      comment: "コメント"
+      commenting: "コメント投稿中…"
+    one: "コメント1件"
+    other: "コメント%{count}件"
+    zero: "コメントがありません"
+  contacts: 
+    create: 
+      failure: "Failed to create contact"
+    destroy: 
+      failure: "Failed to disconnect from %{name}"
+      success: "Successfully disconnected from %{name}"
+    few: "%{count} contacts"
+    many: "%{count} contacts"
+    one: "1 contact"
+    other: "%{count} contacts"
+    share_with_pane: 
+      accepts: "Once %{name} accepts, you'll start seeing each other's posts on Diaspora"
+      add_new_aspect: "add to new aspect"
+      share_with: "Start sharing with %{name}"
+    zero: "no contacts"
+  conversations: 
+    create: 
+      sent: "Message sent"
+    destroy: 
+      success: "Conversation successfully removed"
+    helper: 
+      new_messages: 
+        few: "%{count} new messages"
+        many: "%{count} new messages"
+        one: "1 new messages"
+        other: "%{count} new messages"
+        zero: "no new messages"
+    index: 
+      create_a_new_message: "create a new message"
+      inbox: "Inbox"
+      message_inbox: "Message Inbox"
+      new_message: "New Message"
+      no_conversation_selected: "no conversation selected"
+      no_messages: "no messages"
+    new: 
+      send: "Send"
+      subject: "subject"
+      to: "to"
+    show: 
+      delete: "delete and block conversation"
+      reply: "reply"
+  date: 
+    formats: 
+      birthday: "%B %d"
+      birthday_with_year: "%B %d %Y"
+      fullmonth_day: "%B %d"
+  delete: "削除"
+  email: "Email"
+  error_messages: 
+    helper: 
+      correct_the_following_errors_and_try_again: "Correct the following errors and try again."
+      invalid_fields: "Invalid Fields"
+  fill_me_out: "Fill me out"
+  hide: "隠す"
+  home: 
+    show: 
+      already_account: "already have an account?"
+      choice: "Choice"
+      choice_explanation: "Diaspora lets you sort your connections into groups called aspects. Unique to Diaspora, aspects ensure that your photos, stories and jokes are shared only with the people you intend."
+      learn_about_host: "Learn about how to host your own Diaspora server."
+      login_here: "log in here"
+      ownership: "Ownership"
+      ownership_explanation: "You own your pictures, and you shouldn’t have to give that up just to share them. You maintain ownership of everything you share on Diaspora, giving you full control over how it's distributed."
+      share_what_you_want: "Share what you want, with whom you want."
+      simplicity: "Simplicity"
+      simplicity_explanation: "Diaspora makes sharing clean and easy – and this goes for privacy too. Inherently private, Diaspora doesn’t make you wade through pages of settings and options just to keep your profile secure."
+      tagline_first_half: "Share what you want,"
+      tagline_second_half: "with whom you want."
+  invitations: 
+    check_token: 
+      not_found: "Invitation token not found"
+    create: 
+      already_contacts: "You are already connected with this person"
+      already_sent: "You already invited this person."
+      no_more: "You have no more invitations."
+      rejected: "The following email addresses had problems: "
+      sent: "Invitations have been sent to: "
+    edit: 
+      sign_up: "sign_up"
+    new: 
+      already_invited: "Already invited"
+      aspect: "Aspect"
+      comma_seperated_plz: "You can enter multiple email addresses separated by commas."
+      if_they_accept_info: "if they accept, they will be added to the aspect you invited them."
+      invite_someone_to_join: "Invite someone to join Diaspora!"
+      personal_message: "Personal message"
+      resend: "Resend"
+      send_an_invitation: "Send an invitation"
+      send_invitation: "Send invitation"
+      to: "To"
+  layouts: 
+    application: 
+      have_a_problem: "Have a problem? Find an answer here"
+      powered_by: "POWERED BY DIASPORA*"
+      public_feed: "%{name}さんの公開ダイアスポラフィード"
+      toggle: "携帯サイトの切替え"
+      whats_new: "最新情報"
+      your_aspects: "アスペクト"
+    header: 
+      blog: "ブログ"
+      code: "code"
+      login: "ログイン"
+      logout: "ログアウト"
+      profile: "プロフィール"
+      settings: "設定"
+  likes: 
+    likes: 
+      people_dislike_this: 
+        few: "%{count} people disliked this"
+        many: "%{count} people disliked this"
+        one: "1 person disliked this"
+        other: "%{count} people disliked this"
+        zero: "no people disliked this"
+      people_like_this: 
+        few: "%{count} people liked this"
+        many: "%{count} people liked this"
+        one: "1 person liked this"
+        other: "%{count} people liked this"
+        zero: "no people liked this"
+  more: "More"
+  next: "next"
+  no_results: "No Results Found"
+  notifications: 
+    also_commented: "also commented on %{post_author}'s"
+    also_commented_deleted: "commented on a deleted post."
+    comment_on_post: "commented on your"
+    deleted: "deleted"
+    helper: 
+      new_notifications: 
+        few: "%{count} new notifications"
+        many: "%{count} new notifications"
+        one: "1 new notifications"
+        other: "%{count} new notifications"
+        zero: "no new notifications"
+    index: 
+      and: "and"
+      and_others: "and %{number} others"
+      mark_all_as_read: "Mark All as Read"
+      notifications: "Notifications"
+    mentioned: "has mentioned you in a "
+    new_request: "offered to share with you."
+    post: "post."
+    private_message: "sent you a message."
+    request_accepted: "accepted your share request."
+  notifier: 
+    also_commented: 
+      commented: "has also commented on %{post_author}'s post:"
+      sign_in: "Sign in to view it."
+      subject: "%{name} has also commented on %{post_author}'s post."
+    comment_on_post: 
+      commented: "has commented on your post:"
+      sign_in: "Sign in to view it."
+      subject: "%{name} has commented on your post."
+    diaspora: "the diaspora email robot"
+    hello: "Hello %{name}!"
+    love: "love,"
+    manage_your_email_settings: "manage your email settings"
+    mentioned: 
+      mentioned: "mentioned you in a post:"
+      sign_in: "Sign in to view it."
+      subject: "%{name} has mentioned you on Diaspora*"
+    new_request: 
+      just_sent_you: "just sent you a contact request on Diaspora*"
+      sign_in: "Sign in here"
+      subject: "new Diaspora* contact request from %{from}"
+      try_it_out: "You should really think about checking it out."
+    private_message: 
+      message_subject: "Subject: %{subject}"
+      private_message: "has sent you a private message:"
+      sign_in: "Sign in to view it."
+      subject: "%{name} has sent you a private message on Diaspora*"
+    request_accepted: 
+      accepted: "has accepted your contact request!"
+      sign_in: "Sign in here"
+      subject: "%{name} has accepted your contact request on Diaspora*"
+    single_admin: 
+      admin: "Your Diaspora administrator"
+      subject: "A message about your Diaspora account:"
+    thanks: "Thanks,"
+  ok: "OK"
+  or: "or"
+  password: "Password"
+  password_confirmation: "Password confirmation"
+  people: 
+    add_contact_small: 
+      add_contact_from_tag: "add contact from tag"
+    aspect_list: 
+      edit_membership: "edit aspect membership"
+    few: "%{count} people"
+    helper: 
+      people_on_pod_are_aware_of: " people on pod are aware of"
+      results_for: " results for %{params}"
+    index: 
+      couldnt_find_them_send_invite: "Couldn't find them?  Send an invite!"
+      no_one_found: "...and no one was found."
+      no_results: "Hey! You need to search for something."
+      results_for: "search results for"
+    many: "%{count} people"
+    one: "1 person"
+    other: "%{count} people"
+    person: 
+      add_contact: "add contact"
+      already_connected: "Already connected"
+      pending_request: "Pending request"
+      thats_you: "That's you!"
+    profile_sidebar: 
+      bio: "bio"
+      born: "birthday"
+      cannot_remove: "Cannot remove %{name} from last aspect. (If you want to disconnect from this person you must remove contact.)"
+      edit_my_profile: "Edit my profile"
+      gender: "gender"
+      in_aspects: "in aspects"
+      location: "location"
+      remove_contact: "remove contact"
+      remove_from: "Remove %{name} from %{aspect}?"
+    show: 
+      add_some: "add some"
+      does_not_exist: "Person does not exist!"
+      edit: "edit"
+      incoming_request: "%{name} wants to share with you"
+      mention: "Mention"
+      message: "Message"
+      no_posts: "no posts to display!"
+      not_connected: "You are not sharing with this person"
+      recent_posts: "Recent Posts"
+      recent_public_posts: "Recent Public Posts"
+      return_to_aspects: "Return to your aspects page"
+      see_all: "See all"
+      start_sharing: "start sharing"
+      to_accept_or_ignore: "to accept or ignore it."
+      you_have_no_tags: "you have no tags!"
+    webfinger: 
+      fail: "Sorry, we couldn't find %{handle}."
+    zero: "no people"
+  photos: 
+    create: 
+      integrity_error: "写真のアップロードに失敗しました。確かに画像ファイルだったのでしょうか。"
+      runtime_error: "写真のアップロードに失敗しました。シートベルトはしっかりとお締めでしょうか。"
+      type_error: "写真のアップロードに失敗しました。確かに画像ファイルを添付しましたか。"
+    destroy: 
+      notice: "写真を削除しました。"
+    edit: 
+      editing: "編集中"
+    new: 
+      back_to_list: "一覧に戻る"
+      new_photo: "新しい写真"
+      post_it: "投稿する!"
+    new_photo: 
+      empty: "{file} is empty, please select files again without it."
+      invalid_ext: "{file} has invalid extension. Only {extensions} are allowed."
+      size_error: "{file} is too large, maximum file size is {sizeLimit}."
+    new_profile_photo: 
+      or_select_one: "or select one from your already existing"
+      upload: "Upload a new profile photo!"
+    photo: 
+      view_all: "%{name}の写真をすべてみる"
+    show: 
+      collection_permalink: "コレクションのパーマリンク"
+      delete_photo: "写真を削除する"
+      edit: "編集"
+      edit_delete_photo: "写真の説明を編集する/写真を削除する"
+      make_profile_photo: "プロフィール写真にする"
+      original_post: "元の投稿"
+      permalink: "パーマリンク"
+      update_photo: "写真を更新する"
+      view: "表示"
+    update: 
+      error: "Failed to edit photo."
+      notice: "Photo successfully updated."
+  post_visibilites: 
+    update: 
+      post_hidden: "%{name}'s post has been hidden."
+  posts: 
+    doesnt_exist: "that post does not exist!"
+  previous: "前へ"
+  profile: "プロフィール"
+  profiles: 
+    edit: 
+      allow_search: "ダイアスポラ内の検索を許可します"
+      edit_profile: "プロフィールの編集"
+      first_name: "名"
+      last_name: "姓"
+      update_profile: "プロフィール更新"
+      your_bio: "略歴"
+      your_birthday: "誕生日"
+      your_gender: "性別"
+      your_location: "所在地"
+      your_name: "姓名"
+      your_photo: "写真"
+      your_private_profile: "非公開プロフィール"
+      your_public_profile: "公開プロフィール"
+      your_tags: "自分を表す5つの#タグ"
+      your_tags_placeholder: "例:#ダイアスポラ #家事 #子猫 #音楽"
+    update: 
+      failed: "プロフィール更新に失敗しました"
+      updated: "プロフィールを更新しました"
+  registrations: 
+    closed: "Signups are closed on this Diaspora pod."
+    create: 
+      success: "You've joined Diaspora!"
+    edit: 
+      cancel_my_account: "Cancel my account"
+      edit: "Edit %{name}"
+      leave_blank: "(leave blank if you don't want to change it)"
+      password_to_confirm: "(we need your current password to confirm your changes)"
+      unhappy: "Unhappy?"
+      update: "Update"
+    new: 
+      enter_email: "Enter an e-mail"
+      enter_password: "Enter a password"
+      enter_password_again: "Enter the same password as before"
+      enter_username: "Pick a username (only letters, numbers, and underscores)"
+      sign_up: "Sign up"
+      sign_up_for_diaspora: "Sign up for Diaspora"
+  requests: 
+    create: 
+      sending: "Sending"
+      sent: "You've asked to share with %{name}.  They should see it next time they log in to Diaspora."
+    destroy: 
+      error: "Please select an aspect!"
+      ignore: "Ignored contact request."
+      success: "You are now sharing."
+    helper: 
+      new_requests: 
+        few: "%{count} new requests!"
+        many: "%{count} new requests!"
+        one: "new request!"
+        other: "%{count} new requests!"
+        zero: "no new requests"
+    manage_aspect_contacts: 
+      existing: "Existing contacts"
+      manage_within: "Manage contacts within"
+    new_request_to_person: 
+      sent: "sent!"
+  search: "Search"
+  services: 
+    create: 
+      success: "Authentication successful."
+    destroy: 
+      success: "Successfully deleted authentication."
+    failure: 
+      error: "there was an error connecting that service"
+    finder: 
+      friends: 
+        few: "%{count} friends"
+        many: "%{count} friends"
+        one: "1 friend"
+        other: "%{count} friends"
+        zero: "no friends"
+      invite_your_friends_from: "Invite your friends from %{service}"
+      not_connected: "not connected"
+    index: 
+      connect_to_facebook: "Connect to facebook"
+      connect_to_twitter: "Connect to twitter"
+      disconnect: "disconnect"
+      edit_services: "Edit services"
+      logged_in_as: "logged in as"
+      really_disconnect: "disconnect %{service}?"
+    inviter: 
+      click_link_to_accept_invitation: "Click this link to accept your invitation"
+      join_me_on_diaspora: "Join me on DIASPORA*"
+    remote_friend: 
+      invite: "invite"
+      resend: "resend"
+  settings: "Settings"
+  shared: 
+    add_contact: 
+      create_request: "Find by Diaspora handle"
+      diaspora_handle: "diaspora@handle.org"
+      enter_a_diaspora_username: "Enter a Diaspora username:"
+      know_email: "Know their email address? You should invite them"
+      your_diaspora_username_is: "Your Diaspora username is: %{diaspora_handle}"
+    contact_list: 
+      all_contacts: "All contacts"
+      cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)"
+    footer: 
+      logged_in_as: "logged in as %{name}"
+      your_aspects: "your aspects"
+    invitations: 
+      by_email: "by Email"
+      dont_have_now: "You don't have any right now, but more invites are coming soon!"
+      from_facebook: "From Facebook"
+      invitations_left: "(%{count} left)"
+      invite_someone: "Invite someone"
+      invite_your_friends: "Find your friends"
+      invites: "Invites"
+      invites_closed: "Invites are currently closed on this Diaspora pod"
+    notification: 
+      new: "New %{type} from %{from}"
+    public_explain: 
+      logged_in: "logged in to %{service}"
+      manage: "manage connected services"
+      outside: "Public messages will be available for others outside of Diaspora to see."
+      title: "Set up connected services"
+    publisher: 
+      add_photos: "add photos"
+      all: "all"
+      all_contacts: "all contacts"
+      click_to_share_with: "Click to share with: "
+      make_public: "make public"
+      post_a_message_to: "Post a message to %{aspect}"
+      posting: "Posting..."
+      public: "Public"
+      publishing_to: "publishing to: "
+      share: "Share"
+      share_with: "share with"
+      whats_on_your_mind: "what's on your mind?"
+    reshare: 
+      reshare: "Reshare"
+    stream_element: 
+      dislike: "I dislike this"
+      like: "I like this"
+  status_messages: 
+    create: 
+      success: "Successfully mentioned: %{names}"
+    destroy: 
+      failure: "Failed to delete post"
+    helper: 
+      no_message_to_display: "No message to display."
+    new: 
+      mentioning: "Mentioning: %{person}"
+    show: 
+      destroy: "Delete"
+      not_found: "Sorry, we couldn't find that post."
+      permalink: "permalink"
+  stream_helper: 
+    hide_comments: "コメント非表示"
+    show_comments: "すべてのコメント表示"
+  tags: 
+    show: 
+      nobody_talking: "Nobody is talking about %{tag} yet."
+      people_tagged_with: "People tagged with %{tag}"
+      posts_tagged_with: "Posts tagged with #%{tag}"
+  the_world: "the world"
+  undo: "Undo?"
+  username: "Username"
+  users: 
+    destroy: "Account successfully closed."
+    edit: 
+      also_commented: "...someone also comments on your contact's post?"
+      change: "Change"
+      change_language: "Change Language"
+      change_password: "Change Password"
+      close_account: "Close Account"
+      comment_on_post: "...someone comments on your post?"
+      current_password: "Current password"
+      download_photos: "download my photos"
+      download_xml: "download my xml"
+      edit_account: "Edit account"
+      export_data: "Export Data"
+      mentioned: "...you are mentioned in a post?"
+      new_password: "New Password"
+      private_message: "...you receive a private message?"
+      receive_email_notifications: "Receive email notifications when..."
+      request_acceptence: "...your share request is accepted?"
+      request_received: "...you receive a new share request?"
+      your_email: "Your email"
+      your_handle: "Your diaspora handle"
+    getting_started: 
+      connect_on_diaspora: "Connect on Diaspora"
+      connect_services: "Connect your other services"
+      could_not_find_anyone: "Could not find any friends on Diaspora*. Use the friend finder to invite them."
+      edit_profile: "Edit your profile"
+      finished: "Finished!"
+      save_and_continue: "Save and continue"
+      signup_steps: "Finish your sign up by completing these three steps:"
+      skip: "skip getting started"
+      step_2: 
+        find_your_friends_on_diaspora: "Would you like to find your Facebook friends on Diaspora?"
+        skip: "Skip"
+      step_3: 
+        finish: "Finish"
+        people_already_on_diaspora: "People already on Diaspora"
+      welcome: "Welcome to Diaspora!"
+    public: 
+      does_not_exist: "User %{username} does not exist!"
+    update: 
+      email_notifications_changed: "Email notifications changed"
+      language_changed: "Language Changed"
+      language_not_changed: "Language Change Failed"
+      password_changed: "Password Changed"
+      password_not_changed: "Password Change Failed"
+  webfinger: 
+    fetch_failed: "failed to fetch webfinger profile for %{profile_url}"
+    hcard_fetch_failed: "there was a problem fetching the hcard for %{account}"
+    no_person_constructed: "No person could be constructed from this hcard."
+    not_enabled: "webfinger does not seem to be enabled for %{account}'s host"
+    xrd_fetch_failed: "there was an error getting the xrd from account %{account}"
diff --git a/config/locales/diaspora/ko.yml b/config/locales/diaspora/ko.yml
new file mode 100644
index 0000000000000000000000000000000000000000..cabd0d7844a9977b671cc0b8df599f5d17327ba2
--- /dev/null
+++ b/config/locales/diaspora/ko.yml
@@ -0,0 +1,617 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+ko: 
+  _comments: "댓글"
+  _home: "처음"
+  _photos: "사진"
+  _services: "서비스"
+  account: "계정"
+  activerecord: 
+    errors: 
+      models: 
+        contact: 
+          attributes: 
+            person_id: 
+              taken: "이미 쓰이고 있습니다."
+        person: 
+          attributes: 
+            diaspora_handle: 
+              taken: "이미 쓰이고 있습니다."
+        request: 
+          attributes: 
+            from_id: 
+              taken: "이미 요청하였습니다."
+        user: 
+          attributes: 
+            email: 
+              taken: "이미 쓰이고 있습니다."
+            person: 
+              invalid: "유효하지 않습니다."
+            username: 
+              taken: "이미 쓰이고 있습니다."
+  ago: "%{time} ì „"
+  all_aspects: "모든 애스펙"
+  application: 
+    helper: 
+      unknown_person: "알 수 없는 사람"
+      video_title: 
+        unknown: "알 수 없는 비디오 제목"
+  are_you_sure: "확실합니까?"
+  aspect_memberships: 
+    destroy: 
+      failure: "애스펙에서 지우지 못했습니다"
+      no_membership: "애스펙에서 찾을 수 없는 사람입니다"
+      success: "애스펙에서 성공적으로 지웠습니다"
+  aspects: 
+    add_to_aspect: 
+      failure: "컨택을 애스펙에 넣을 수 없습니다."
+      success: "컨택을 애스펙에 성공적으로 넣었습니다."
+    aspect_contacts: 
+      done_editing: "고치기 완료"
+    aspect_stream: 
+      activity: "활동순"
+      post_time: "올린순"
+      sort_by: "순서:"
+    contacts_not_visible: "이 애스펙에 있는 사람들이 서로를 볼 수 없습니다."
+    contacts_visible: "이 애스펙에 있는 사람들이 서로를 볼 수 있습니다."
+    create: 
+      failure: "새 애스펙을 만들 수 없습니다."
+      success: "%{name} 애스펙을 만들었습니다."
+    destroy: 
+      failure: "%{name} 애스펙을 지우려면 먼저 비워야합니다."
+      success: "%{name} 애스펙을 성공적으로 지웠습니다."
+    edit: 
+      add_existing: "있는 컨택 추가"
+      aspect_list_is_not_visible: "애스펙의 다른 이들에게 애스펙 모록을 감춥니다."
+      aspect_list_is_visible: "애스펙의 다른 이들에게 애스펙 목록을 보입니다."
+      confirm_remove_aspect: "이 애스펙을 지우려는게 확실합니까?"
+      done: "완료"
+      make_aspect_list_visible: "애스펙 목록을 볼 수 있게 합니까?"
+      remove_aspect: "이 애스펙 지우기"
+      rename: "이름 바꾸기"
+      update: "갱신"
+      updating: "갱신중"
+    few: "애스펙 %{count}개"
+    helper: 
+      are_you_sure: "이 애스펙을 지우려는게 확실합니까?"
+      aspect_not_empty: "애스펙이 비어있지 않습니다"
+      remove: "지우기"
+    index: 
+      handle_explanation: "이 디아스포라 핸들은 이메일 주소처럼 남에게 건넬 수 있습니다."
+      no_contacts: "컨택 없음"
+      post_a_message: "새 메시지 올리기 >>"
+    manage: 
+      add_a_new_aspect: "애스펙 추가"
+      add_a_new_contact: "컨택 추가"
+      drag_to_add: "추가할 사람을 끌어놓으세요"
+      manage_aspects: "애스펙 관리"
+      no_requests: "새 요청 없음"
+      requests: "요청"
+    many: "애스펙 %{count}개"
+    move_contact: 
+      error: "%{inspect} 컨택을 옮기는데 에러가 발생하였습니다"
+      failure: "%{inspect} 님을 옮길 수 없습니다"
+      success: "새 애스펙으로 옮겼습니다"
+    new_aspect: 
+      create: "만들기"
+      name: "이름"
+    no_posts_message: 
+      start_talking: "아직 아무 이야기도 없습니다. 대화를 시작하세요!"
+    one: "애스펙 한 개"
+    other: "애스펙 %{count}개"
+    seed: 
+      family: "가족"
+      work: "직장"
+    show: 
+      edit_aspect: "애스펙 고치기"
+    update: 
+      failure: "%{name} 애스펙은 이름이 너무 길어 저장할 수 없습니다."
+      success: "%{name} 애스펙을 성공적으로 고쳤습니다."
+    zero: "애스펙 없음"
+  back: "돌아가기"
+  bookmarklet: 
+    explanation: "%{link} 링크를 북마크로 추가하세요."
+    explanation_link_text: "디아스포라에 올리기"
+    post_something: "디아스포라에 올리기"
+    post_success: "올렸습니다! 닫힙니다!"
+  cancel: "취소"
+  comments: 
+    few: "댓글 %{count}개"
+    many: "댓글 %{count}개"
+    new_comment: 
+      comment: "댓글 달기"
+      commenting: "댓글 다는 중···"
+    one: "댓글 한 개"
+    other: "댓글 %{count}개"
+    zero: "댓글 없음"
+  contacts: 
+    create: 
+      failure: "컨택을 만들 수 없습니다"
+    destroy: 
+      failure: "%{name} 컨택을 끊을 수 없습니다"
+      success: "%{name} 컨택을 성공적으로 끊었습니다"
+    few: "컨택 %{count}명"
+    many: "컨택 %{count}명"
+    one: "컨택 한 명"
+    other: "컨택 %{count}명"
+    share_with_pane: 
+      accepts: "%{name} 님이 수락하면 디아스포라에서 서로를 볼 수 있습니다."
+      add_new_aspect: "새 애스펙에 넣기"
+      share_with: "%{name} 님에게 공유 요청"
+    zero: "컨택 없음"
+  conversations: 
+    create: 
+      sent: "쪽지를 보냈습니다"
+    destroy: 
+      success: "대화를 성공적으로 지웠습니다"
+    helper: 
+      new_messages: 
+        few: "새 쪽지 %{count}개"
+        many: "새 쪽지 %{count}개"
+        one: "새 쪽지 한 개"
+        other: "새 쪽지 %{count}개"
+        zero: "새 쪽지 없음"
+    index: 
+      create_a_new_message: "쪽지 보내기"
+      inbox: "쪽지함"
+      message_inbox: "쪽지함"
+      new_message: "새 쪽지"
+      no_conversation_selected: "대화를 고르지 않았습니다"
+      no_messages: "쪽지 없음"
+    new: 
+      send: "보내기"
+      subject: "제목"
+      to: "받는이"
+    show: 
+      delete: "지운 뒤 대화를 차단합니다"
+      reply: "답장"
+  date: 
+    formats: 
+      birthday: "%B %d일"
+      birthday_with_year: "%Y년 %B %d일"
+      fullmonth_day: "%B %d일"
+  delete: "지우기"
+  email: "이메일"
+  error_messages: 
+    helper: 
+      correct_the_following_errors_and_try_again: "아래의 에러를 정정한 뒤 다시 시도하십시오."
+      invalid_fields: "유효하지 않은 항목"
+  fill_me_out: "채워주세요"
+  hide: "숨기기"
+  home: 
+    show: 
+      already_account: "이미 계정을 가지고 있습니까?"
+      choice: "선택"
+      choice_explanation: "디아스포라에서는 애스펙이라는 모둠으로 관계를 관리합니다. 디아스포라만의 독특함인 애스펙은 나의 사진, 이야기, 농담이 내가 의도한 사람들과만 공유되도록 보장합니다."
+      learn_about_host: "디아스포라 서버를 직접 운영하는 방법"
+      login_here: "로그인"
+      ownership: "소유권"
+      ownership_explanation: "내 사진을 내가 소유합니다. 공유하기 위해 소유권을 포기하지 않아도 됩니다. 어떻게 배포될지를 온전히 제어함으로서 디아스포라에서 공유한 모든 것들의 소유권을 유지합니다."
+      share_what_you_want: "원하는 사람들과 원하는 걸 공유하자"
+      simplicity: "간편함"
+      simplicity_explanation: "디아스포라에서는 깨끗하고 쉽게 공유합니다. 개인정보도 마친가지입니다. 본래 개인적인 디아스포라에서는 프로필 보안을 유지하기 위해 여러 페이지에 걸친 설정과 옵션을 힘겹게 거치지 않아도 됩니다."
+      tagline_first_half: "Share what you want,"
+      tagline_second_half: "with whom you want."
+  invitations: 
+    check_token: 
+      not_found: "초대장 토큰을 찾을 수 없습니다"
+    create: 
+      already_contacts: "이미 컨택인 사람입니다."
+      already_sent: "이미 초대한 사람입니다."
+      no_more: "가진 초대장 이 없습니다."
+      rejected: "아래의 이메일 주소는 문제가 있습니다: "
+      sent: "초대장이 보내진 이메일 주소: "
+    edit: 
+      sign_up: "로그인"
+    new: 
+      already_invited: "초대한 친구들"
+      aspect: "애스펙"
+      comma_seperated_plz: "쉼표로 구분하여 여러 이메일 주소를 넣을 수 있습니다."
+      if_they_accept_info: "수락한 친구는 초대했던 애스펙에 추가됩니다."
+      invite_someone_to_join: "친구를 디아스포라로 초대하세요!"
+      personal_message: "쪽지"
+      resend: "다시 보내기"
+      send_an_invitation: "초대장 보내기"
+      send_invitation: "초대장 보내기"
+      to: "받는이"
+  layouts: 
+    application: 
+      have_a_problem: "문제가 있습니까? 여기서 해결하세요"
+      powered_by: "POWERED BY DIASPORA*"
+      public_feed: "%{name} 님의 공개 디아스포라 피드"
+      toggle: "모바일 사이트 전환"
+      whats_new: "새로운 점"
+      your_aspects: "애스펙"
+    header: 
+      blog: "블로그"
+      code: "코드"
+      login: "로그인"
+      logout: "로그아웃"
+      profile: "프로필"
+      settings: "설정"
+  likes: 
+    likes: 
+      people_dislike_this: 
+        few: "%{count}명이 싫어합니다"
+        many: "%{count}명이 싫어합니다"
+        one: "한 명이 싫어합니다"
+        other: "%{count}명이 싫어합니다"
+        zero: "아무도 싫어하지 않습니다"
+      people_like_this: 
+        few: "%{count}명이 좋아합니다"
+        many: "%{count}명이 좋아합니다"
+        one: "한 명이 좋아합니다"
+        other: "%{count}명이 좋아합니다"
+        zero: "아무도 좋아하지 않습니다"
+  more: "더"
+  next: "다음"
+  no_results: "결과 없음"
+  notifications: 
+    also_commented: " 님도 댓글을 달았습니다: %{post_author} 님의"
+    also_commented_deleted: "지워진 공유물에 댓글을 달았습니다:"
+    comment_on_post: " 님이 댓글을 달았습니다:"
+    deleted: "지워졌습니다."
+    helper: 
+      new_notifications: 
+        few: "새 알림 %{count}개"
+        many: "새 알림 %{count}개"
+        one: "새 알림 한 개"
+        other: "새 알림 %{count}개"
+        zero: "새 알림 없음"
+    index: 
+      and: "그리고"
+      and_others: "나머지 %{number}개"
+      mark_all_as_read: "모두 읽음으로 표시"
+      notifications: "알림"
+    mentioned: " 님이 귀하를 멘션하였습니다."
+    new_request: " 님이 공유를 요청하였습니다."
+    post: "공유물"
+    private_message: " 님이 쪽지를 보냈습니다."
+    request_accepted: " 님이 공유 요청을 수락하였습니다."
+  notifier: 
+    also_commented: 
+      commented: "님도 %{post_author} 님의 공유물에 댓글을 달았습니다:"
+      sign_in: "로그인하기"
+      subject: "%{name} 님도 %{post_author} 님의 공유물에 댓글을 달았습니다."
+    comment_on_post: 
+      commented: "님이 귀하의 공유물에 댓글을 달았습니다:"
+      sign_in: "로그인하기"
+      subject: "%{name} 님이 귀하의 공유물에 댓글을 달았습니다."
+    diaspora: "디아스포라 자동 이메일"
+    hello: "%{name} 님!"
+    love: ""
+    manage_your_email_settings: "이메일 설정 관리"
+    mentioned: 
+      mentioned: "님이 디아스포라*의 글에서 귀하를 멘션했습니다:"
+      sign_in: "로그인하기"
+      subject: "%{name} 님이 디아스포라*에서 귀하를 멘션했습니다"
+    new_request: 
+      just_sent_you: "님이 방금 디아스포라*에서 새 요청을 보냈습니다"
+      sign_in: "로그인하기"
+      subject: "%{from} 님이 새 디아스포라* 컨택 요청"
+      try_it_out: "꼭 확인해보세요!"
+    private_message: 
+      message_subject: "제목: %{subject}"
+      private_message: "님이 디아스포라*에서 쪽지를 보냈습니다:"
+      sign_in: "로그인하기"
+      subject: "%{name} 님이 디아스포라*에서 쪽지를 보냈습니다"
+    request_accepted: 
+      accepted: "님이 공유 요청을 수락했습니다!"
+      sign_in: "로그인하기"
+      subject: "%{name} 님이 디아스포라*에서 공유 요청을 수락했습니다"
+    single_admin: 
+      admin: "디아스포라 관리자"
+      subject: "귀하의 디아스포라 계정에 대한 메시지:"
+    thanks: "고맙습니다."
+  ok: "확인"
+  or: "또는"
+  password: "암호"
+  password_confirmation: "암호 확인"
+  people: 
+    add_contact_small: 
+      add_contact_from_tag: "태그에서 컨택 추가"
+    aspect_list: 
+      edit_membership: "속한 애스펙 고치기"
+    few: "%{count}명"
+    helper: 
+      people_on_pod_are_aware_of: " people on pod are aware of"
+      results_for: "%{params} ê²°ê³¼"
+    index: 
+      couldnt_find_them_send_invite: "찾을 수 없는 사람들을 초대하세요!"
+      no_one_found: "검색 결과가 없습니다"
+      no_results: "검색 결과가 없습니다"
+      results_for: "검색 결과:"
+    many: "%{count}명"
+    one: "한 명"
+    other: "%{count}명"
+    person: 
+      add_contact: "컨택 추가"
+      already_connected: "이미 연결되었습니다"
+      pending_request: "이미 요청하였습니다"
+      thats_you: "바로 나!"
+    profile_sidebar: 
+      bio: "자기소개"
+      born: "생년월일"
+      cannot_remove: "모든 컨택은 적어도 한 애스펙에 속해야 합니다. 공유를 끊고 싶다면 컨택을 지워야 합니다."
+      edit_my_profile: "프로필 고치기"
+      gender: "성별"
+      in_aspects: "속한 애스펙:"
+      location: "위치"
+      remove_contact: "컨택 지우기"
+      remove_from: "%{aspect}에서 %{name} 님을 지울까요?"
+    show: 
+      add_some: "태그 달기"
+      does_not_exist: "없는 사람입니다!"
+      edit: "고치기"
+      incoming_request: "%{name} 님이 공유를 요청했습니다"
+      mention: "멘션"
+      message: "쪽지"
+      no_posts: "보여줄 공유물이 없습니다!"
+      not_connected: "열결되지 않은 사람입니다"
+      recent_posts: "최근 공유물"
+      recent_public_posts: "최근 공개 공유물"
+      return_to_aspects: "애스펙 페이지로 돌아가"
+      see_all: "모두 보기"
+      start_sharing: "공유 요청"
+      to_accept_or_ignore: "수락 또는 거절하기"
+      you_have_no_tags: "달아둔 태그가 없습니다!"
+    webfinger: 
+      fail: "%{handle} 핸들을 찾을 수 없습니다."
+    zero: "없음"
+  photos: 
+    create: 
+      integrity_error: "사진 업로드할 수 없습니다. 이미지가 맞습니까?"
+      runtime_error: "사진을 업로드할 수 없습니다. 안전벨트를 확인하셨습니까?"
+      type_error: "사진 업로드 실패. 이미지를 추가하지 않았습니다."
+    destroy: 
+      notice: "사진을 지웠습니다"
+    edit: 
+      editing: "고치는 중"
+    new: 
+      back_to_list: "목록으로 돌아가기"
+      new_photo: "새 사진"
+      post_it: "올리기!"
+    new_photo: 
+      empty: "{file} 파일은 빈 파일입니다. 이 파일만 빼고 다시 시도하세요."
+      invalid_ext: "{file} 파일은 유효하지 않은 형식입니다. {extensions} 형식의 파일을 올려주세요."
+      size_error: "{file} 파일이 {sizeLimit} 보다 큽니다"
+    new_profile_photo: 
+      or_select_one: "올려둔 사진 가운데 고르기"
+      upload: "새 프로필 사진 업로드하기!"
+    photo: 
+      view_all: "%{name} 님의 모든 사진 보기"
+    show: 
+      collection_permalink: "사진집 영구주소"
+      delete_photo: "사진 지우기"
+      edit: "고치기"
+      edit_delete_photo: "사진 설명 고치기 / 사진 지우기"
+      make_profile_photo: "프로필 사진 만들기"
+      original_post: "원래 공유물"
+      permalink: "영구주소"
+      update_photo: "사진 갱신"
+      view: "보기"
+    update: 
+      error: "사진 고치기 실패."
+      notice: "사진을 성공적으로 갱신했습니다."
+  post_visibilites: 
+    update: 
+      post_hidden: "%{name} 님의 공유물을 감췄습니다."
+  posts: 
+    doesnt_exist: "없는 공유물입니다!"
+  previous: "이전"
+  profile: "프로필"
+  profiles: 
+    edit: 
+      allow_search: "디아스포라에서 검색됩니다"
+      edit_profile: "프로필 고치기"
+      first_name: "이름"
+      last_name: "성씨"
+      update_profile: "프로필 갱신"
+      your_bio: "자기소개"
+      your_birthday: "생년월일"
+      your_gender: "성별"
+      your_location: "위치"
+      your_name: "이름"
+      your_photo: "사진"
+      your_private_profile: "개인 프로필"
+      your_public_profile: "공개 프로필"
+      your_tags: "태그 #tag"
+      your_tags_placeholder: "예) #diaspora #ironing #kittens #music"
+    update: 
+      failed: "프로필 갱신 실패"
+      updated: "프로필을 갱신하였습니다"
+  registrations: 
+    closed: "우리 디아스포라 팓은 가입이 닫혀있습니다."
+    create: 
+      success: "디아스포라에 가입되었습니다!"
+    edit: 
+      cancel_my_account: "취소"
+      edit: "%{name} 고치기"
+      leave_blank: "(바꾸지 않으려면 비워두세요)"
+      password_to_confirm: "(암호를 바꾸려면 원래 암호가 필요합니다)"
+      unhappy: "무슨 문제라도?"
+      update: "갱신하기"
+    new: 
+      enter_email: "이메일 주소를 입력하세요"
+      enter_password: "암호를 입력하세요"
+      enter_password_again: "암호를 다시 입력하세요"
+      enter_username: "사용자명을 선택하세요 (로마자, 아라비아 숫자, 언더스코어만)"
+      sign_up: "가입하기"
+      sign_up_for_diaspora: "디아스포라에 가입하기"
+  requests: 
+    create: 
+      sending: "공유를 요청하고 있습니다."
+      sent: "%{name} 님에게 공유를 요청하였습니다."
+    destroy: 
+      error: "애스펙을 골라주세요!"
+      ignore: "공유 요청을 거절하였습니다."
+      success: "공유하고 있습니다."
+    helper: 
+      new_requests: 
+        few: "요청이 %{count}개 들어왔습니다!"
+        many: "요청이 %{count}개 들어왔습니다!"
+        one: "요청이 한 개 들어왔습니다!"
+        other: "요청이 %{count}개 들어왔습니다!"
+        zero: "요청 없음"
+    manage_aspect_contacts: 
+      existing: "Existing contacts"
+      manage_within: "컨택 관리하기:"
+    new_request_to_person: 
+      sent: "요청하였습니다!"
+  search: "검색"
+  services: 
+    create: 
+      success: "성공적으로 인증되었습니다."
+    destroy: 
+      success: "인증을 성공적으로 지웠습니다."
+    failure: 
+      error: "서비스 연결중 에러가 발생하였습니다"
+    finder: 
+      friends: 
+        few: "친구 %{count}명"
+        many: "친구 %{count}명"
+        one: "친구 한 명"
+        other: "친구 %{count}명"
+        zero: "친구 없음"
+      invite_your_friends_from: "%{service} 서비스에서 친구 초대하기"
+      not_connected: "연결 없음"
+    index: 
+      connect_to_facebook: "페이스북에 연결"
+      connect_to_twitter: "트위터에 연결"
+      disconnect: "끊기"
+      edit_services: "서비스 설정"
+      logged_in_as: "로그인 중: "
+      really_disconnect: "%{service} 서비스를 끊으시겠습니까?"
+    inviter: 
+      click_link_to_accept_invitation: "초대를 수락려면 클릭하세요!"
+      join_me_on_diaspora: "디아스포라*에서 만나요!"
+    remote_friend: 
+      invite: "초대하기"
+      resend: "다시 보내기"
+  settings: "설정"
+  shared: 
+    add_contact: 
+      create_request: "디아스포라 핸들로 찾기"
+      diaspora_handle: "diaspora@handle.org"
+      enter_a_diaspora_username: "디아스포라 사용자명을 입력하세요:"
+      know_email: "이메일 주소를 알면 초대할 수 있습니다!"
+      your_diaspora_username_is: "내 디아스포라 핸들: %{diaspora_handle}"
+    contact_list: 
+      all_contacts: "모든 컨택"
+      cannot_remove: "모든 컨택은 적어도 하나의 애스펙에 속해야 합니다. 연결을 끊으려면 컨택을 지우세요."
+    footer: 
+      logged_in_as: "%{name}로 로그인중"
+      your_aspects: "내 애스펙"
+    invitations: 
+      by_email: "이메일 초대"
+      dont_have_now: "지금은 초대할 수 없습니다."
+      from_facebook: "페이스북에서 찾기"
+      invitations_left: "(%{count}통 남음)"
+      invite_someone: "초대하기"
+      invite_your_friends: "친구 초대하기"
+      invites: "초대"
+      invites_closed: "이 디아스포라는 초대가 닫혀있습니다."
+    notification: 
+      new: "%{from} 님의 새 %{type}"
+    public_explain: 
+      logged_in: "%{service}에 로그인 되었습니다"
+      manage: "연결된 서비스 관리"
+      outside: "공개 공유물은 디아스포라 밖의 사람들도 볼 수 있습니다."
+      title: "서비스 설정"
+    publisher: 
+      add_photos: "사진 추가"
+      all: "모두"
+      all_contacts: "모든 컨택"
+      click_to_share_with: "공유할 대상을 클릭:"
+      make_public: "공개하기"
+      post_a_message_to: "%{aspect}에 공유물 올리기"
+      posting: "올리는 중···"
+      public: "공개"
+      publishing_to: "올릴 곳: "
+      share: "공유"
+      share_with: "공유하기: "
+      whats_on_your_mind: "무슨 생각해요?"
+    reshare: 
+      reshare: "재공유"
+    stream_element: 
+      dislike: "싪어요"
+      like: "좋아요"
+  status_messages: 
+    create: 
+      success: "%{names} 님을 성공적으로 멘션했습니다."
+    destroy: 
+      failure: "공유물을 지울 수 없습니다."
+    helper: 
+      no_message_to_display: "보여줄 공유물이 없습니다."
+    new: 
+      mentioning: "%{person} 님을 멘션합니다"
+    show: 
+      destroy: "지우기"
+      not_found: "공유물을 찾을 수 없습니다."
+      permalink: "영구주소"
+  stream_helper: 
+    hide_comments: "댓글 감추기"
+    show_comments: "댓글 보기"
+  tags: 
+    show: 
+      nobody_talking: "아직 %{tag} 태그가 달린 공유물이 없습니다."
+      people_tagged_with: "%{tag} 태그가 달린 사람들"
+      posts_tagged_with: "#%{tag} 태그가 달린 공유물"
+  the_world: "공개"
+  undo: "돌이키겠습니까?"
+  username: "사용자명"
+  users: 
+    destroy: "계정을 성공적으로 없앴습니다."
+    edit: 
+      also_commented: "댓글 달았던 공유물에 내 컨택도 댓글을 달았을 때"
+      change: "바꾸기"
+      change_language: "언어 바꾸기"
+      change_password: "암호 바꾸기"
+      close_account: "계정 없애기"
+      comment_on_post: "내 공유물에 댓글이 달렸을 때"
+      current_password: "원래 암호"
+      download_photos: "내 사진 다운로드"
+      download_xml: "내 xml 다운로드"
+      edit_account: "계정 고치기"
+      export_data: "자료 뽑아내기"
+      mentioned: "내가 멘션되었을 때"
+      new_password: "새 암호"
+      private_message: "쪽지를 받았을 때"
+      receive_email_notifications: "이럴 때 이메일 알림을 받겠습니다"
+      request_acceptence: "요청했던 공유가 수락되었을 때"
+      request_received: "새로운 공유 요청을 받았을 때"
+      your_email: "이메일 주소"
+      your_handle: "디아스포라 핸들"
+    getting_started: 
+      connect_on_diaspora: "디아스포라에서 공유를 요청하세요"
+      connect_services: "다른 서비스와 연결하세요"
+      could_not_find_anyone: "디아스포라*에서 친구를 찾을 수 없습니다. 친구를 초대하세요!"
+      edit_profile: "프로필을 고치세요"
+      finished: "완료!"
+      save_and_continue: "저장하고 다음으로"
+      signup_steps: "세 단계를 더 거치면 가입을 마칠 수 있습니다."
+      skip: "넘기기"
+      step_2: 
+        find_your_friends_on_diaspora: "페이스북 친구들을 디아스포라로 초대하세요!"
+        skip: "넘기기"
+      step_3: 
+        finish: "마치기"
+        people_already_on_diaspora: "디아스포라에 가입한 사람들"
+      welcome: "디아스포라에 오신걸 환영합니다!"
+    public: 
+      does_not_exist: "%{username} 님을 찾을 수 없습니다!"
+    update: 
+      email_notifications_changed: "이메일 알림을 바꿨습니다"
+      language_changed: "언어를 바꿨습니다"
+      language_not_changed: "언어를 바꿀 수 없습니다"
+      password_changed: "암호를 바꿨습니다"
+      password_not_changed: "암호를 바꿀 수 없습니다"
+  webfinger: 
+    fetch_failed: "failed to fetch webfinger profile for %{profile_url}"
+    hcard_fetch_failed: "there was a problem fetching the hcard for %{account}"
+    no_person_constructed: "No person could be constructed from this hcard."
+    not_enabled: "webfinger does not seem to be enabled for %{account}'s host"
+    xrd_fetch_failed: "there was an error getting the xrd from account %{account}"
diff --git a/config/locales/diaspora/lt.yml b/config/locales/diaspora/lt.yml
index e4eb0e8632616640ce22e32de247a717de8a2446..5f82d097dfb2c725a3fec97c9efbeb74584cace7 100644
--- a/config/locales/diaspora/lt.yml
+++ b/config/locales/diaspora/lt.yml
@@ -354,7 +354,7 @@ lt:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Grįžti į aspektų puslapį"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "priimti arba ignoruoti."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/mk.yml b/config/locales/diaspora/mk.yml
index 634468a00d077f1ec36766f11e9a71f575e46b76..78529c29a990ac7575e03b4968dd82dc4d18d33c 100644
--- a/config/locales/diaspora/mk.yml
+++ b/config/locales/diaspora/mk.yml
@@ -354,7 +354,7 @@ mk:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "to accept or ignore it."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/ml.yml b/config/locales/diaspora/ml.yml
index 9e8f70376c5565942dc5c772f94290e38fed6d72..e47920b8101190ce4200a720546017a786daf6d6 100644
--- a/config/locales/diaspora/ml.yml
+++ b/config/locales/diaspora/ml.yml
@@ -144,7 +144,7 @@ ml:
     zero: "സമ്പര്‍ക്കമൊന്നുമില്ല"
   conversations: 
     create: 
-      sent: "Message sent"
+      sent: "സന്ദേശം അയച്ചിരിക്കുന്നു"
     destroy: 
       success: "Conversation successfully removed"
     helper: 
@@ -160,7 +160,7 @@ ml:
       message_inbox: "Message Inbox"
       new_message: "പുതിയ സന്ദേശം"
       no_conversation_selected: "no conversation selected"
-      no_messages: "no messages"
+      no_messages: "സന്ദേശങ്ങളൊന്നും ഇല്ല"
     new: 
       send: "അയക്കു"
       subject: "വിഷയം"
@@ -222,7 +222,7 @@ ml:
       have_a_problem: "പ്രശ്നമുണ്ടോ?"
       powered_by: "ഡയസ്പോറയാല്‍* ശക്തമാക്കിയത്"
       public_feed: "Public Diaspora Feed for %{name}"
-      toggle: "toggle mobile site"
+      toggle: "മൊബൈല്‍ സൈറ്റിലേക്ക് മാറുക"
       whats_new: "പുതിയത്?"
       your_aspects: "നിങ്ങളുടെ പരിചയങ്ങള്‍"
     header: 
@@ -241,10 +241,10 @@ ml:
         other: "%{count} people disliked this"
         zero: "no people disliked this"
       people_like_this: 
-        few: "%{count} people liked this"
-        many: "%{count} people liked this"
-        one: "1 person liked this"
-        other: "%{count} people liked this"
+        few: "%{count} ആളുകള്‍ ഇത് ഇഷ്ടപ്പെടുന്നു"
+        many: "%{count} ആളുകള്‍ ഇത് ഇഷ്ടപ്പെടുന്നു"
+        one: "ഒരാള്‍ ഇത് ഇഷ്ടപ്പെടുന്നു"
+        other: "%{count} ആളുകള്‍ ഇത് ഇഷ്ടപ്പെടുന്നു"
         zero: "no people liked this"
   more: "കൂടുതല്‍"
   next: "അടുത്തത്"
@@ -354,7 +354,7 @@ ml:
       recent_posts: "സമീപകാല കുറിപ്പുകള്‍"
       recent_public_posts: "സമീപകാല പൊതു കുറിപ്പുകള്‍"
       return_to_aspects: "താങ്കളുടെ പരിചയം താളിലേയ്ക്ക് തിരിച്ച് പോവുക"
-      similar_contacts: "സാമ്യമുള്ള സമ്പര്‍ക്കങ്ങള്‍"
+      see_all: "See all"
       start_sharing: "പങ്കുവച്ച് തുടങ്ങുക"
       to_accept_or_ignore: "to accept or ignore it."
       you_have_no_tags: "you have no tags!"
@@ -384,7 +384,7 @@ ml:
     photo: 
       view_all: "%{name}യുടെ എല്ലാ ചിത്രങ്ങളും കാണുക"
     show: 
-      collection_permalink: "collection permalink"
+      collection_permalink: "ശേഖരണത്തിന്റെ സ്ഥിരംകണ്ണി"
       delete_photo: "ചിത്രം നീക്കുക"
       edit: "തിരുത്തുക"
       edit_delete_photo: "ചിത്രത്തിന്റെ വിവരണം തിരുത്തുക / ചിത്രം നീക്കം ചെയ്യുക"
@@ -398,7 +398,7 @@ ml:
       notice: "ചിത്രം വിജയകരമായി പുതുക്കി."
   post_visibilites: 
     update: 
-      post_hidden: "%{name}'s post has been hidden."
+      post_hidden: "%{name}ന്റെ പോസ്റ്റ് മറച്ചിരിക്കുന്നു."
   posts: 
     doesnt_exist: "ഈ കുറിപ്പ് നിലവിലില്ല!"
   previous: "മുന്‍‌പത്തെ"
@@ -550,7 +550,7 @@ ml:
       mentioning: "Mentioning: %{person}"
     show: 
       destroy: "നീക്കം ചെയ്യുക"
-      not_found: "Sorry, we couldn't find that post."
+      not_found: "ക്ഷമിക്കണം, പോസ്റ്റ് കണ്ടെത്താനായില്ല."
       permalink: "സ്ഥിരം കണ്ണി"
   stream_helper: 
     hide_comments: "അഭിപ്രായങ്ങള്‍ മറയ്ക്കുക"
@@ -564,7 +564,7 @@ ml:
   undo: "Undo?"
   username: "ഉപയോക്തൃനാമം"
   users: 
-    destroy: "അക്കൌണ്ട് വിജയകരമായി അവസാനിപ്പിച്ചു."
+    destroy: "Account successfully closed."
     edit: 
       also_commented: "...someone also comments on your contact's post?"
       change: "മാറ്റുക"
diff --git a/config/locales/diaspora/nb.yml b/config/locales/diaspora/nb.yml
index e77e2f34be4d475776df09ad1419294637803339..7ef93986e24ed367e868d417efb4b5be3375f339 100644
--- a/config/locales/diaspora/nb.yml
+++ b/config/locales/diaspora/nb.yml
@@ -354,7 +354,7 @@ nb:
       recent_posts: "Nylige Innlegg"
       recent_public_posts: "Nylige Offentlige Innlegg"
       return_to_aspects: "Tilbake til aspektene"
-      similar_contacts: "lignende kontakter"
+      see_all: "See all"
       start_sharing: "begynn å dele"
       to_accept_or_ignore: "for å akseptere eller ignorere."
       you_have_no_tags: "du har ingen tagger!"
diff --git a/config/locales/diaspora/nl.yml b/config/locales/diaspora/nl.yml
index 76e5dcd65ee66dd42a55c09d80ea2449bad003d9..efd75e4664ea9b71867ca91e9cb91cf3ab6cf061 100644
--- a/config/locales/diaspora/nl.yml
+++ b/config/locales/diaspora/nl.yml
@@ -266,7 +266,7 @@ nl:
       and_others: "en %{number} anderen"
       mark_all_as_read: "Markeer alles gelezen"
       notifications: "Notificaties"
-    mentioned: "heeft je genoemd in zijn/haar"
+    mentioned: "heeft je genoemd in een post"
     new_request: "bood aan om met jou te delen."
     post: "post"
     private_message: "heeft je een bericht gestuurd."
@@ -346,7 +346,7 @@ nl:
       add_some: "Voeg toe"
       does_not_exist: "Die persoon bestaat niet!"
       edit: "bewerk"
-      incoming_request: "% {name} wil met je delen"
+      incoming_request: "%{name} wil met je delen"
       mention: "Noemen"
       message: "Bericht"
       no_posts: "geen berichten om weer te geven!"
@@ -354,7 +354,7 @@ nl:
       recent_posts: "Recente Berichten"
       recent_public_posts: "Recente Openbare Berichten"
       return_to_aspects: "Ga terug naar je aspecten pagina"
-      similar_contacts: "vergelijkbare contacten"
+      see_all: "Zie alles"
       start_sharing: "start met delen"
       to_accept_or_ignore: "om te accepteren of te negeren."
       you_have_no_tags: "je hebt geen tags!"
diff --git a/config/locales/diaspora/pa.yml b/config/locales/diaspora/pa.yml
index ef84b1dee7166422fa1f0df52e2723116e47f971..0495143c69bc185d0a89200b601bc5735e0d7cd9 100644
--- a/config/locales/diaspora/pa.yml
+++ b/config/locales/diaspora/pa.yml
@@ -354,7 +354,7 @@ pa:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "ਰਲਦੇ ਸੰਪਰਕ"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "to accept or ignore it."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/pl.yml b/config/locales/diaspora/pl.yml
index 7c5f4e7ec7d9391a780e4b9970e3cbacb5c6aa6a..4d954ea8ff65f5ddd3f626ef835ccd675ec9b7cb 100644
--- a/config/locales/diaspora/pl.yml
+++ b/config/locales/diaspora/pl.yml
@@ -27,24 +27,24 @@ pl:
         user: 
           attributes: 
             email: 
-              taken: "is already taken."
+              taken: "jest już używany."
             person: 
               invalid: "is invalid."
             username: 
-              taken: "is already taken."
+              taken: "jest już zajęta."
   ago: "%{time} temu"
-  all_aspects: "All aspects"
+  all_aspects: "Wszystkie aspekty"
   application: 
     helper: 
       unknown_person: "nieznana osoba"
       video_title: 
-        unknown: "Unknown Video Title"
+        unknown: "Wideo bez nazwy"
   are_you_sure: "Na pewno?"
   aspect_memberships: 
     destroy: 
-      failure: "Failed to remove person from aspect"
-      no_membership: "Could not find the selected person in that aspect"
-      success: "Successfully removed person from aspect"
+      failure: "Nie udało się usunąć osoby z aspektu"
+      no_membership: "Nie udało się odnaleźć wskazanej osoby w tym aspekcie"
+      success: "Osoba pomyślnie usunięta z aspektu"
   aspects: 
     add_to_aspect: 
       failure: "Nie udało się dodać kontaktu do aspektu."
@@ -52,29 +52,29 @@ pl:
     aspect_contacts: 
       done_editing: "edycja zakończona"
     aspect_stream: 
-      activity: "activity"
-      post_time: "post time"
-      sort_by: "sort by:"
+      activity: "aktywność"
+      post_time: "data wpisu"
+      sort_by: "sortuj po:"
     contacts_not_visible: "Kontakty z tego aspektu nie będą dla siebie widoczne."
     contacts_visible: "Kontakty z tego aspektu będą widziały się nawzajem."
     create: 
       failure: "Nie udało się utworzyć aspektu."
       success: "Twój nowy aspekt, on nazwie %{name}, został utworzony"
     destroy: 
-      failure: "%{name} is not empty and could not be removed."
+      failure: "%{name} nie jest pusty i nie może być usunięty."
       success: "%{name} został usunięty."
     edit: 
       add_existing: "Dodaj istniejÄ…cy kontakt"
-      aspect_list_is_not_visible: "aspect list is hidden to others in aspect"
-      aspect_list_is_visible: "aspect list is visible to others in aspect"
+      aspect_list_is_not_visible: "lista aspektów jest ukryta przed innymi z tego aspektu"
+      aspect_list_is_visible: "lista aspektów jest widoczna dla innych z tego aspektu"
       confirm_remove_aspect: "@{m,f:Jesteś|n:Czy na}{ pew}{m:ien|f:na|n:no}{m,f:, że } chcesz usunąć ten aspekt?"
-      done: "Done"
-      make_aspect_list_visible: "make aspect list visible?"
+      done: "Zrobione"
+      make_aspect_list_visible: "uczyń listę aspektów widoczną?"
       remove_aspect: "Usuń ten aspekt"
       rename: "zmień nazwę"
-      update: "update"
+      update: "aktualizuj"
       updating: "updating"
-    few: "%{count} aspects"
+    few: "%{count} aspekty"
     helper: 
       are_you_sure: "@{m,f:Jesteś|n:Czy na}{ pew}{m:ien|f:na|n:no}{m,f:, że } chcesz usunąć ten aspekt?"
       aspect_not_empty: "Aspekt nie jest pusty"
@@ -82,7 +82,7 @@ pl:
     index: 
       handle_explanation: "To jest Twój identyfikator w Diasporze. Podobnie jak adresu e-mailowy, możesz podawać go innym, aby mogli się z Tobą skontaktować."
       no_contacts: "Brak kontaktów"
-      post_a_message: "post a message >>"
+      post_a_message: "napisz wiadomość >>"
     manage: 
       add_a_new_aspect: "Dodaj nowy aspekt"
       add_a_new_contact: "Dodaj nowy kontakt"
@@ -90,7 +90,7 @@ pl:
       manage_aspects: "ZarzÄ…dzanie aspektami"
       no_requests: "Brak nowych zaproszeń"
       requests: "Zaproszenia"
-    many: "%{count} aspects"
+    many: "%{count} aspektów"
     move_contact: 
       error: "BÅ‚Ä…d przy przenoszeniu kontaktu: %{inspect}"
       failure: "nie zadziałało %{inspect}"
@@ -100,74 +100,74 @@ pl:
       name: "Nazwa"
     no_posts_message: 
       start_talking: "Nikt jeszcze nic nie powiedział. Rozkręć rozmowę!"
-    one: "1 aspect"
-    other: "%{count} aspects"
+    one: "1 aspekt"
+    other: "%{count} aspektów"
     seed: 
       family: "Rodzina"
       work: "Praca"
     show: 
       edit_aspect: "edytuj aspekt"
     update: 
-      failure: "Your aspect, %{name}, had too long name to be saved."
+      failure: "Twój aspekt %{name} nie mógł zostać zapisany z powodu zbyt długiej nazwy."
       success: "Twój aspekt '%{name}' został pomyślnie zmieniony."
-    zero: "no aspects"
+    zero: "brak aspektów"
   back: "Wróć"
   bookmarklet: 
-    explanation: "%{link} from anywhere by bookmarking this link."
-    explanation_link_text: "Post to Diaspora"
-    post_something: "Post something to Diaspora"
+    explanation: "%{link} z każdego miejsca dodając ten link do zakładek."
+    explanation_link_text: "Publikuj w serwisie Diaspora"
+    post_something: "Napisz coÅ› na Diasporze"
     post_success: "Posted! Closing!"
   cancel: "Anuluj"
   comments: 
-    few: "%{count} comments"
-    many: "%{count} comments"
+    few: "%{count} komentarze"
+    many: "%{count} komentarzy"
     new_comment: 
       comment: "Skomentuj…"
       commenting: "Komentowanie…"
-    one: "1 comment"
-    other: "%{count} comments"
-    zero: "no comments"
+    one: "1 komentarz"
+    other: "%{count} komentarzy"
+    zero: "brak komentarzy"
   contacts: 
     create: 
-      failure: "Failed to create contact"
+      failure: "Nie udało się utworzyć kontaktu"
     destroy: 
-      failure: "Failed to disconnect from %{name}"
-      success: "Successfully disconnected from %{name}"
+      failure: "Nie udało się odłączyć od %{name}"
+      success: "Pomyślnie odłączono od %{name}"
     few: "%{count} kontakty"
-    many: "%{count} contacts"
+    many: "%{count} kontaktów"
     one: "1 kontakt"
     other: "%{count} kontaktów"
     share_with_pane: 
-      accepts: "Once %{name} accepts, you'll start seeing each other's posts on Diaspora"
-      add_new_aspect: "add to new aspect"
-      share_with: "Start sharing with %{name}"
+      accepts: "Kiedy %{name} zaakceptuje zaproszenie, zaczniecie widzieć nawzajem swoje wpisy w serwisie Diaspora"
+      add_new_aspect: "dodaj do nowego aspektu"
+      share_with: "Zacznij współdzielić z %{name}"
     zero: "brak kontaktów"
   conversations: 
     create: 
-      sent: "Message sent"
+      sent: "Wiadomość została wysłana"
     destroy: 
-      success: "Conversation successfully removed"
+      success: "Pomyślnie usunięto rozmowę"
     helper: 
       new_messages: 
-        few: "%{count} new messages"
-        many: "%{count} new messages"
-        one: "1 new messages"
-        other: "%{count} new messages"
-        zero: "no new messages"
+        few: "%{count} nowe wiadomości"
+        many: "%{count} nowych wiadomości"
+        one: "1 nowa wiadomość"
+        other: "%{count} nowych wiadomości"
+        zero: "brak nowych wiadomości"
     index: 
-      create_a_new_message: "create a new message"
-      inbox: "Inbox"
-      message_inbox: "Message Inbox"
-      new_message: "New Message"
-      no_conversation_selected: "no conversation selected"
-      no_messages: "no messages"
+      create_a_new_message: "stwórz nową wiadomość"
+      inbox: "Skrzynka odbiorcza"
+      message_inbox: "Skrzynka odbiorcza"
+      new_message: "Nowa wiadomość"
+      no_conversation_selected: "nie wybrano wÄ…tku"
+      no_messages: "brak wiadomości"
     new: 
-      send: "Send"
-      subject: "subject"
-      to: "to"
+      send: "Wyślij"
+      subject: "temat"
+      to: "do"
     show: 
-      delete: "delete and block conversation"
-      reply: "reply"
+      delete: "usuń i zablokuj rozmowę"
+      reply: "odpowiedz"
   date: 
     formats: 
       birthday: "%d %B"
@@ -180,7 +180,7 @@ pl:
       correct_the_following_errors_and_try_again: "Popraw poniższe błędy i spróbuj ponownie."
       invalid_fields: "Pola z błędami"
   fill_me_out: "Wypełnij to pole"
-  hide: "Hide"
+  hide: "Ukryj"
   home: 
     show: 
       already_account: "masz już konto?"
@@ -207,13 +207,13 @@ pl:
     edit: 
       sign_up: "rejestracja"
     new: 
-      already_invited: "Already invited"
+      already_invited: "Już zaproszony"
       aspect: "Aspekt"
       comma_seperated_plz: "Możesz podać kilka adresów e-mailowych, oddzielając je przecinkami."
       if_they_accept_info: "Jeśli wybrana osoba przyjmie zaproszenie, zostanie dodana do aspektów, do których ją zapros@{m:iłeś|f:iłaś|n:zono}."
       invite_someone_to_join: "ZaproÅ› kogoÅ› do Diaspory!"
       personal_message: "Dodatkowa wiadomość"
-      resend: "Resend"
+      resend: "Wyślij ponownie"
       send_an_invitation: "Wyślij zaproszenie"
       send_invitation: "Wyślij zaproszenie"
       to: "Do"
@@ -221,85 +221,85 @@ pl:
     application: 
       have_a_problem: "Masz problem? Tu znajdziesz rozwiÄ…zanie"
       powered_by: "POWERED BY DIASPORA*"
-      public_feed: "Public Diaspora Feed for %{name}"
+      public_feed: "Publiczny kanał Diaspory użytkownika %{name}"
       toggle: "przełącz widok mobilny"
-      whats_new: "what's new?"
-      your_aspects: "your aspects"
+      whats_new: "co nowego?"
+      your_aspects: "twoje aspekty"
     header: 
       blog: "blog"
       code: "kod"
       login: "logowanie"
       logout: "wyloguj"
-      profile: "profile"
-      settings: "settings"
+      profile: "profil"
+      settings: "ustawienia"
   likes: 
     likes: 
       people_dislike_this: 
-        few: "%{count} people disliked this"
-        many: "%{count} people disliked this"
-        one: "1 person disliked this"
-        other: "%{count} people disliked this"
+        few: "%{count} osoby nie lubiÄ… tego"
+        many: "%{count} osób nie lubi tego"
+        one: "1 osoba tego nie lubi"
+        other: "%{count} osób nie lubi tego"
         zero: "no people disliked this"
       people_like_this: 
-        few: "%{count} people liked this"
-        many: "%{count} people liked this"
-        one: "1 person liked this"
-        other: "%{count} people liked this"
-        zero: "no people liked this"
-  more: "More"
-  next: "next"
-  no_results: "No Results Found"
+        few: "%{count} osoby polubiły to"
+        many: "%{count} osób polubiło to"
+        one: "1 osoba to polubiła"
+        other: "%{count} osób polubiło to"
+        zero: "nikt tego nie polubił"
+  more: "Więcej"
+  next: "następny"
+  no_results: "Nie znaleziono niczego"
   notifications: 
-    also_commented: "also commented on"
+    also_commented: "skomentował również użytkownika %{post_author}"
     also_commented_deleted: "commented on a deleted post"
     comment_on_post: "komentuje twój"
     deleted: "usunięte"
     helper: 
       new_notifications: 
-        few: "%{count} new notifications"
-        many: "%{count} new notifications"
-        one: "1 new notifications"
-        other: "%{count} new notifications"
-        zero: "no new notifications"
+        few: "%{count} nowe powiadomienia"
+        many: "%{count} nowych powiadomień"
+        one: "1 nowe powiadomienie"
+        other: "%{count} nowych powiadomień"
+        zero: "brak nowych powiadomień"
     index: 
-      and: "and"
-      and_others: "and %{number} others"
-      mark_all_as_read: "Mark All as Read"
+      and: "i"
+      and_others: "i %{number} innych"
+      mark_all_as_read: "Oznacz wszystkie jako przeczytane"
       notifications: "Powiadomienia"
-    mentioned: "has mentioned you in their"
-    new_request: "wysłał Ci zaproszenie do współdzielenia."
-    post: "post"
-    private_message: "sent you a message."
+    mentioned: "wspomniał o tobie we wpisie"
+    new_request: "chce zostać twoim znajomym."
+    post: "wpis"
+    private_message: "wysłał(a) ci wiadomość."
     request_accepted: "zaakceptował Twoje zaproszenie."
   notifier: 
     also_commented: 
       commented: "skomentował też wpis użytkownika %{post_author}:"
       sign_in: "Zaloguj się, aby je obejrzeć."
-      subject: "%{name} has also commented."
+      subject: "%{name} skomentował również wpis użytkownika %{post_author}."
     comment_on_post: 
-      commented: "has commented on your post!"
+      commented: "skomentował twój wpis:"
       sign_in: "Zaloguj się, aby go obejrzeć."
       subject: "Użytkownik %{name} skomentował Twój wpis."
     diaspora: "robot e-mailowy diaspory"
     hello: "Cześć %{name}!"
     love: "uściski,"
-    manage_your_email_settings: "manage your email settings"
+    manage_your_email_settings: "zarzÄ…dzaj ustawieniami emaila"
     mentioned: 
-      mentioned: "mentioned you in a post:"
-      sign_in: "Sign in to view it."
-      subject: "%{name} has mentioned you on Diaspora*"
+      mentioned: "wspomniał(a) o tobie we wpisie:"
+      sign_in: "Zaloguj się, aby uzyskać dostęp."
+      subject: "%{name} wspomniał o tobie w serwisie Diaspora*"
     new_request: 
       just_sent_you: "właśnie wysłał(-a) Ci zaproszenie do Diaspory*"
       sign_in: "zaloguj siÄ™"
       subject: "nowe zaproszenie do znajomych w Diasporze* od %{from}"
       try_it_out: "Przemyśl to, naprawdę warto spróbować."
     private_message: 
-      message_subject: "Subject: %{subject}"
-      private_message: "has sent you a private message:"
-      sign_in: "Sign in to view it."
-      subject: "%{name} has sent you a private message yon Diaspora*"
+      message_subject: "Temat: %{subject}"
+      private_message: "wysłał ci wiadomość prywatną:"
+      sign_in: "Zarejestruj się, aby zobaczyć."
+      subject: "%{name} wysłał ci prywatną wiadomość w serwisie Diaspora*"
     request_accepted: 
-      accepted: "zaakceptował(-a) Twoje zaproszenie. Jest w aspekcie"
+      accepted: "zaakceptował Twoje zaproszenie!"
       sign_in: "Zaloguj siÄ™"
       subject: "%{name} zaakceptował(-a) twoje zaproszenie do znajomych w Diasporze*"
     single_admin: 
@@ -314,24 +314,24 @@ pl:
     add_contact_small: 
       add_contact_from_tag: "add contact from tag"
     aspect_list: 
-      edit_membership: "edit aspect membership"
-    few: "%{count} people"
+      edit_membership: "edytuj przynależność do aspektów"
+    few: "%{count} osoby"
     helper: 
       people_on_pod_are_aware_of: " osoby na podzie wiedzą, że"
       results_for: " wyniki dla %{params}"
     index: 
-      couldnt_find_them_send_invite: "Couldn't find them?  Send an invite!"
-      no_one_found: "...and no one was found."
-      no_results: "Hey! You need to search for something."
+      couldnt_find_them_send_invite: "Nie znalazłeś ich? Wyślij im zaproszenie!"
+      no_one_found: "...i nikogo nie udało się znaleźć."
+      no_results: "Hej! Musisz coś wpisać w pole wyszukiwarki!"
       results_for: "wyniki wyszukiwania dla"
-    many: "%{count} people"
-    one: "1 person"
-    other: "%{count} people"
+    many: "%{count} osób"
+    one: "1 osoba"
+    other: "%{count} ludzi"
     person: 
       add_contact: "dodaj kontakt"
       already_connected: "Już podłączono"
       pending_request: "zaproszenie oczekujÄ…ce"
-      thats_you: "to przecież Ty!"
+      thats_you: "To przecież Ty!"
     profile_sidebar: 
       bio: "notka biograficzna"
       born: "urodziny"
@@ -339,28 +339,28 @@ pl:
       edit_my_profile: "Edycja mojego profilu"
       gender: "płeć"
       in_aspects: "w aspektach"
-      location: "location"
+      location: "położenie"
       remove_contact: "usuwanie kontaktu"
       remove_from: "Usunąć %{name} z aspektu %{aspect}?"
     show: 
-      add_some: "add some"
+      add_some: "dodaj kogoÅ›"
       does_not_exist: "Osoba nie istnieje!"
-      edit: "edit"
-      incoming_request: "Masz nowe zaproszenie od tej osoby."
-      mention: "Mention"
-      message: "Message"
+      edit: "edytuj"
+      incoming_request: "%{name} chce być twoim znajomym"
+      mention: "Wspomnij"
+      message: "Wiadomość"
       no_posts: "brak wpisów!"
-      not_connected: "You are not connected with this person"
+      not_connected: "Ta osoba nie jest twoim znajomym"
       recent_posts: "Ostatnie wpisy"
-      recent_public_posts: "Recent Public Posts"
+      recent_public_posts: "Ostatnie wpisy publiczne"
       return_to_aspects: "Wróć do strony aspektów"
-      similar_contacts: "similar contacts"
+      see_all: "Zobacz wszystkich"
       start_sharing: "współdziel"
       to_accept_or_ignore: "by je przyjąć lub zignorować."
-      you_have_no_tags: "you have no tags!"
+      you_have_no_tags: "nie masz tagów!"
     webfinger: 
       fail: "Wybacz, nie można było znaleźć %{handle}."
-    zero: "no people"
+    zero: "nikt"
   photos: 
     create: 
       integrity_error: "Nie udało się przesłać zdjęcia. Czy @{m,f:jesteś pew}{m:ien|f:na|n:to na pewno}{m,f: że to} był obraz?"
@@ -379,8 +379,8 @@ pl:
       invalid_ext: "Plik {file} ma niewłaściwe rozszerzenie. Akceptowane rozszerzenia: {extensions}"
       size_error: "Plik {file} jest zbyt duży, maksymalny rozmiar to {sizeLimit}."
     new_profile_photo: 
-      or_select_one: "or select one from your already existing"
-      upload: "Upload a new profile photo!"
+      or_select_one: "lub wybierz jeden z już istniejących"
+      upload: "Załaduj nowe zdjęcie profilowe!"
     photo: 
       view_all: "pokaż wszystkie zdjęcia należące do: %{name}"
     show: 
@@ -388,8 +388,8 @@ pl:
       delete_photo: "Usuń zdjęcie"
       edit: "edytuj"
       edit_delete_photo: "Edytuj opis zdjęcia / usuń zdjęcie"
-      make_profile_photo: "zrób zdjęcie profilowe"
-      original_post: "Original Post"
+      make_profile_photo: "ustaw jako zdjęcie profilowe"
+      original_post: "Pierwotny wpis"
       permalink: "permalink"
       update_photo: "Aktualizuj zdjęcie"
       view: "podglÄ…d"
@@ -398,31 +398,31 @@ pl:
       notice: "Pomyślnie zaktualizowano zdjęcie."
   post_visibilites: 
     update: 
-      post_hidden: "%{name}'s post has been hidden."
+      post_hidden: "wpis użytkownika %{name} został ukryty."
   posts: 
-    doesnt_exist: "that post does not exist!"
-  previous: "previous"
+    doesnt_exist: "ten wpis nie istnieje!"
+  previous: "poprzedni"
   profile: "Profil"
   profiles: 
     edit: 
-      allow_search: "Allow for people to search for you within Diaspora"
-      edit_profile: "Edit profile"
-      first_name: "First name"
-      last_name: "Last name"
-      update_profile: "Update Profile"
-      your_bio: "Your bio"
-      your_birthday: "Your birthday"
-      your_gender: "Your gender"
-      your_location: "Your location"
-      your_name: "Your name"
-      your_photo: "Your photo"
-      your_private_profile: "Your private profile"
-      your_public_profile: "Your public profile"
-      your_tags: "You: in 5 #tags"
-      your_tags_placeholder: "i.e. #diaspora #ironing #kittens #music"
+      allow_search: "Pozwól ludziom na wyszukiwanie cię w serwisie Diaspora"
+      edit_profile: "Edytuj profil"
+      first_name: "ImiÄ™"
+      last_name: "Nazwisko"
+      update_profile: "Aktualizuj profil"
+      your_bio: "O tobie"
+      your_birthday: "Twoje urodziny"
+      your_gender: "Twoja płeć"
+      your_location: "Twoje położenie"
+      your_name: "ImiÄ™"
+      your_photo: "Twoje zdjęcie"
+      your_private_profile: "Twój profil prywatny"
+      your_public_profile: "Twój profil publiczny"
+      your_tags: "Ty: w 5 #tagach"
+      your_tags_placeholder: "np. #diaspora #prasowanie #kotki #muzyka"
     update: 
-      failed: "Failed to update profile"
-      updated: "Profile updated"
+      failed: "Nie udało się zaktualizować profilu"
+      updated: "Profil został pomyślnie zaktualizowany"
   registrations: 
     closed: "Na tym podzie Diaspory rejestracja jest zamknięta"
     create: 
@@ -451,11 +451,11 @@ pl:
       success: "Jesteście teraz znajomymi."
     helper: 
       new_requests: 
-        few: "%{count} new requests!"
-        many: "%{count} new requests!"
-        one: "new request!"
-        other: "%{count} new requests!"
-        zero: "no new requests"
+        few: "%{count} nowe zaproszenia!"
+        many: "%{count} nowych zaproszeń!"
+        one: "nowe zaproszenie!"
+        other: "%{count} nowych zaproszeń!"
+        zero: "brak nowych zaproszeń"
     manage_aspect_contacts: 
       existing: "IstniejÄ…ce kontakty"
       manage_within: "ZarzÄ…dzanie kontaktami w"
@@ -471,23 +471,23 @@ pl:
       error: "wystąpił błąd podczas łączenia z tą usługą"
     finder: 
       friends: 
-        few: "%{count} friends"
-        many: "%{count} friends"
-        one: "1 friend"
-        other: "%{count} friends"
-        zero: "no friends"
-      invite_your_friends_from: "Invite your friends from %{service}"
-      not_connected: "not connected"
+        few: "%{count} znajomych"
+        many: "%{count} znajomych"
+        one: "1 znajomy"
+        other: "%{count} znajomych"
+        zero: "żadnych znajomych"
+      invite_your_friends_from: "ZaproÅ› swoich znajomych z serwisu %{service}"
+      not_connected: "nie połączono"
     index: 
       connect_to_facebook: "Połącz z Facebookiem"
       connect_to_twitter: "Połącz z Twitterem"
       disconnect: "rozłącz"
-      edit_services: "Edit services"
+      edit_services: "Edytuj usługi"
       logged_in_as: "zalogowano jako"
       really_disconnect: "rozłączyć %{service}?"
     inviter: 
-      click_link_to_accept_invitation: "Click this link to accept your invitation"
-      join_me_on_diaspora: "Join me on DIASPORA*"
+      click_link_to_accept_invitation: "Kliknij w ten link, aby przyjąć zaproszenie"
+      join_me_on_diaspora: "Dołącz do mnie w serwisie DIASPORA*"
     remote_friend: 
       invite: "zaproÅ›"
       resend: "wyślij ponownie"
@@ -503,16 +503,16 @@ pl:
       all_contacts: "Wszystkie kontakty"
       cannot_remove: "Nie można usunąć osoby z jedynego pozostałego aspektu. (Jeśli chcesz się rozłączyć z tą osobą musisz ją usunąć ze znajomych.)"
     footer: 
-      logged_in_as: "logged in as %{name}"
-      your_aspects: "your aspects"
+      logged_in_as: "zalogowany jako %{name}"
+      your_aspects: "twoje aspekty"
     invitations: 
-      by_email: "by Email"
+      by_email: "przez e-mail"
       dont_have_now: "Nie masz wolnych zaproszeń, ale niebawem się pojawią!"
-      from_facebook: "From Facebook"
+      from_facebook: "z serwisu Facebook"
       invitations_left: "(pozostało %{count} zaproszeń)"
       invite_someone: "ZaproÅ› kogoÅ›"
-      invite_your_friends: "Invite your friends"
-      invites: "Invites"
+      invite_your_friends: "Znajdź znajomych"
+      invites: "Zaproszenia"
       invites_closed: "Wysyłanie zaproszeń jest obecnie wyłączony na tym podzie Diaspora"
     notification: 
       new: "Nowy(-a,-e) %{type} od %{from}"
@@ -525,23 +525,23 @@ pl:
       add_photos: "dodaj zdjęcia"
       all: "wszyscy"
       all_contacts: "wszyscy znajomi"
-      click_to_share_with: "Click to share with: "
+      click_to_share_with: "Kliknij, aby podzielić się z:"
       make_public: "upublicznij"
       post_a_message_to: "Wyślij wiadomość do %{aspect}"
       posting: "Wysyłanie…"
       public: "Public"
-      publishing_to: "publishing to: "
+      publishing_to: "publikuj na:"
       share: "Podziel siÄ™"
       share_with: "Podziel siÄ™ z aspektem %{aspect}"
       whats_on_your_mind: "co Ci chodzi po głowie?"
     reshare: 
       reshare: "Podziel siÄ™ ponownie"
     stream_element: 
-      dislike: "I dislike this"
-      like: "I like this"
+      dislike: "Nie lubiÄ™ tego"
+      like: "LubiÄ™ to"
   status_messages: 
     create: 
-      success: "Successfully mentioned: %{names}"
+      success: "Pomyślnie wspomniano o: %{names}"
     destroy: 
       failure: "BÅ‚Ä…d podczas usuwania wpisu"
     helper: 
@@ -550,39 +550,39 @@ pl:
       mentioning: "Mentioning: %{person}"
     show: 
       destroy: "Usuń"
-      not_found: "Sorry, we couldn't find that post."
-      permalink: "permalink"
+      not_found: "Niestety, nie udało się nam znaleźć tego wpisu."
+      permalink: "odnośnik bezpośredni"
   stream_helper: 
     hide_comments: "ukryj komentarze"
     show_comments: "pokaż komentarze"
   tags: 
     show: 
-      nobody_talking: "Nobody is talking about %{tag} yet."
-      people_tagged_with: "People tagged with %{tag}"
-      posts_tagged_with: "Posts tagged with #%{tag}"
+      nobody_talking: "Nikt jeszcze nie rozmawia o %{tag}."
+      people_tagged_with: "Osoby opisane poprzez %{tag}"
+      posts_tagged_with: "Wpisy oznaczone jako #%{tag}"
   the_world: "świat"
-  undo: "Undo?"
+  undo: "Cofnąć?"
   username: "Nazwa użytkownika"
   users: 
     destroy: "Konto zostało pomyślnie zamknięte."
     edit: 
-      also_commented: "...someone also comments on your contact's post?"
-      change: "Change"
+      also_commented: "...ktoś także skomentuje wpis jednego z twoich kontaktów?"
+      change: "Zmień"
       change_language: "Zmień język"
       change_password: "Zmiana hasła"
       close_account: "Zamknij konto"
-      comment_on_post: "...someone comments on your post?"
-      current_password: "Current password"
+      comment_on_post: "...ktoś skomentuje twój wpis?"
+      current_password: "Obecne hasło"
       download_photos: "pobierz moje zdjęcia"
       download_xml: "pobierz mój xml"
-      edit_account: "Edit account"
+      edit_account: "Edytuj konto"
       export_data: "Eksportowanie danych"
-      mentioned: "...you are mentioned in a post?"
+      mentioned: "...zostałeś wspomniany(a) we wpisie?"
       new_password: "Nowe hasło"
-      private_message: "...you receive a private message?"
-      receive_email_notifications: "Receive email notificaions?"
-      request_acceptence: "...your share request is accepted?"
-      request_received: "...you receive a new share request?"
+      private_message: "...otrzymasz prywatną wiadomość?"
+      receive_email_notifications: "Otrzymywanie powiadomień emailowych kiedy..."
+      request_acceptence: "...twoje zaproszenie do współdzielenia zostanie zaakceptowane?"
+      request_received: "...otrzymasz nowe zaproszenie do współdzielenia?"
       your_email: "Twój e-mail"
       your_handle: "Twój identyfikator w Diasporze"
     getting_started: 
@@ -595,16 +595,16 @@ pl:
       signup_steps: "Dokończ rejestrację w trzech krokach:"
       skip: "pomiń wprowadzenie"
       step_2: 
-        find_your_friends_on_diaspora: "Would you like to find your Facebook friends on Diaspora?"
-        skip: "Skip"
+        find_your_friends_on_diaspora: "Czy chciałbyś znaleźć swoich znajomych z serwisu Facebook w Diasporze?"
+        skip: "Pomiń"
       step_3: 
-        finish: "Finish"
-        people_already_on_diaspora: "People already on Diaspora"
+        finish: "Zakończ"
+        people_already_on_diaspora: "Już używający Diaspory"
       welcome: "Witaj w Diasporze!"
     public: 
       does_not_exist: "Użytkownik %{username} nie istnieje!"
     update: 
-      email_notifications_changed: "Language Change Failed"
+      email_notifications_changed: "Zmieniono ustawienia powiadomień email"
       language_changed: "Zmieniono język"
       language_not_changed: "Nie udało się zmienić języka"
       password_changed: "Zmieniono hasło"
diff --git a/config/locales/diaspora/pt-BR.yml b/config/locales/diaspora/pt-BR.yml
index 239ed2b085c6aee2a863f80c313c4fef0f294951..51e3fc255fc3d7d7590a239b2b9d638258f659be 100644
--- a/config/locales/diaspora/pt-BR.yml
+++ b/config/locales/diaspora/pt-BR.yml
@@ -354,7 +354,7 @@ pt-BR:
       recent_posts: "Postagens recentes"
       recent_public_posts: "Postagens públicas recentes"
       return_to_aspects: "Retornar à sua página de aspectos"
-      similar_contacts: "Contatos similares"
+      see_all: "See all"
       start_sharing: "Comece a compartilhar"
       to_accept_or_ignore: "Aceitar ou ignorar."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/pt-PT.yml b/config/locales/diaspora/pt-PT.yml
index 52ce28fec0b657140519d2e0496a41ce1f59bda0..b696ca9453c74c6fbc3809b76e92be89ea5247f2 100644
--- a/config/locales/diaspora/pt-PT.yml
+++ b/config/locales/diaspora/pt-PT.yml
@@ -354,7 +354,7 @@ pt-PT:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Voltar à página dos grupos"
-      similar_contacts: "contactos similares"
+      see_all: "See all"
       start_sharing: "começar a partilhar"
       to_accept_or_ignore: "para o aceitares ou ignorares"
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/ro.yml b/config/locales/diaspora/ro.yml
index 9ca1c78b981edc0b7d123ee25633578c11d93335..fdd285ca4da8bd6acd7600374204297b16440d4c 100644
--- a/config/locales/diaspora/ro.yml
+++ b/config/locales/diaspora/ro.yml
@@ -354,7 +354,7 @@ ro:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "to accept or ignore it."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/ru.yml b/config/locales/diaspora/ru.yml
index 8fbb0c6db1828612213ea918d3e0e7948da536f3..a25f28e103b22f63f483e96893106540b150680d 100644
--- a/config/locales/diaspora/ru.yml
+++ b/config/locales/diaspora/ru.yml
@@ -266,7 +266,7 @@ ru:
       and_others: "и %{number} других"
       mark_all_as_read: "Отметить все как прочитанные"
       notifications: "Уведомления"
-    mentioned: "упомянул вас в своих"
+    mentioned: "упомянул вас в своих сообщениях"
     new_request: "предлагает поделиться с вами."
     post: "сообщение"
     private_message: "послал Вам сообщение."
@@ -354,7 +354,7 @@ ru:
       recent_posts: "Последние сообщения"
       recent_public_posts: "Последние Публичные Посты"
       return_to_aspects: "Вернуться на страницу аспектов"
-      similar_contacts: "аналогичные контакты"
+      see_all: "Показать все"
       start_sharing: "поделиться"
       to_accept_or_ignore: "принять или игнорировать."
       you_have_no_tags: "у вас нет меток!"
@@ -520,7 +520,7 @@ ru:
       logged_in: "вошли в %{service}"
       manage: "управление подключенными сервисами"
       outside: "Публичные сообщения доступны для чтения всем, даже за пределами вашей Диаспоры."
-      title: "Вы собираетесь отправить публичное сообщение!"
+      title: "Настройка подключенных услуг"
     publisher: 
       add_photos: "добавить фотографии"
       all: "все"
diff --git a/config/locales/diaspora/sk.yml b/config/locales/diaspora/sk.yml
index 7b411b10fbf3acdd85c78f1cda63028bbfcca2c2..d27246bb6a97ef6668940ee6fde1ca301b1a69cb 100644
--- a/config/locales/diaspora/sk.yml
+++ b/config/locales/diaspora/sk.yml
@@ -354,7 +354,7 @@ sk:
       recent_posts: "Posledné príspevky"
       recent_public_posts: "Nedávne verejné príspevky"
       return_to_aspects: "Vrátiť sa na stránku aspektov"
-      similar_contacts: "podobné kontakty"
+      see_all: "See all"
       start_sharing: "začať zdieľať"
       to_accept_or_ignore: "akceptovať, alebo ignorovať."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/sl.yml b/config/locales/diaspora/sl.yml
index 0e28df6d206cd3c74768629745acc39fb7ef4e95..7cc62da0826cbb429d0c85833ea3191ecf2d373e 100644
--- a/config/locales/diaspora/sl.yml
+++ b/config/locales/diaspora/sl.yml
@@ -33,7 +33,7 @@ sl:
             username: 
               taken: "is already taken."
   ago: "%{time} nazaj"
-  all_aspects: "All aspects"
+  all_aspects: "Vse skupine"
   application: 
     helper: 
       unknown_person: "neznana oseba"
@@ -55,8 +55,8 @@ sl:
       activity: "activity"
       post_time: "post time"
       sort_by: "sort by:"
-    contacts_not_visible: "Contacts in this aspect will not be able to see each other."
-    contacts_visible: "Contacts in this aspect will be able to see each other."
+    contacts_not_visible: "Stiki v tej skupini drug drugega ne bodo videli."
+    contacts_visible: "Stiki v tej skupini drug drugega lahko vidijo."
     create: 
       failure: "Ustvarjanje skupine ni uspelo."
       success: "Skupina %{name} je ustvarjena"
@@ -122,7 +122,7 @@ sl:
     few: "%{count} comments"
     many: "%{count} comments"
     new_comment: 
-      comment: "komentar"
+      comment: "komentiraj"
       commenting: "komentiraj..."
     one: "1 comment"
     other: "%{count} comments"
@@ -224,7 +224,7 @@ sl:
       public_feed: "Public Diaspora Feed for %{name}"
       toggle: "toggle mobile site"
       whats_new: "kaj je novega?"
-      your_aspects: "your aspects"
+      your_aspects: "vaše skupine"
     header: 
       blog: "blog"
       code: "koda"
@@ -246,11 +246,11 @@ sl:
         one: "1 person liked this"
         other: "%{count} people liked this"
         zero: "no people liked this"
-  more: "More"
+  more: "Več"
   next: "naslednja"
   no_results: "No Results Found"
   notifications: 
-    also_commented: "komentirano tudi na vaših stikih"
+    also_commented: "komentirano tudi na %{post_author}"
     also_commented_deleted: "commented on a deleted post"
     comment_on_post: "komentar na vaš"
     deleted: "izbrisano"
@@ -264,9 +264,9 @@ sl:
     index: 
       and: "and"
       and_others: "and %{number} others"
-      mark_all_as_read: "Mark All as Read"
+      mark_all_as_read: "Označi vse kot prebrano"
       notifications: "Sporočila"
-    mentioned: "has mentioned you in their"
+    mentioned: "bili ste omenjeni v objavi"
     new_request: "nekdo želi deliti z vami."
     post: "prispevek"
     private_message: "sent you a message."
@@ -275,9 +275,9 @@ sl:
     also_commented: 
       commented: "prav tako komentirano na objavo osebe %{post_author}:"
       sign_in: "Za ogled se prijavite."
-      subject: "oseba %{name} je prav tako komentirala."
+      subject: "oseba %{name} je prav tako komentirala %{post_author}."
     comment_on_post: 
-      commented: "komentar na vašo objavo!"
+      commented: "oseba je komentirala na vašo objavo:"
       sign_in: "Za ogled se prijavite."
       subject: "Oseba %{name} je komentirala vašo objavo."
     diaspora: "diaspora email robot"
@@ -290,17 +290,17 @@ sl:
       subject: "%{name} has mentioned you on Diaspora*"
     new_request: 
       just_sent_you: "poslana vam je bila prošnja za stik v Diaspori*"
-      sign_in: "prijavite se tukaj"
+      sign_in: "Prijavite se tukaj"
       subject: "nova Diaspora* prošnja za stik od %{from}"
       try_it_out: "Preverite in se prepričajte."
     private_message: 
       message_subject: "Subject: %{subject}"
       private_message: "has sent you a private message:"
       sign_in: "Sign in to view it."
-      subject: "%{name} has sent you a private message yon Diaspora*"
+      subject: "oseba %{name} vam je poslala privatno sporočilo v Diaspori*"
     request_accepted: 
       accepted: "vaše povabilo je bilo sprejeto!"
-      sign_in: "Sign in here"
+      sign_in: "Tukaj se registrirajte"
       subject: "Oseba %{name} je sprejela vaše povabilo za stik v Diaspori*"
     single_admin: 
       admin: "Vaš administrator Diaspore"
@@ -330,8 +330,8 @@ sl:
     person: 
       add_contact: "dodaj stik"
       already_connected: "Ste že povezani"
-      pending_request: "čakajoče prošnje"
-      thats_you: "to ste vi!"
+      pending_request: "Čakajoče zahteve"
+      thats_you: "To ste vi!"
     profile_sidebar: 
       bio: "življenjepis"
       born: "datum rojstva"
@@ -346,15 +346,15 @@ sl:
       add_some: "add some"
       does_not_exist: "Oseba ne obstaja!"
       edit: "edit"
-      incoming_request: "Od te osebe ste prejeli novo prošnjo."
+      incoming_request: "%{name} želi deliti z vami."
       mention: "Mention"
       message: "Message"
       no_posts: "ni prispevkov na ogled!"
-      not_connected: "Niste povezani s/z %{name}"
+      not_connected: "S to osebo ne delite"
       recent_posts: "Zadnje objave"
       recent_public_posts: "Zadnje javne objave"
       return_to_aspects: "Vrnite se na vašo stran s skupinami"
-      similar_contacts: "podobni stiki"
+      see_all: "See all"
       start_sharing: "začni deliti"
       to_accept_or_ignore: "sprejmite ali zavrnite."
       you_have_no_tags: "you have no tags!"
@@ -471,13 +471,13 @@ sl:
       error: "pri povezovanju s servisom je prišlo do napake"
     finder: 
       friends: 
-        few: "%{count} friends"
+        few: "%{count} prijateljev"
         many: "%{count} friends"
-        one: "1 friend"
-        other: "%{count} friends"
-        zero: "no friends"
-      invite_your_friends_from: "Invite your friends from %{service}"
-      not_connected: "not connected"
+        one: "1 prijatelj"
+        other: "%{count} prijateljev"
+        zero: "brez prijateljev"
+      invite_your_friends_from: "Povabi prijatelje iz %{service}"
+      not_connected: "ni povezano"
     index: 
       connect_to_facebook: "Poveži se s facebook"
       connect_to_twitter: "Poveži se s twitter"
@@ -486,11 +486,11 @@ sl:
       logged_in_as: "prijavljeni ste kot"
       really_disconnect: "prekinem povezavo s servisom %{service}?"
     inviter: 
-      click_link_to_accept_invitation: "Click this link to accept your invitation"
-      join_me_on_diaspora: "Join me on DIASPORA*"
+      click_link_to_accept_invitation: "Kliknite na povezavo za potrditev vašega povabila"
+      join_me_on_diaspora: "Pridruži se mi na DIASPORI*"
     remote_friend: 
-      invite: "invite"
-      resend: "resend"
+      invite: "povabi"
+      resend: "pošlji ponovno"
   settings: "Nastavitve"
   shared: 
     add_contact: 
@@ -506,12 +506,12 @@ sl:
       logged_in_as: "logged in as %{name}"
       your_aspects: "your aspects"
     invitations: 
-      by_email: "by Email"
+      by_email: "po e-pošti"
       dont_have_now: "Trenutno nimate povabil, vendar jih lahko v kratkem pričakujete!"
-      from_facebook: "From Facebook"
+      from_facebook: "iz Facebook-a"
       invitations_left: "(Å¡e %{count})"
       invite_someone: "Povabi osebo"
-      invite_your_friends: "Invite your friends"
+      invite_your_friends: "Povabi prijatelje"
       invites: "Povabila"
       invites_closed: "Za ta 'Diaspora pod' so povabila trenutno onemogočena."
     notification: 
@@ -531,11 +531,11 @@ sl:
       posting: "Objavljam..."
       public: "Public"
       publishing_to: "publishing to: "
-      share: "Deli"
+      share: "Objavi"
       share_with: "deli s/z"
-      whats_on_your_mind: "what's on your mind?"
+      whats_on_your_mind: "bi kaj želeli sporočiti?"
     reshare: 
-      reshare: "Deli znova"
+      reshare: "Objavi Å¡e v"
     stream_element: 
       dislike: "I dislike this"
       like: "I like this"
@@ -572,7 +572,7 @@ sl:
       change_password: "Spremeni geslo"
       close_account: "Zapri uporabniški račun"
       comment_on_post: "...someone comments on your post?"
-      current_password: "Current password"
+      current_password: "Trenutno geslo"
       download_photos: "prenesi slike"
       download_xml: "prenesi v xml"
       edit_account: "Uredi uporabniški račun"
@@ -580,7 +580,7 @@ sl:
       mentioned: "...you are mentioned in a post?"
       new_password: "Novo geslo"
       private_message: "...you receive a private message?"
-      receive_email_notifications: "Želite prejemati obvestila po e-pošti?"
+      receive_email_notifications: "Želite prejemati obvestila po e-pošti, ko..."
       request_acceptence: "...your share request is accepted?"
       request_received: "...you receive a new share request?"
       your_email: "Vaš e-naslov"
diff --git a/config/locales/diaspora/sv.yml b/config/locales/diaspora/sv.yml
index 8d62154d4c4e81a0463ce1d44532a5febe582d00..f650ef3cd0d26458ec44e8d15481cacc73d23d3f 100644
--- a/config/locales/diaspora/sv.yml
+++ b/config/locales/diaspora/sv.yml
@@ -354,7 +354,7 @@ sv:
       recent_posts: "Postat nyligen"
       recent_public_posts: "Senaste publika inlägg"
       return_to_aspects: "Återgå till översikten"
-      similar_contacts: "liknande kontakter"
+      see_all: "See all"
       start_sharing: "börja dela"
       to_accept_or_ignore: "for att acceptera eller ignorera."
       you_have_no_tags: "du har inga taggar!"
diff --git a/config/locales/diaspora/tr.yml b/config/locales/diaspora/tr.yml
index 89223699cc91f63d7e7c39501f277bac1ad27d92..effa57213fb4c0cb0ef50ed7bcb3308258b77999 100644
--- a/config/locales/diaspora/tr.yml
+++ b/config/locales/diaspora/tr.yml
@@ -354,7 +354,7 @@ tr:
       recent_posts: "Recent Posts"
       recent_public_posts: "Recent Public Posts"
       return_to_aspects: "Return to your aspects page"
-      similar_contacts: "similar contacts"
+      see_all: "See all"
       start_sharing: "start sharing"
       to_accept_or_ignore: "kabul et veya yoksay."
       you_have_no_tags: "you have no tags!"
diff --git a/config/locales/diaspora/zh-CN.yml b/config/locales/diaspora/zh-CN.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d8d8fff5358f8617bc652ae0248bab392d5076f3
--- /dev/null
+++ b/config/locales/diaspora/zh-CN.yml
@@ -0,0 +1,617 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+zh-CN: 
+  _comments: "评论"
+  _home: "首页"
+  _photos: "照片"
+  _services: "服务"
+  account: "帐号"
+  activerecord: 
+    errors: 
+      models: 
+        contact: 
+          attributes: 
+            person_id: 
+              taken: "在好友中必须是唯一的。"
+        person: 
+          attributes: 
+            diaspora_handle: 
+              taken: "已被注册。"
+        request: 
+          attributes: 
+            from_id: 
+              taken: "与已存在的请求重复。"
+        user: 
+          attributes: 
+            email: 
+              taken: "已被注册。"
+            person: 
+              invalid: "不合法。"
+            username: 
+              taken: "已被注册。"
+  ago: "%{time}前"
+  all_aspects: "所有情景"
+  application: 
+    helper: 
+      unknown_person: "未知用户"
+      video_title: 
+        unknown: "未知影片标题"
+  are_you_sure: "你确定吗?"
+  aspect_memberships: 
+    destroy: 
+      failure: "从情景中移除好友失败"
+      no_membership: "在情景中找不到选择的好友"
+      success: "从情景中移除好友成功"
+  aspects: 
+    add_to_aspect: 
+      failure: "将好友添加到情景失败。"
+      success: "将好友添加到情景成功。"
+    aspect_contacts: 
+      done_editing: "编辑完成"
+    aspect_stream: 
+      activity: "活跃程度"
+      post_time: "发布时间"
+      sort_by: "排序方式:"
+    contacts_not_visible: "此情景中的好友相互不可见。"
+    contacts_visible: "此情景中的好友相互可见。"
+    create: 
+      failure: "添加情景失败。"
+      success: "添加新情景 %{name} 成功"
+    destroy: 
+      failure: "无法删除 %{name} ,它不是空的。"
+      success: "删除 %{name} 成功。"
+    edit: 
+      add_existing: "添加好友"
+      aspect_list_is_not_visible: "情景中的好友不能看见本情景的好友列表"
+      aspect_list_is_visible: "情景中的好友能够看见本情景的好友列表"
+      confirm_remove_aspect: "你确定要删除这个情景?"
+      done: "完成"
+      make_aspect_list_visible: "是否让其他人可以看见本情景的好友列表?"
+      remove_aspect: "删除这个情景"
+      rename: "重命名"
+      update: "æ›´æ–°"
+      updating: "更新中"
+    few: "%{count}个情景"
+    helper: 
+      are_you_sure: "您确定要删除这个情景?"
+      aspect_not_empty: "此情景不是空的"
+      remove: "删除"
+    index: 
+      handle_explanation: "这是您的 diaspora 帐号, 就像是邮箱一样,你可以把它提供给想好友您的人。"
+      no_contacts: "没有任何好友"
+      post_a_message: "发布站内信>>"
+    manage: 
+      add_a_new_aspect: "添加情景"
+      add_a_new_contact: "添加新的好友"
+      drag_to_add: "拖动以添加好友"
+      manage_aspects: "情景管理"
+      no_requests: "没有新请求"
+      requests: "请求"
+    many: "%{count}个情景"
+    move_contact: 
+      error: "好友移动错误:%{inspect}"
+      failure: "%{inspect}没有成功"
+      success: "好友成功添加到新情景"
+    new_aspect: 
+      create: "添加"
+      name: "名称"
+    no_posts_message: 
+      start_talking: "还没人发布过内容。你发布第一条吧!"
+    one: "1个情景"
+    other: "%{count}个情景"
+    seed: 
+      family: "家人"
+      work: "同事"
+    show: 
+      edit_aspect: "编辑情景"
+    update: 
+      failure: "情景 %{name} 名称太长了,不能保存"
+      success: "情景 %{name} 编辑成功。"
+    zero: "没有情景"
+  back: "后退"
+  bookmarklet: 
+    explanation: "%{link} 收藏这个链接,即可随时发布新内容"
+    explanation_link_text: "发布到Diaspora"
+    post_something: "发布些新内容到Diaspora"
+    post_success: "发布完成!关闭中!"
+  cancel: "取消"
+  comments: 
+    few: "%{count}条回复"
+    many: "%{count}条回复"
+    new_comment: 
+      comment: "发布回复"
+      commenting: "回复发布中……"
+    one: "1条回复"
+    other: "%{count}条回应"
+    zero: "没有回复"
+  contacts: 
+    create: 
+      failure: "添加好友失败"
+    destroy: 
+      failure: "与 %{name} 取消好友关系失败"
+      success: "与 %{name} 取消好友关系成功"
+    few: "%{count}个好友"
+    many: "%{count}个好友"
+    one: "1个好友"
+    other: "%{count}个好友"
+    share_with_pane: 
+      accepts: "当 %{name} 同意请求后,你们就开始看到彼此在Diaspora上发布的内容"
+      add_new_aspect: "添加到新的情景"
+      share_with: "与 %{name} 分享"
+    zero: "没有好友"
+  conversations: 
+    create: 
+      sent: "消息发送成功"
+    destroy: 
+      success: "消息移除成功"
+    helper: 
+      new_messages: 
+        few: "%{count}条新消息"
+        many: "%{count}条新消息"
+        one: "1条新消息"
+        other: "%{count}条新消息"
+        zero: "没有新消息"
+    index: 
+      create_a_new_message: "发送一条新消息"
+      inbox: "收件箱"
+      message_inbox: "消息收件箱"
+      new_message: "新消息"
+      no_conversation_selected: "未选择任何对话"
+      no_messages: "没消息"
+    new: 
+      send: "发送"
+      subject: "主题"
+      to: "收件人"
+    show: 
+      delete: "删除并中止对话"
+      reply: "回复"
+  date: 
+    formats: 
+      birthday: "%m-%d"
+      birthday_with_year: "%Y-%m-%d"
+      fullmonth_day: "%B%dæ—¥"
+  delete: "删除"
+  email: "电子邮件"
+  error_messages: 
+    helper: 
+      correct_the_following_errors_and_try_again: "修正以下错误后重试。"
+      invalid_fields: "无效栏目"
+  fill_me_out: "填写我"
+  hide: "隐藏"
+  home: 
+    show: 
+      already_account: "已经有帐号了吗?"
+      choice: "选择"
+      choice_explanation: "Diaspora 让你将您的关系以\"情景\"分类。情景是Diaspora首创,用来确保您的照片,经历和笑话,只与您所希望的人分享。"
+      learn_about_host: "学习如何架设您自己的Diaspora服务器。"
+      login_here: "从这里登录"
+      ownership: "所有权"
+      ownership_explanation: "你拥有您的图片,且不因为分享而失去该权利。在Diaspora,所有你分享的内容,你都持有所有权,你可以控制它们的发布。"
+      share_what_you_want: "分享您想分享的内容,给您想分享给的人。"
+      simplicity: "简单"
+      simplicity_explanation: "Diaspora让分享变得干净而简单,对隐私设置也是这样。以隐私为出发点,Diaspora 让你不必千辛万苦的调整设置,就能保护您的个人信息安全。"
+      tagline_first_half: "分享您想分享的内容,"
+      tagline_second_half: "给您想分享给的人。"
+  invitations: 
+    check_token: 
+      not_found: "找不到该邀请码"
+    create: 
+      already_contacts: "你已经将他加为好友了"
+      already_sent: "你邀请过这个人了。"
+      no_more: "你没有邀请函了。"
+      rejected: "下列电子信箱有问题: "
+      sent: "邀请函已经寄给: "
+    edit: 
+      sign_up: "注册"
+    new: 
+      already_invited: "已邀请过"
+      aspect: "情景"
+      comma_seperated_plz: "你可以输入多个邮箱,输入多个时以逗号分隔。"
+      if_they_accept_info: "如果他们接受,就会自动被加入到您所邀请的情景中。"
+      invite_someone_to_join: "邀请好友来加入到Diaspora!"
+      personal_message: "个人信息"
+      resend: "重寄"
+      send_an_invitation: "发送邀请函"
+      send_invitation: "发送邀请函"
+      to: "收件人"
+  layouts: 
+    application: 
+      have_a_problem: "遇到问题?在这里可以找到解决方案"
+      powered_by: "Powered by DIASPORA*"
+      public_feed: "%{name} çš„ Diaspora RSS Feed"
+      toggle: "切换为手机网页"
+      whats_new: "有什么新内容?"
+      your_aspects: "您的情景"
+    header: 
+      blog: "博客"
+      code: "源码"
+      login: "登录"
+      logout: "登出"
+      profile: "个人档案"
+      settings: "设置"
+  likes: 
+    likes: 
+      people_dislike_this: 
+        few: "有%{count}人觉得不好"
+        many: "有%{count}人觉得不好"
+        one: "有1个人觉得不好"
+        other: "有%{count}个人觉得不好"
+        zero: "没有人觉得不好"
+      people_like_this: 
+        few: "有%{count}个人觉得好"
+        many: "有%{count}个人觉得好"
+        one: "有1个人觉得好"
+        other: "有%{count}个人觉得好"
+        zero: "没有人觉得好"
+  more: "更多"
+  next: "下一步"
+  no_results: "没有找到符合条件的内容"
+  notifications: 
+    also_commented: "也在 %{post_author} 处发布了评论"
+    also_commented_deleted: "对已删除的内容发布了评论"
+    comment_on_post: "发布了评论,在您的"
+    deleted: "删除成功"
+    helper: 
+      new_notifications: 
+        few: "%{count}个新消息"
+        many: "%{count}个新消息"
+        one: "1个新消息"
+        other: "%{count}个新消息"
+        zero: "没有新消息"
+    index: 
+      and: "和"
+      and_others: "和其他%{number}个人"
+      mark_all_as_read: "全部标示为已读"
+      notifications: "消息"
+    mentioned: "在他发布的内容中提到了你"
+    new_request: "想要与您分享。"
+    post: "日志"
+    private_message: "写了一则消息给您。"
+    request_accepted: "已同意和您分享。"
+  notifier: 
+    also_commented: 
+      commented: "也对 %{post_author} 的贴文发布了意见:"
+      sign_in: "登录后可以查看。"
+      subject: "%{name} 也评论了 %{post_author} 发布的内容。"
+    comment_on_post: 
+      commented: "对评论了您发布的内容:"
+      sign_in: "登录后可以查看。"
+      subject: "%{name} 评论了您发布的内容。"
+    diaspora: "diaspora邮件机器人"
+    hello: "您好 %{name}!"
+    love: "衷心祝福,"
+    manage_your_email_settings: "管理邮件设置"
+    mentioned: 
+      mentioned: "在 Diaspora* 发布的内容中提到了您:"
+      sign_in: "登录后可以查看。"
+      subject: "%{name} 在 Diaspora* 上发布的内容中提到了您"
+    new_request: 
+      just_sent_you: "刚刚在 Diaspora* 上与向您发送了好友请求"
+      sign_in: "由此登录"
+      subject: "%{from} 想与您在 Diaspora* 上建立好友请求"
+      try_it_out: "您赶紧来查看一下吧。"
+    private_message: 
+      message_subject: "主题: %{subject}"
+      private_message: "已发送了私人信息给您:"
+      sign_in: "登录进来看看。"
+      subject: "%{name} 在 Diaspora* 给您发送了私人信息"
+    request_accepted: 
+      accepted: "已接受了您的好友请求!"
+      sign_in: "由此登录"
+      subject: "%{name} 已在 Diaspora* 接收了您的好友请求"
+    single_admin: 
+      admin: "为您服务的 Diaspora 管理员"
+      subject: "关于您 Diaspora 帐号的信息:"
+    thanks: "谢谢,"
+  ok: "确定"
+  or: "或"
+  password: "密码"
+  password_confirmation: "密码确认"
+  people: 
+    add_contact_small: 
+      add_contact_from_tag: "从标签添加好友"
+    aspect_list: 
+      edit_membership: "编辑所属情景"
+    few: "%{count}个好友"
+    helper: 
+      people_on_pod_are_aware_of: " Pod上已知的人"
+      results_for: " %{params}的搜索结果"
+    index: 
+      couldnt_find_them_send_invite: "找不到他们?邀请他们加入Diaspora吧!"
+      no_one_found: "……找不到任何内容。"
+      no_results: "嘿! 搜索必须要有目标呀。"
+      results_for: "搜索结果:"
+    many: "%{count}个好友"
+    one: "1个好友"
+    other: "%{count}个好友"
+    person: 
+      add_contact: "加为好友"
+      already_connected: "已加为好友"
+      pending_request: "请求等候中"
+      thats_you: "这是你自己!"
+    profile_sidebar: 
+      bio: "自我介绍"
+      born: "生日"
+      cannot_remove: "无法将好友从他所在的最后一个情景中移除。(如果你想与这个人断绝连接,你可以解除与他的好友关系。)"
+      edit_my_profile: "编辑我的个人档案"
+      gender: "性别"
+      in_aspects: "所属情景"
+      location: "位置"
+      remove_contact: "解除好友关系"
+      remove_from: "要从 %{aspect} 删除 %{name} 吗?"
+    show: 
+      add_some: "添加一些"
+      does_not_exist: "好友不存在!"
+      edit: "编辑"
+      incoming_request: "%{name} 希望能与您分享"
+      mention: "提及"
+      message: "消息"
+      no_posts: "没有内容可以显示!"
+      not_connected: "你没有与他分享"
+      recent_posts: "最近的内容"
+      recent_public_posts: "最近的公开内容"
+      return_to_aspects: "回到您的情景主页"
+      see_all: "查看全部"
+      start_sharing: "开始分享"
+      to_accept_or_ignore: "接受或忽略它。"
+      you_have_no_tags: "您没有标签!"
+    webfinger: 
+      fail: "抱歉,找不到 %{handle}。"
+    zero: "没有联络人"
+  photos: 
+    create: 
+      integrity_error: "照片上传失败。你确定它是图片吗?"
+      runtime_error: "照片上传失败。你确定有扣安全带吗?"
+      type_error: "照片上传失败。你确定有选择任何图片吗?"
+    destroy: 
+      notice: "照片删除成功。"
+    edit: 
+      editing: "编辑中"
+    new: 
+      back_to_list: "回列表"
+      new_photo: "新照片"
+      post_it: "发布!"
+    new_photo: 
+      empty: "文件 {file} 是空的,请重新选择文件,并且不要选中它。"
+      invalid_ext: "不支持文件 {file} 的格式。只接受{extensions}。"
+      size_error: "文件 {file} 太大了,上限是 {sizeLimit}。"
+    new_profile_photo: 
+      or_select_one: "或从既有照片中挑选一张"
+      upload: "上传新的头像!"
+    photo: 
+      view_all: "查看 %{name} 所有的照片"
+    show: 
+      collection_permalink: "相册的永久链接"
+      delete_photo: "删除照片"
+      edit: "编辑"
+      edit_delete_photo: "编辑照片描述或删除照片"
+      make_profile_photo: "选为个人头像"
+      original_post: "原式内容"
+      permalink: "永久链接"
+      update_photo: "更新照片"
+      view: "查看"
+    update: 
+      error: "照片更新失败。"
+      notice: "照片更新成功。"
+  post_visibilites: 
+    update: 
+      post_hidden: "隐藏 %{name} 的内容成功"
+  posts: 
+    doesnt_exist: "内容不存在!"
+  previous: "上一步"
+  profile: "个人档案"
+  profiles: 
+    edit: 
+      allow_search: "允许别人在 Diaspora* 中搜索到你"
+      edit_profile: "编辑个人档案"
+      first_name: "名"
+      last_name: "姓"
+      update_profile: "更新个人档案"
+      your_bio: "您的自我介绍"
+      your_birthday: "您的生日"
+      your_gender: "您的性别"
+      your_location: "您的位置"
+      your_name: "您的名字"
+      your_photo: "您的照片"
+      your_private_profile: "您的私人档案"
+      your_public_profile: "您的公开档案"
+      your_tags: "你: 可以有5个“#标签”"
+      your_tags_placeholder: "比如 #diaspora #烫发 #猫咪 #音乐"
+    update: 
+      failed: "个人档案更新失败"
+      updated: "个人档案更新成功"
+  registrations: 
+    closed: "本 Diaspora pod 不开放注册。"
+    create: 
+      success: "你已成功加入 Diaspora 了!"
+    edit: 
+      cancel_my_account: "取消我的帐号"
+      edit: "编辑 %{name}"
+      leave_blank: "(不想变更时请留空)"
+      password_to_confirm: "(我们需要您现在的密码以确认您要变更)"
+      unhappy: "不满意?"
+      update: "æ›´æ–°"
+    new: 
+      enter_email: "输入电子邮箱"
+      enter_password: "输入密码"
+      enter_password_again: "再输入一遍密码"
+      enter_username: "选个帐号称(名称只能包含字母,数字和下划线“_”)"
+      sign_up: "注册"
+      sign_up_for_diaspora: "注册使用 Diaspora"
+  requests: 
+    create: 
+      sending: "发送中"
+      sent: "您已经请求与 %{name} 分享。他们下次登入 Diaspora 时就会看见您的请求。"
+    destroy: 
+      error: "请选择一个情景!"
+      ignore: "忽略建立好友的请求。"
+      success: "你们现在互相分享了。"
+    helper: 
+      new_requests: 
+        few: "%{count}个新请求!"
+        many: "%{count}个新请求!"
+        one: "新的请求!"
+        other: "%{count}个新请求!"
+        zero: "没有新请求"
+    manage_aspect_contacts: 
+      existing: "好友编辑"
+      manage_within: "管理好友:"
+    new_request_to_person: 
+      sent: "发送成功!"
+  search: "搜索"
+  services: 
+    create: 
+      success: "验证成功。"
+    destroy: 
+      success: "验证删除成功。"
+    failure: 
+      error: "与该服务连接时有错误"
+    finder: 
+      friends: 
+        few: "%{count}个朋友"
+        many: "%{count}个朋友"
+        one: "1个朋友"
+        other: "%{count}个朋友"
+        zero: "没有朋友"
+      invite_your_friends_from: "邀请您在 %{service} 的朋友"
+      not_connected: "未连接"
+    index: 
+      connect_to_facebook: "与 facebook 连接"
+      connect_to_twitter: "与 twitter 连接"
+      disconnect: "断开连接"
+      edit_services: "编辑服务"
+      logged_in_as: "登录为"
+      really_disconnect: "切断与 %{service} 的连接?"
+    inviter: 
+      click_link_to_accept_invitation: "点击这个链接以接受邀请"
+      join_me_on_diaspora: "跟我一起加入 DIASPORA*"
+    remote_friend: 
+      invite: "邀请"
+      resend: "重新发送"
+  settings: "设置"
+  shared: 
+    add_contact: 
+      create_request: "用 Diaspora 帐号搜索"
+      diaspora_handle: "diaspora@handle.org"
+      enter_a_diaspora_username: "输入 Diaspora 帐号:"
+      know_email: "知道他们的电子信箱吗? 你可以邀请他们加入。"
+      your_diaspora_username_is: "您的 Diaspora 帐号是: %{diaspora_handle}"
+    contact_list: 
+      all_contacts: "全部好友"
+      cannot_remove: "无法将好友从他所在的最后一个情景中移除。(如果你想与这个人断绝连结,你可以解除与他的好友关系。)"
+    footer: 
+      logged_in_as: "已用 %{name} 登录"
+      your_aspects: "您的情景"
+    invitations: 
+      by_email: "通过电子邮件"
+      dont_have_now: "目前你还不能邀请任何人,但很快就可以了!"
+      from_facebook: "从 Facebook"
+      invitations_left: "(剩余%{count}张)"
+      invite_someone: "邀请别人"
+      invite_your_friends: "邀请您的好友"
+      invites: "邀请"
+      invites_closed: "目前本 Diaspora pod 不开放邀请功能"
+    notification: 
+      new: "%{from} 有新的 %{type}"
+    public_explain: 
+      logged_in: "成功登录到 %{service}"
+      manage: "管理已连线的服务"
+      outside: "不使用 Diaspora 的人也能看到公开讯息。"
+      title: "设定连线服务"
+    publisher: 
+      add_photos: "添加照片"
+      all: "全部"
+      all_contacts: "全部的好友"
+      click_to_share_with: "点击后就可以分享: "
+      make_public: "公开"
+      post_a_message_to: "在 %{aspect} 发布讯息"
+      posting: "发布中……"
+      public: "公开"
+      publishing_to: "发布至:"
+      share: "分享"
+      share_with: "与他分享:"
+      whats_on_your_mind: "你想到了什么?"
+    reshare: 
+      reshare: "重新分享"
+    stream_element: 
+      dislike: "不喜欢"
+      like: "喜欢"
+  status_messages: 
+    create: 
+      success: "成功推荐了: %{names}"
+    destroy: 
+      failure: "删除内容失败"
+    helper: 
+      no_message_to_display: "没有信息可显示。"
+    new: 
+      mentioning: "提及发布中: %{person}"
+    show: 
+      destroy: "删除"
+      not_found: "抱歉,找不到该内容。"
+      permalink: "静态连接"
+  stream_helper: 
+    hide_comments: "隐藏评论"
+    show_comments: "显示所有评论"
+  tags: 
+    show: 
+      nobody_talking: "尚还没有人在讨论 %{tag}。"
+      people_tagged_with: "标记为 %{tag} 的人"
+      posts_tagged_with: "标记为 #%{tag} 的内容"
+  the_world: "全世界"
+  undo: "撤消?"
+  username: "帐号"
+  users: 
+    destroy: "帐号关闭成功。"
+    edit: 
+      also_commented: "……当有人也对您的好友的内容发表评论时?"
+      change: "更改"
+      change_language: "更改语言"
+      change_password: "更改密码"
+      close_account: "关闭帐号"
+      comment_on_post: "……当有人对您的内容发表评论时?"
+      current_password: "当前密码"
+      download_photos: "下载我的照片"
+      download_xml: "下载我的 xml"
+      edit_account: "编辑帐号"
+      export_data: "资料导出"
+      mentioned: "……当贴文中提到您时?"
+      new_password: "新密码"
+      private_message: "……当收到私人信息时?"
+      receive_email_notifications: "是否要在以下情况收到电子邮件通知……"
+      request_acceptence: "……当请求跟人分享被接受时?"
+      request_received: "……当收到有人想与您分享的新请求时?"
+      your_email: "您的电子邮箱"
+      your_handle: "您的 diaspora 帐号"
+    getting_started: 
+      connect_on_diaspora: "连接 Diaspora"
+      connect_services: "连接至你使用的其他服务"
+      could_not_find_anyone: "在 Diaspora* 上找不到任何朋友?请使用朋友搜索器来邀请他们。"
+      edit_profile: "编辑个人档案"
+      finished: "完成!"
+      save_and_continue: "保存并继续"
+      signup_steps: "完全下面三个步骤以完成注册:"
+      skip: "跳过使用入门"
+      step_2: 
+        find_your_friends_on_diaspora: "你想在 Diaspora 上联系 Facebook 上的朋友吗?"
+        skip: "跳过"
+      step_3: 
+        finish: "完成"
+        people_already_on_diaspora: "已使用 Diaspora 的人"
+      welcome: "欢迎来到 Diaspora!"
+    public: 
+      does_not_exist: "不存在 %{username} 这个用户!"
+    update: 
+      email_notifications_changed: "邮件通知更改成功"
+      language_changed: "语言更改成功"
+      language_not_changed: "语言更改失败"
+      password_changed: "密码更改成功"
+      password_not_changed: "密码更改失败"
+  webfinger: 
+    fetch_failed: "获取 %{profile_url} 的 webfinger 个人档案失败"
+    hcard_fetch_failed: "获取 %{account} 的 hcard 资料时发生错误"
+    no_person_constructed: "从这份 hcard 资料无法组建出联络人。"
+    not_enabled: "%{account} 的主机似乎没有启用 webfinger"
+    xrd_fetch_failed: "从 %{account} 这个帐号取得 xrd 时发生错误"
diff --git a/config/locales/diaspora/zh-TW.yml b/config/locales/diaspora/zh-TW.yml
index ca0c61f724806ad4e53bee10f37f10dd584c92f7..f04bb23cadbe8a24a463c50e2d7644b00f59208c 100644
--- a/config/locales/diaspora/zh-TW.yml
+++ b/config/locales/diaspora/zh-TW.yml
@@ -266,7 +266,7 @@ zh-TW:
       and_others: "和其他%{number}個人"
       mark_all_as_read: "全部標示為已讀"
       notifications: "消息"
-    mentioned: "提到了你, 在他們的"
+    mentioned: "在貼文中提到了你"
     new_request: "想要跟你分享."
     post: "貼文"
     private_message: "寫了一則訊息給你."
@@ -354,7 +354,7 @@ zh-TW:
       recent_posts: "近來貼文"
       recent_public_posts: "近來公開貼文"
       return_to_aspects: "回你的面向主頁"
-      similar_contacts: "相似的聯繫"
+      see_all: "看全部"
       start_sharing: "開始分享"
       to_accept_or_ignore: "接受或不管它."
       you_have_no_tags: "你沒有標籤!"
@@ -520,7 +520,7 @@ zh-TW:
       logged_in: "已登入至 %{service}"
       manage: "管理已連線的服務"
       outside: "不使用 Diaspora 的人也能看到公開訊息."
-      title: "你將要發表公開訊息!"
+      title: "設定連線服務"
     publisher: 
       add_photos: "加入相片"
       all: "全部"
diff --git a/config/locales/diaspora/zh.yml b/config/locales/diaspora/zh.yml
deleted file mode 100644
index 94f617f5fdf5f8d74605b596ed613e588ce5aa1e..0000000000000000000000000000000000000000
--- a/config/locales/diaspora/zh.yml
+++ /dev/null
@@ -1,617 +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.
-
-
-zh: 
-  _comments: "评论"
-  _home: "首页"
-  _photos: "照片"
-  _services: "服务"
-  account: "帐户"
-  activerecord: 
-    errors: 
-      models: 
-        contact: 
-          attributes: 
-            person_id: 
-              taken: "must be unique among this user's contacts."
-        person: 
-          attributes: 
-            diaspora_handle: 
-              taken: "is already taken."
-        request: 
-          attributes: 
-            from_id: 
-              taken: "is a duplicate of a pre-existing request."
-        user: 
-          attributes: 
-            email: 
-              taken: "is already taken."
-            person: 
-              invalid: "is invalid."
-            username: 
-              taken: "is already taken."
-  ago: "%{time}以前"
-  all_aspects: "All aspects"
-  application: 
-    helper: 
-      unknown_person: "陌生人"
-      video_title: 
-        unknown: "未知的视频标题"
-  are_you_sure: "你确定吗?"
-  aspect_memberships: 
-    destroy: 
-      failure: "Failed to remove person from aspect"
-      no_membership: "Could not find the selected person in that aspect"
-      success: "Successfully removed person from aspect"
-  aspects: 
-    add_to_aspect: 
-      failure: "无法把联系人加入分组。"
-      success: "联系人已成功加入分组。"
-    aspect_contacts: 
-      done_editing: "编辑完成"
-    aspect_stream: 
-      activity: "activity"
-      post_time: "post time"
-      sort_by: "sort by:"
-    contacts_not_visible: "Contacts in this aspect will not be able to see each other."
-    contacts_visible: "Contacts in this aspect will be able to see each other."
-    create: 
-      failure: "分组创建失败。"
-      success: "您的新分组%{name}已创建成功"
-    destroy: 
-      failure: "%{name} is not empty and could not be removed."
-      success: "成功删除%{name}。"
-    edit: 
-      add_existing: "增加一个现有联系人"
-      aspect_list_is_not_visible: "aspect list is hidden to others in aspect"
-      aspect_list_is_visible: "aspect list is visible to others in aspect"
-      confirm_remove_aspect: "你确定你要删除这个分组吗?"
-      done: "Done"
-      make_aspect_list_visible: "make aspect list visible?"
-      remove_aspect: "删除这个分组"
-      rename: "改名"
-      update: "update"
-      updating: "updating"
-    few: "%{count} aspects"
-    helper: 
-      are_you_sure: "您确定要删除这个分组吗?"
-      aspect_not_empty: "此分组非空"
-      remove: "移除"
-    index: 
-      handle_explanation: "这是你在Diaspora的地址,就像电子邮件地址一样,你可以把这个发送给人们以便他们找到你。"
-      no_contacts: "没有联系人"
-      post_a_message: "post a message >>"
-    manage: 
-      add_a_new_aspect: "增加一个新的分组"
-      add_a_new_contact: "新增一个联系人"
-      drag_to_add: "Drag to add people"
-      manage_aspects: "管理分组"
-      no_requests: "没有新的邀请"
-      requests: "邀请"
-    many: "%{count} aspects"
-    move_contact: 
-      error: "Error moving contact: %{inspect}"
-      failure: "didn't work %{inspect}"
-      success: "该用户已成功转移到新的分组"
-    new_aspect: 
-      create: "创建"
-      name: "名称"
-    no_posts_message: 
-      start_talking: "还没人冒泡,说点什么吧!"
-    one: "1 aspect"
-    other: "%{count} aspects"
-    seed: 
-      family: "家庭"
-      work: "工作"
-    show: 
-      edit_aspect: "编辑分组"
-    update: 
-      failure: "您的分组%{name}因名字太长而无法保存。"
-      success: "您的%{name}分组编辑完成。"
-    zero: "no aspects"
-  back: "后退"
-  bookmarklet: 
-    explanation: "%{link} from anywhere by bookmarking this link."
-    explanation_link_text: "Post to Diaspora"
-    post_something: "Post something to Diaspora"
-    post_success: "Posted! Closing!"
-  cancel: "取消"
-  comments: 
-    few: "%{count} comments"
-    many: "%{count} comments"
-    new_comment: 
-      comment: "评论"
-      commenting: "评论中"
-    one: "1 comment"
-    other: "%{count} comments"
-    zero: "no comments"
-  contacts: 
-    create: 
-      failure: "Failed to create contact"
-    destroy: 
-      failure: "Failed to disconnect from %{name}"
-      success: "Successfully disconnected from %{name}"
-    few: "%{count}个联系人"
-    many: "%{count} contacts"
-    one: "1个联系人"
-    other: "%{count}个联系人"
-    share_with_pane: 
-      accepts: "Once %{name} accepts, you'll start seeing each other's posts on Diaspora"
-      add_new_aspect: "add to new aspect"
-      share_with: "Start sharing with %{name}"
-    zero: "没有联系人"
-  conversations: 
-    create: 
-      sent: "Message sent"
-    destroy: 
-      success: "Conversation successfully removed"
-    helper: 
-      new_messages: 
-        few: "%{count} new messages"
-        many: "%{count} new messages"
-        one: "1 new messages"
-        other: "%{count} new messages"
-        zero: "no new messages"
-    index: 
-      create_a_new_message: "create a new message"
-      inbox: "Inbox"
-      message_inbox: "Message Inbox"
-      new_message: "New Message"
-      no_conversation_selected: "no conversation selected"
-      no_messages: "no messages"
-    new: 
-      send: "Send"
-      subject: "subject"
-      to: "to"
-    show: 
-      delete: "delete and block conversation"
-      reply: "reply"
-  date: 
-    formats: 
-      birthday: "%B %d"
-      birthday_with_year: "%B %d %Y"
-      fullmonth_day: "%B %d"
-  delete: "删除"
-  email: "电子邮件"
-  error_messages: 
-    helper: 
-      correct_the_following_errors_and_try_again: "请改正下面显示的错误并重试一遍。"
-      invalid_fields: "无效字段"
-  fill_me_out: "Fill me out"
-  hide: "Hide"
-  home: 
-    show: 
-      already_account: "您已经有一个账号了吗?"
-      choice: "选择"
-      choice_explanation: "Diaspora lets you sort your connections into groups called aspects. Unique to Diaspora, aspects ensure that your photos, stories and jokes are shared only with the people you intend."
-      learn_about_host: "学习如何建立自己的Diaspora服务。"
-      login_here: "从这里登陆"
-      ownership: "所属权"
-      ownership_explanation: "You own your pictures, and you shouldn’t have to give that up just to share them. You maintain ownership of everything you share on Diaspora, giving you full control over how it's distributed."
-      share_what_you_want: "共享什么、与谁共享,全由您定!"
-      simplicity: "简单"
-      simplicity_explanation: "Diaspora makes sharing clean and easy – and this goes for privacy too. Inherently private, Diaspora doesn’t make you wade through pages of settings and options just to keep your profile secure."
-      tagline_first_half: "分享您愿意分享的,"
-      tagline_second_half: "和你想要的人。"
-  invitations: 
-    check_token: 
-      not_found: "Invitation token not found"
-    create: 
-      already_contacts: "您和此人已关联上"
-      already_sent: "您已给这个人发送过邀请。"
-      no_more: "您没有其他的邀请了。"
-      rejected: "下列电子邮件地址有问题: "
-      sent: "邀请已被发送给:"
-    edit: 
-      sign_up: "sign_up"
-    new: 
-      already_invited: "已邀请过了"
-      aspect: "分组"
-      comma_seperated_plz: "You can enter multiple email addresses separated by commas."
-      if_they_accept_info: "一旦邀请被接受,他们就会被加入这个分组。"
-      invite_someone_to_join: "邀请些人加入Diaspora!"
-      personal_message: "个人消息"
-      resend: "Resend"
-      send_an_invitation: "发送一份邀请"
-      send_invitation: "发送邀请"
-      to: "ç»™"
-  layouts: 
-    application: 
-      have_a_problem: "Have a problem? Find an answer here"
-      powered_by: "POWERED BY DIASPORA*"
-      public_feed: "Public Diaspora Feed for %{name}"
-      toggle: "toggle mobile site"
-      whats_new: "what's new?"
-      your_aspects: "your aspects"
-    header: 
-      blog: "博客"
-      code: "代码"
-      login: "登录"
-      logout: "退出"
-      profile: "profile"
-      settings: "settings"
-  likes: 
-    likes: 
-      people_dislike_this: 
-        few: "%{count} people disliked this"
-        many: "%{count} people disliked this"
-        one: "1 person disliked this"
-        other: "%{count} people disliked this"
-        zero: "no people disliked this"
-      people_like_this: 
-        few: "%{count} people liked this"
-        many: "%{count} people liked this"
-        one: "1 person liked this"
-        other: "%{count} people liked this"
-        zero: "no people liked this"
-  more: "More"
-  next: "下一步"
-  no_results: "No Results Found"
-  notifications: 
-    also_commented: "also commented on your contact's"
-    also_commented_deleted: "commented on a deleted post"
-    comment_on_post: "commented on your"
-    deleted: "deleted"
-    helper: 
-      new_notifications: 
-        few: "%{count} new notifications"
-        many: "%{count} new notifications"
-        one: "1 new notifications"
-        other: "%{count} new notifications"
-        zero: "no new notifications"
-    index: 
-      and: "and"
-      and_others: "and %{number} others"
-      mark_all_as_read: "Mark All as Read"
-      notifications: "Notifications"
-    mentioned: "has mentioned you in their"
-    new_request: "offered to share with you."
-    post: "发布"
-    private_message: "sent you a message."
-    request_accepted: "accepted your share request."
-  notifier: 
-    also_commented: 
-      commented: "也在%{post_author}的帖子上发表了评论:"
-      sign_in: "请登录以便查看。"
-      subject: "%{name}也发表了评论。"
-    comment_on_post: 
-      commented: "您的帖子有新的评论!"
-      sign_in: "请登陆以便查看。"
-      subject: "%{name}在你的帖子上发表了评论。"
-    diaspora: "diaspora email机器人"
-    hello: "你好%{name}!"
-    love: "爱,"
-    manage_your_email_settings: "manage your email settings"
-    mentioned: 
-      mentioned: "mentioned you in a post:"
-      sign_in: "Sign in to view it."
-      subject: "%{name} has mentioned you on Diaspora*"
-    new_request: 
-      just_sent_you: "刚在Diaspora*上给您发送了一个联系人请求"
-      sign_in: "请于此登录"
-      subject: "有从%{from}发送过来的Diaspora*联系人请求"
-      try_it_out: "您最好认真的查看一下。"
-    private_message: 
-      message_subject: "Subject: %{subject}"
-      private_message: "has sent you a private message:"
-      sign_in: "Sign in to view it."
-      subject: "%{name} has sent you a private message yon Diaspora*"
-    request_accepted: 
-      accepted: "已接受您的联系人请求!"
-      sign_in: "Sign in here"
-      subject: "%{name}已接受您的好友请求"
-    single_admin: 
-      admin: "您的Diaspora管理员"
-      subject: "有关于您的Diaspora帐户的消息:"
-    thanks: "谢谢。"
-  ok: "好"
-  or: "或者"
-  password: "密码"
-  password_confirmation: "密码确认"
-  people: 
-    add_contact_small: 
-      add_contact_from_tag: "add contact from tag"
-    aspect_list: 
-      edit_membership: "edit aspect membership"
-    few: "%{count} people"
-    helper: 
-      people_on_pod_are_aware_of: " people on pod are aware of"
-      results_for: " results for %{params}"
-    index: 
-      couldnt_find_them_send_invite: "找不到他们吗?您可以给他们发个加入邀请!"
-      no_one_found: "...但是找不到任何人。"
-      no_results: "你好!你得用搜索功能去查找。"
-      results_for: "搜索结果"
-    many: "%{count} people"
-    one: "1 person"
-    other: "%{count} people"
-    person: 
-      add_contact: "增加联系人"
-      already_connected: "已关联"
-      pending_request: "您的邀请正等待确认"
-      thats_you: "thats you!"
-    profile_sidebar: 
-      bio: "自我简介"
-      born: "生日"
-      cannot_remove: "无法从分组中删除%{name}。(如果你要和这个人断开联系,你必须得删除这个联系人。)"
-      edit_my_profile: "编辑我的个人资料"
-      gender: "性别"
-      in_aspects: "在分组中"
-      location: "location"
-      remove_contact: "删除联系人"
-      remove_from: "真的要把%{name}从%{aspect}中删除吗?"
-    show: 
-      add_some: "add some"
-      does_not_exist: "此人不存在!"
-      edit: "edit"
-      incoming_request: "您有一条这个人发的邀请。"
-      mention: "Mention"
-      message: "Message"
-      no_posts: "无贴见人!"
-      not_connected: "还还没有和%{name}共享"
-      recent_posts: "最近的帖子"
-      recent_public_posts: "重新发布一遍公开贴"
-      return_to_aspects: "返回分组页面"
-      similar_contacts: "相似联系人"
-      start_sharing: "start sharing"
-      to_accept_or_ignore: "接受或者忽略。"
-      you_have_no_tags: "you have no tags!"
-    webfinger: 
-      fail: "Sorry, we couldn't find %{handle}."
-    zero: "no people"
-  photos: 
-    create: 
-      integrity_error: "图片上传失败,你肯定你上传的是图片吗?"
-      runtime_error: "Photo upload failed.  Are you sure that your seatbelt is fastened?"
-      type_error: "图片上传失败,你确定你上传的是一张图片吗?"
-    destroy: 
-      notice: "照片已被删除。"
-    edit: 
-      editing: "正在编辑中"
-    new: 
-      back_to_list: "返回列表"
-      new_photo: "新照片"
-      post_it: "提交!"
-    new_photo: 
-      empty: "{file}是一个空文件,请重新选择您要上传的文件并确保之前的空文件不在其中。"
-      invalid_ext: "{file}包含非法后缀,只有{extensions}这些后缀名是被允许的。"
-      size_error: "{file}太大,最大值为{sizeLimit}。"
-    new_profile_photo: 
-      or_select_one: "或者从你已有的相册中挑选一张"
-      upload: "上传一张新的个人资料头像!"
-    photo: 
-      view_all: "查看%{name}的所有照片"
-    show: 
-      collection_permalink: "collection permalink"
-      delete_photo: "删除照片"
-      edit: "编辑"
-      edit_delete_photo: "编辑照片说明 / 删除照片"
-      make_profile_photo: "make profile photo"
-      original_post: "Original Post"
-      permalink: "永久链接"
-      update_photo: "更新照片"
-      view: "查看"
-    update: 
-      error: "照片编辑失败。"
-      notice: "头像更新成功。"
-  post_visibilites: 
-    update: 
-      post_hidden: "%{name}'s post has been hidden."
-  posts: 
-    doesnt_exist: "that post does not exist!"
-  previous: "后退"
-  profile: "个人资料"
-  profiles: 
-    edit: 
-      allow_search: "Allow for people to search for you within Diaspora"
-      edit_profile: "Edit profile"
-      first_name: "First name"
-      last_name: "Last name"
-      update_profile: "Update Profile"
-      your_bio: "Your bio"
-      your_birthday: "Your birthday"
-      your_gender: "Your gender"
-      your_location: "Your location"
-      your_name: "Your name"
-      your_photo: "Your photo"
-      your_private_profile: "Your private profile"
-      your_public_profile: "Your public profile"
-      your_tags: "You: in 5 #tags"
-      your_tags_placeholder: "i.e. #diaspora #ironing #kittens #music"
-    update: 
-      failed: "Failed to update profile"
-      updated: "Profile updated"
-  registrations: 
-    closed: "这个Diaspora节点已关闭注册"
-    create: 
-      success: "您已加入Diaspora!"
-    edit: 
-      cancel_my_account: "删除我的帐户"
-      edit: "编辑%{name}"
-      leave_blank: "(如果您不像做任何更改请留空)"
-      password_to_confirm: "(我们需要您输入密码以确认您的更改)"
-      unhappy: "郁闷?"
-      update: "æ›´æ–°"
-    new: 
-      enter_email: "输入电子邮箱"
-      enter_password: "请输入密码"
-      enter_password_again: "请再输入一遍密码"
-      enter_username: "请取个用户名(只能包含字母、数字和下划线)"
-      sign_up: "注册"
-      sign_up_for_diaspora: "注册一个Diaspora账号"
-  requests: 
-    create: 
-      sending: "发送中"
-      sent: "%{name}已请求和您共享信息,下次一登入进Diaspora他们应该就能看到。"
-    destroy: 
-      error: "请选择一个分组!"
-      ignore: "忽略联系人邀请。"
-      success: "你们现在是朋友关系了。"
-    helper: 
-      new_requests: 
-        few: "%{count} new requests!"
-        many: "%{count} new requests!"
-        one: "new request!"
-        other: "%{count} new requests!"
-        zero: "no new requests"
-    manage_aspect_contacts: 
-      existing: "已有联系人"
-      manage_within: "Manage contacts within"
-    new_request_to_person: 
-      sent: "已发送!"
-  search: "搜索"
-  services: 
-    create: 
-      success: "授权成功。"
-    destroy: 
-      success: "Successfully deleted authentication."
-    failure: 
-      error: "请求服务时出现一个错误"
-    finder: 
-      friends: 
-        few: "%{count} friends"
-        many: "%{count} friends"
-        one: "1 friend"
-        other: "%{count} friends"
-        zero: "no friends"
-      invite_your_friends_from: "Invite your friends from %{service}"
-      not_connected: "not connected"
-    index: 
-      connect_to_facebook: "关联到Facebook"
-      connect_to_twitter: "和twitter互通"
-      disconnect: "æ–­å¼€"
-      edit_services: "编辑服务"
-      logged_in_as: "登入为"
-      really_disconnect: "断开%{service}吗?"
-    inviter: 
-      click_link_to_accept_invitation: "Click this link to accept your invitation"
-      join_me_on_diaspora: "Join me on DIASPORA*"
-    remote_friend: 
-      invite: "invite"
-      resend: "resend"
-  settings: "设置"
-  shared: 
-    add_contact: 
-      create_request: "Find by Diaspora handle"
-      diaspora_handle: "diaspora@handle.org"
-      enter_a_diaspora_username: "请输入Diaspora用户名:"
-      know_email: "你知道他们的电邮地址吗?你可以邀请他们来加入"
-      your_diaspora_username_is: "你的用户名: %{diaspora_handle}"
-    contact_list: 
-      all_contacts: "所有联系人"
-      cannot_remove: "无法把他从上一个分组中移除。(如果你要和这个人断开联系你就必须删除这个联系人。)"
-    footer: 
-      logged_in_as: "logged in as %{name}"
-      your_aspects: "your aspects"
-    invitations: 
-      by_email: "by Email"
-      dont_have_now: "您现在没有任何邀请,他们正在来的途中,请稍候!"
-      from_facebook: "From Facebook"
-      invitations_left: "(%{count} left)"
-      invite_someone: "邀请某人"
-      invite_your_friends: "Invite your friends"
-      invites: "邀请"
-      invites_closed: "这个Diaspora节点暂时关闭邀请功能"
-    notification: 
-      new: "New %{type} from %{from}"
-    public_explain: 
-      logged_in: "已登入%{service}"
-      manage: "管理相关的服务"
-      outside: "公开信息可以被Diaspora世界之外的人们看到。"
-      title: "你即将发布一条公开信息!"
-    publisher: 
-      add_photos: "增加照片"
-      all: "所有"
-      all_contacts: "所有联系人"
-      click_to_share_with: "Click to share with: "
-      make_public: "改为公开"
-      post_a_message_to: "发送信息给%{aspect}这个分组的所有人"
-      posting: "发布中"
-      public: "Public"
-      publishing_to: "publishing to: "
-      share: "分享"
-      share_with: "和%{aspect}这个分组中的人分享"
-      whats_on_your_mind: "what's on your mind?"
-    reshare: 
-      reshare: "再次分享"
-    stream_element: 
-      dislike: "I dislike this"
-      like: "I like this"
-  status_messages: 
-    create: 
-      success: "Successfully mentioned: %{names}"
-    destroy: 
-      failure: "Failed to delete post"
-    helper: 
-      no_message_to_display: "没有消息。"
-    new: 
-      mentioning: "Mentioning: %{person}"
-    show: 
-      destroy: "删除"
-      not_found: "Sorry, we couldn't find that post."
-      permalink: "永久链接"
-  stream_helper: 
-    hide_comments: "隐藏评论"
-    show_comments: "显示所有评论"
-  tags: 
-    show: 
-      nobody_talking: "Nobody is talking about %{tag} yet."
-      people_tagged_with: "People tagged with %{tag}"
-      posts_tagged_with: "Posts tagged with #%{tag}"
-  the_world: "世界"
-  undo: "Undo?"
-  username: "用户名"
-  users: 
-    destroy: "帐户已成功关闭。"
-    edit: 
-      also_commented: "...someone also comments on your contact's post?"
-      change: "修改"
-      change_language: "改变语言"
-      change_password: "修改密码"
-      close_account: "关闭帐户"
-      comment_on_post: "...someone comments on your post?"
-      current_password: "Current password"
-      download_photos: "下载我的照片"
-      download_xml: "下载我的xml文件"
-      edit_account: "编辑帐户"
-      export_data: "导出数据"
-      mentioned: "...you are mentioned in a post?"
-      new_password: "新密码"
-      private_message: "...you receive a private message?"
-      receive_email_notifications: "愿意接收电子邮件通知吗?"
-      request_acceptence: "...your share request is accepted?"
-      request_received: "...you receive a new share request?"
-      your_email: "您的电子邮件"
-      your_handle: "Your diaspora handle"
-    getting_started: 
-      connect_on_diaspora: "Connect on Diaspora"
-      connect_services: "关联您的其他服务"
-      could_not_find_anyone: "Could not find any friends on Diaspora*. Use the friend finder to invite them."
-      edit_profile: "编辑您的个人资料"
-      finished: "结束!"
-      save_and_continue: "保存并继续"
-      signup_steps: "要结束注册流程,请完成下面三个步骤:"
-      skip: "skip getting started"
-      step_2: 
-        find_your_friends_on_diaspora: "Would you like to find your Facebook friends on Diaspora?"
-        skip: "Skip"
-      step_3: 
-        finish: "Finish"
-        people_already_on_diaspora: "People already on Diaspora"
-      welcome: "欢迎来到Diaspora!"
-    public: 
-      does_not_exist: "%{username}这个用户不存在!"
-    update: 
-      email_notifications_changed: "电子邮件通知方式已改变"
-      language_changed: "Language Changed"
-      language_not_changed: "修改语言设置失败"
-      password_changed: "Password Changed"
-      password_not_changed: "Password Change Failed"
-  webfinger: 
-    fetch_failed: "failed to fetch webfinger profile for %{profile_url}"
-    hcard_fetch_failed: "there was a problem fetching the hcard for %{account}"
-    no_person_constructed: "No person could be constructed from this hcard."
-    not_enabled: "webfinger does not seem to be enabled for %{account}'s host"
-    xrd_fetch_failed: "there was an error getting the xrd from account %{account}"
diff --git a/config/locales/inflections/README.md b/config/locales/inflections/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1760b806f172aca1200f33be9700544ba8bd9fa7
--- /dev/null
+++ b/config/locales/inflections/README.md
@@ -0,0 +1,3 @@
+This directory contains the definitions for the [i18n-inflector gem](https://github.com/siefca/i18n-inflector).
+Look at the documentation there and our [contributing translations](https://github.com/diaspora/diaspora/wiki/How-to-contribute-translations) wiki page for more informations
+and how to contribute.
diff --git a/config/locales/javascript/javascript.bg.yml b/config/locales/javascript/javascript.bg.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ee7df882476a4a7f98f35c16f81e17f7e22ab8b5
--- /dev/null
+++ b/config/locales/javascript/javascript.bg.yml
@@ -0,0 +1,37 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+bg: 
+  javascripts: 
+    confirm_dialog: "Сигурни ли сте?"
+    infinite_scroll: 
+      no_more: "Няма повече публикации."
+    publisher: 
+      at_least_one_aspect: "Трябва да публикувате в поне един аспект"
+    search_for: "Търсене за {{name}}"
+    shared: 
+      contact_list: 
+        cannot_remove: "Лицето не може да бъде премахнато от последния аспект. (Ако желаете да бъде прекратена връзката с лицето е необходимо да премахнете контакта.)"
+    timeago: 
+      day: "ден"
+      days: "%d дни"
+      hour: "около час"
+      hours: "около %d часа"
+      minute: "около минута"
+      minutes: "%d минути"
+      month: "около месец"
+      months: "%d месеца"
+      prefixAgo: "преди"
+      prefixFromNow: "след"
+      seconds: "по-малко от минута"
+      suffixAgo: ""
+      suffixFromNow: "от сега"
+      year: "около година"
+      years: "%d години"
+    videos: 
+      unknown: "Неизвестен вид видео"
+      watch: "Гледайте видеото в {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.br.yml b/config/locales/javascript/javascript.br.yml
index 9933c9930eea4fd9d8b0aa3ac308613d67a299f7..49b0e006ac69d2ed6f89e38659f7d2a925ad595f 100644
--- a/config/locales/javascript/javascript.br.yml
+++ b/config/locales/javascript/javascript.br.yml
@@ -6,6 +6,8 @@
 br: 
   javascripts: 
     confirm_dialog: "Emaoc'h sur?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "Dav eo deoc'h embann un arvez da'n nebeutañ"
     search_for: "Klask war-lerc'h {{name}}"
@@ -31,3 +33,5 @@ br:
     videos: 
       unknown: "Stumm ar video dianav"
       watch: "Sellet ouzh ar video gant {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.cs.yml b/config/locales/javascript/javascript.cs.yml
index c95d25810dfbcb6f0b1b531a4f3ac733f4578a16..0ae0f31b4f07d16f45131801ebead5fe339bc263 100644
--- a/config/locales/javascript/javascript.cs.yml
+++ b/config/locales/javascript/javascript.cs.yml
@@ -6,6 +6,8 @@
 cs: 
   javascripts: 
     confirm_dialog: "Jste si jisti?"
+    infinite_scroll: 
+      no_more: "Žádné další příspěvky."
     publisher: 
       at_least_one_aspect: "Musíte publikovat alespoň do jednoho aspektu"
     search_for: "Hledat {{name}}"
@@ -31,3 +33,5 @@ cs:
     videos: 
       unknown: "Neznámý typ videa"
       watch: "Podívejte se na tohle video na {{provider}}"
+    web_sockets: 
+      disconnected: "Websocket je uzavřen, příspěvky již nebude možno sledovat živě."
diff --git a/config/locales/javascript/javascript.da.yml b/config/locales/javascript/javascript.da.yml
index 1a3b4907564f8d0c11c7ba61af2baf029dfea7b5..cfa4f0bc7c69be50cefd9fd363c7531b9b7631af 100644
--- a/config/locales/javascript/javascript.da.yml
+++ b/config/locales/javascript/javascript.da.yml
@@ -5,13 +5,15 @@
 
 da: 
   javascripts: 
-    confirm_dialog: "Are you sure?"
+    confirm_dialog: "Er du sikker?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
-      at_least_one_aspect: "You must publish to at least one aspect"
-    search_for: "Search for {{name}}"
+      at_least_one_aspect: "Du skal dele med mindst et aspekt"
+    search_for: "Søg efter {{name}}"
     shared: 
       contact_list: 
-        cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)"
+        cannot_remove: "Kan ikke fjerne personen fra sidste aspekt. (Hvis du ikke ønsker at dele med denne person mere må du fjerne ham fra kontakter.)"
     timeago: 
       day: "en dag"
       days: "%d dage"
@@ -29,5 +31,7 @@ da:
       year: "ca. et år"
       years: "%d år"
     videos: 
-      unknown: "Unknown video type"
-      watch: "Watch this video on {{provider}}"
+      unknown: "Ukendt video type"
+      watch: "Se denne video på {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.de.yml b/config/locales/javascript/javascript.de.yml
index 99f2454868f4cc7d35f7a57683a96154f6eb8f43..1ca5d0c93ce94291003f1f400819cd018dba6e39 100644
--- a/config/locales/javascript/javascript.de.yml
+++ b/config/locales/javascript/javascript.de.yml
@@ -6,6 +6,8 @@
 de: 
   javascripts: 
     confirm_dialog: "Bist du dir sicher?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "Du musst zumindest zu einem Aspekt posten"
     search_for: "Nach {{name}} suchen"
@@ -31,3 +33,5 @@ de:
     videos: 
       unknown: "Unbekanntes Videoformat"
       watch: "Dieses Video auf {{provider}} ansehen"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.el.yml b/config/locales/javascript/javascript.el.yml
index 605f401d7850e224ab4529a7a0c6068d2fc24cbe..f6e0d2f4537da5ecb2cc9c14d26da9e5e952eadd 100644
--- a/config/locales/javascript/javascript.el.yml
+++ b/config/locales/javascript/javascript.el.yml
@@ -6,6 +6,8 @@
 el: 
   javascripts: 
     confirm_dialog: "Είστε σίγουρος/η;"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "πρέπει να κάνετε δημοσίευση σε τουλάχιστον μια πτυχή"
     search_for: "Αναζήτηση για {{name}}"
@@ -31,3 +33,5 @@ el:
     videos: 
       unknown: "Άγνωστος τύπος βίντεο"
       watch: "Δείτε το βίντεο στο {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.en.yml b/config/locales/javascript/javascript.en.yml
index dc52cfc2b6ec4fa3025ff5a8d684be2d0bb284fd..97e3552f27459a73395d2e1a7cb417b5fe3c805c 100644
--- a/config/locales/javascript/javascript.en.yml
+++ b/config/locales/javascript/javascript.en.yml
@@ -5,6 +5,7 @@
 
 en:
   javascripts:
+
       confirm_dialog: "Are you sure?"
       timeago:
         prefixAgo: ""
@@ -31,4 +32,7 @@ en:
           cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)"
       publisher:
         at_least_one_aspect: "You must publish to at least one aspect"
-          
+      infinite_scroll:
+        no_more: "No more posts."
+      web_sockets:
+        disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.en_shaw.yml b/config/locales/javascript/javascript.en_shaw.yml
index 565cb8630ecdbef70be95bc1e95ab782b92a74ed..6ce50d51d79bf78a9b8f5c5db81ac488869227c4 100644
--- a/config/locales/javascript/javascript.en_shaw.yml
+++ b/config/locales/javascript/javascript.en_shaw.yml
@@ -6,6 +6,8 @@
 en_shaw: 
   javascripts: 
     confirm_dialog: "𐑸 𐑿 𐑖𐑻?"
+    infinite_scroll: 
+      no_more: "𐑯𐑴 𐑥𐑹 𐑐𐑴𐑕𐑑𐑕."
     publisher: 
       at_least_one_aspect: "𐑿 𐑥𐑳𐑕𐑑 𐑐𐑳𐑚𐑤𐑦𐑖 𐑑 𐑨𐑑 𐑤𐑰𐑕𐑑 𐑢𐑳𐑯 𐑨𐑕𐑐𐑧𐑒𐑑"
     search_for: "𐑕𐑻𐑗 𐑓𐑹 {{name}}"
@@ -31,3 +33,5 @@ en_shaw:
     videos: 
       unknown: "𐑩𐑯𐑯𐑴𐑯 𐑝𐑦𐑛𐑦𐑴 𐑑𐑲𐑐"
       watch: "𐑢𐑷𐑗 𐑞𐑦𐑕 𐑝𐑦𐑛𐑦𐑴 𐑪𐑯 {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.eo.yml b/config/locales/javascript/javascript.eo.yml
index fddaf15b15ac18a4a465a54db0618c051dc59772..16faceb1cd1197e6655713cb2072bc777752b374 100644
--- a/config/locales/javascript/javascript.eo.yml
+++ b/config/locales/javascript/javascript.eo.yml
@@ -6,6 +6,8 @@
 eo: 
   javascripts: 
     confirm_dialog: "Are you sure?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Search for {{name}}"
@@ -31,3 +33,5 @@ eo:
     videos: 
       unknown: "nekonata tipo de videaĵo"
       watch: "Watch this video on {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.es.yml b/config/locales/javascript/javascript.es.yml
index e668e963172efe31e5bab32579c0d003a79cc083..0d8f42b7f9ca3b38caccd174e0e2b6bd754257b2 100644
--- a/config/locales/javascript/javascript.es.yml
+++ b/config/locales/javascript/javascript.es.yml
@@ -6,6 +6,8 @@
 es: 
   javascripts: 
     confirm_dialog: "¿Estás seguro?"
+    infinite_scroll: 
+      no_more: "No hay más publicaciones."
     publisher: 
       at_least_one_aspect: "Debes publicarlo en al menos un aspecto"
     search_for: "Buscar a {{name}}"
@@ -31,3 +33,5 @@ es:
     videos: 
       unknown: "Tipo de video desconocido"
       watch: "Ver este video con {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.eu.yml b/config/locales/javascript/javascript.eu.yml
index 1532e2a6a950a88f55ceeb6005db01109f997c55..13782b03971e072450fb344034126c40ab19314c 100644
--- a/config/locales/javascript/javascript.eu.yml
+++ b/config/locales/javascript/javascript.eu.yml
@@ -6,6 +6,8 @@
 eu: 
   javascripts: 
     confirm_dialog: "Ziur al zaude?"
+    infinite_scroll: 
+      no_more: "Mezu gehiagorik ez dago."
     publisher: 
       at_least_one_aspect: "Gutxienez alderdi batean partekatu behar duzu"
     search_for: "Bilatu {{name}}"
@@ -31,3 +33,5 @@ eu:
     videos: 
       unknown: "Bideo mota ezezaguna"
       watch: "Ikusi bideo hau {{provider}}(e)n"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.fi.yml b/config/locales/javascript/javascript.fi.yml
index 9cb1437689e570270460cf122dcd41a96fc2ad13..9e2aaf553d1e5c630f298348011382b1085a2094 100644
--- a/config/locales/javascript/javascript.fi.yml
+++ b/config/locales/javascript/javascript.fi.yml
@@ -6,6 +6,8 @@
 fi: 
   javascripts: 
     confirm_dialog: "Oletko varma?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Etsi nimellä {{name}}"
@@ -31,3 +33,5 @@ fi:
     videos: 
       unknown: "Tuntematon videomuoto"
       watch: "Katso video {{provider}} :ssa"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.fr.yml b/config/locales/javascript/javascript.fr.yml
index b8ddcfc2db37b9e6c0f80514353dd5ae3329d0d9..433532bb0a85cc525a4eec375c597201db6dd9ac 100644
--- a/config/locales/javascript/javascript.fr.yml
+++ b/config/locales/javascript/javascript.fr.yml
@@ -6,6 +6,8 @@
 fr: 
   javascripts: 
     confirm_dialog: "Êtes-vous sûr ?"
+    infinite_scroll: 
+      no_more: "Pas d'autre messages."
     publisher: 
       at_least_one_aspect: "Vous devez créer au moins un aspect"
     search_for: "Chercher {{name}}"
@@ -31,3 +33,5 @@ fr:
     videos: 
       unknown: "Type de vidéo inconnu"
       watch: "Voir cette vidéo sur {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.gl.yml b/config/locales/javascript/javascript.gl.yml
index 259b1718e08998886e9c273852992a0e409f5dc2..a43b0dbed7cba9cf82afa83bf7eac5773e358f8e 100644
--- a/config/locales/javascript/javascript.gl.yml
+++ b/config/locales/javascript/javascript.gl.yml
@@ -5,21 +5,21 @@
 
 gl: 
   javascripts: 
-    confirm_dialog: "Seguro?"
+    confirm_dialog: "Está seguro?"
     publisher: 
-      at_least_one_aspect: "Tes que publicalo polo menos nun aspecto"
+      at_least_one_aspect: "Ten que publicalo polo menos nun aspecto."
     search_for: "Buscar a {{name}}"
     shared: 
       contact_list: 
-        cannot_remove: "Non podes quitar esta persoa do aspecto. Se te queres desconectar dela tes que borrar o contacto."
+        cannot_remove: "Non pode quitar esta persoa do aspecto. Se non quere seguir compartindo con ela, elimínea como contacto."
     timeago: 
       day: "un día"
       days: "%d días"
-      hour: "sobre unha hora"
-      hours: "sobre %d horas"
-      minute: "sobre un minuto"
+      hour: "arredor dunha hora"
+      hours: "arredor de %d horas"
+      minute: "arredor dun minuto"
       minutes: "%d minutos"
-      month: "sobre un mes"
+      month: "arredor dun mes"
       months: "%d meses"
       prefixAgo: "Hai"
       prefixFromNow: ""
@@ -29,5 +29,5 @@ gl:
       year: "sobre un ano"
       years: "%d anos"
     videos: 
-      unknown: "Tipo de video descoñecido"
-      watch: "Ver video en {{provider}}"
+      unknown: "Tipo de vídeo descoñecido"
+      watch: "Ver o vídeo en {{provider}}"
diff --git a/config/locales/javascript/javascript.he.yml b/config/locales/javascript/javascript.he.yml
index 5ddbb542e32695fa6abd4149e369dc9ce9f233c2..b6c8cb35ad6ddbdad8562752678eab6d394f99aa 100644
--- a/config/locales/javascript/javascript.he.yml
+++ b/config/locales/javascript/javascript.he.yml
@@ -6,6 +6,8 @@
 he: 
   javascripts: 
     confirm_dialog: "בבטחה?"
+    infinite_scroll: 
+      no_more: "אין רשומות נוספות."
     publisher: 
       at_least_one_aspect: "עליך לפרסם היבט אחד לפחות"
     search_for: "חיפוש אחר {{name}}"
@@ -31,3 +33,5 @@ he:
     videos: 
       unknown: "סוג הווידאו אינו ידוע"
       watch: "צפייה בסרטון וידאו זה באתר {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.hu.yml b/config/locales/javascript/javascript.hu.yml
index 160cdde517077d3f21619fd1944f3acedb826290..a2753e7beae9526f26e2fb801ff36292bbad573c 100644
--- a/config/locales/javascript/javascript.hu.yml
+++ b/config/locales/javascript/javascript.hu.yml
@@ -6,6 +6,8 @@
 hu: 
   javascripts: 
     confirm_dialog: "Biztos vagy benne?"
+    infinite_scroll: 
+      no_more: "Nincs több bejegyzés."
     publisher: 
       at_least_one_aspect: "Minimum 1 csoportnak meg kell osztanod!"
     search_for: "{{name}} keresése."
@@ -31,3 +33,5 @@ hu:
     videos: 
       unknown: "Ismeretlen videó tipus"
       watch: "Videó megtekintése itt: {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.id.yml b/config/locales/javascript/javascript.id.yml
index a85a3befa955f698e58228d7510fbae8fbe8dfb6..74a1b23b12a2d0aed5d626b0453045543b379418 100644
--- a/config/locales/javascript/javascript.id.yml
+++ b/config/locales/javascript/javascript.id.yml
@@ -6,6 +6,8 @@
 id: 
   javascripts: 
     confirm_dialog: "Are you sure?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Search for {{name}}"
@@ -31,3 +33,5 @@ id:
     videos: 
       unknown: "Unknown video type"
       watch: "Watch this video on {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.is.yml b/config/locales/javascript/javascript.is.yml
index 78044ee7cb5ad6a566c56140de4d4665a893f658..1fbb83ba040b27d747bae85a31bcb1fd5bc2be5a 100644
--- a/config/locales/javascript/javascript.is.yml
+++ b/config/locales/javascript/javascript.is.yml
@@ -6,6 +6,8 @@
 is: 
   javascripts: 
     confirm_dialog: "Ertu viss?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Search for {{name}}"
@@ -31,3 +33,5 @@ is:
     videos: 
       unknown: "Óþekkt vídeó tegund"
       watch: "Horfa á þetta vídeó á {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.it.yml b/config/locales/javascript/javascript.it.yml
index 2ce16a5649b15c6ba384ef43e02edae5eb6ce588..b538f9c611ab9c0024f49848a9ac1a447b14fc17 100644
--- a/config/locales/javascript/javascript.it.yml
+++ b/config/locales/javascript/javascript.it.yml
@@ -6,8 +6,10 @@
 it: 
   javascripts: 
     confirm_dialog: "Sei sicuro?"
+    infinite_scroll: 
+      no_more: "Non ci sono altri post."
     publisher: 
-      at_least_one_aspect: "You must publish to at least one aspect"
+      at_least_one_aspect: "Devi condividere almeno con un aspetto"
     search_for: "Ricerca per {{name}}"
     shared: 
       contact_list: 
@@ -31,3 +33,5 @@ it:
     videos: 
       unknown: "Tipo di video sconosciuto"
       watch: "Guarda questo video su {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.ja.yml b/config/locales/javascript/javascript.ja.yml
index 274f87fe56eed2a9c1cb2b063e32c0b5c5945da2..8cc5332b8a76460975eea847202ad56e0d2afe4d 100644
--- a/config/locales/javascript/javascript.ja.yml
+++ b/config/locales/javascript/javascript.ja.yml
@@ -1,18 +1,37 @@
-ja:
-  javascripts:
-    timeago:
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+ja: 
+  javascripts: 
+    confirm_dialog: "本当にいいですか。"
+    infinite_scroll: 
+      no_more: "投稿は以上です。"
+    publisher: 
+      at_least_one_aspect: "少なくても一つのアスペクトへ投稿しなければなりません"
+    search_for: "{{name}}を検索する"
+    shared: 
+      contact_list: 
+        cannot_remove: "残り最後のアスペクトから人を除外することができません。(人とのつながりを解除したい場合は連絡先を削除してください。)"
+    timeago: 
+      day: "1æ—¥"
+      days: "%dæ—¥"
+      hour: "大体1時間"
+      hours: "大体%d時間"
+      minute: "約1分"
+      minutes: "%d分"
+      month: "大体1ヶ月"
+      months: "%dヶ月"
       prefixAgo: ""
       prefixFromNow: "今から"
+      seconds: "1分未満"
       suffixAgo: "前"
       suffixFromNow: "後"
-      seconds: "ほんの数秒"
-      minute: "約一分"
-      minutes: "%d 分"
-      hour: "大体一時間"
-      hours: "大体 %d 時間位"
-      day: "一日"
-      days: "%d 日ほど"
-      month: "大体一ヶ月"
-      months: "%d ヶ月ほど"
-      year: "丁度一年(虎舞流w)"
-      years: "%d å¹´"
+      year: "大体1年"
+      years: "%då¹´"
+    videos: 
+      unknown: "動画の種類が不明です"
+      watch: "{{provider}}で動画を視聴する"
+    web_sockets: 
+      disconnected: "接続が解除されました。投稿のリアルタイム更新を中断します。"
diff --git a/config/locales/javascript/javascript.ko.yml b/config/locales/javascript/javascript.ko.yml
index dfffeda5a0879704f34b232ec3054a28d17c5699..26b2c809ab8000cc013ebca540a5c326b10909d9 100644
--- a/config/locales/javascript/javascript.ko.yml
+++ b/config/locales/javascript/javascript.ko.yml
@@ -1,16 +1,37 @@
-ko:
-  javascripts:
-    timeago:
-      suffixAgo: "ì „"
-      suffixFromNow: "후"
-      seconds: "1분  이내"
-      minute: "1분"
-      minutes: "%d분"
-      hour: "1시간"
-      hours: "%d시간"
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+ko: 
+  javascripts: 
+    confirm_dialog: "확실합니까?"
+    infinite_scroll: 
+      no_more: "메시지가 더 없습디다."
+    publisher: 
+      at_least_one_aspect: "공유하려면 적어도 한 애스펙을 골라야 합니다."
+    search_for: "{{name}} 검색"
+    shared: 
+      contact_list: 
+        cannot_remove: "모든 컨택은 적어도 한 애스펙에 속해야 합니다. 공유를 끊고 싶다면 컨택을 지워야 합니다."
+    timeago: 
       day: "하루"
       days: "%d일"
-      month: "한달"
-      months: "%d달"
-      year: "1ë…„"
+      hour: "약 한 시간"
+      hours: "약 %d시간"
+      minute: "몇 분"
+      minutes: "%d분"
+      month: "약 한 달"
+      months: "%d개월"
+      prefixAgo: ""
+      prefixFromNow: "지금부터"
+      seconds: "방금"
+      suffixAgo: "ì „"
+      suffixFromNow: ""
+      year: "한 해"
       years: "%dë…„"
+    videos: 
+      unknown: "알 수 없는 동영상 형식"
+      watch: "동영상을 {{provider}}에서 보기"
+    web_sockets: 
+      disconnected: "웹소켓이 닫혔습니다. 앞으로는 공유물이 실시간으로 제공되지 않습니다."
diff --git a/config/locales/javascript/javascript.ml.yml b/config/locales/javascript/javascript.ml.yml
index daa3d10eef88678f0fa9b3f01b3a103ce9ce978b..645cb8cf749eb572ed8f1304ddfd1f9b76463093 100644
--- a/config/locales/javascript/javascript.ml.yml
+++ b/config/locales/javascript/javascript.ml.yml
@@ -6,6 +6,8 @@
 ml: 
   javascripts: 
     confirm_dialog: "Are you sure?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Search for {{name}}"
@@ -31,3 +33,5 @@ ml:
     videos: 
       unknown: "Unknown video type"
       watch: "Watch this video on {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.nb.yml b/config/locales/javascript/javascript.nb.yml
index 0f0cb5ac294c2d580e6aad5a11bbdb8c242fd5b4..3e1962e142049a7ee7f535e3fdd390aab53fbbed 100644
--- a/config/locales/javascript/javascript.nb.yml
+++ b/config/locales/javascript/javascript.nb.yml
@@ -6,6 +6,8 @@
 nb: 
   javascripts: 
     confirm_dialog: "Er du sikker?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "Du må poste til minst ett aspekt"
     search_for: "Søk etter {{name}}"
@@ -31,3 +33,5 @@ nb:
     videos: 
       unknown: "Ukjent videotype"
       watch: "Se denne videoen på {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.nl.yml b/config/locales/javascript/javascript.nl.yml
index c47466fe2836ba6a052932234565ddbfade2d199..f8a4f01dcbaca7d3079ea2f5e07e9188a6ec3efc 100644
--- a/config/locales/javascript/javascript.nl.yml
+++ b/config/locales/javascript/javascript.nl.yml
@@ -6,6 +6,8 @@
 nl: 
   javascripts: 
     confirm_dialog: "Weet je het zeker?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "Je moet op zijn minst één aspect publiceren"
     search_for: "Zoek naar {{name}}"
@@ -31,3 +33,5 @@ nl:
     videos: 
       unknown: "Onbekend video type"
       watch: "Bekijk deze video op {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.pl.yml b/config/locales/javascript/javascript.pl.yml
index 3707e31a0e64b142b2102a48355d0f48a889e8ae..f0628ffe6b54c2289287d10c8b4ebb168a5493c1 100644
--- a/config/locales/javascript/javascript.pl.yml
+++ b/config/locales/javascript/javascript.pl.yml
@@ -6,8 +6,10 @@
 pl: 
   javascripts: 
     confirm_dialog: "Czy @{m,f:jesteÅ›|n:na}{ pew}{m:ien|f:na|n:no}?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
-      at_least_one_aspect: "You must publish to at least one aspect"
+      at_least_one_aspect: "Musisz udostępnić dla co najmniej jednego aspektu"
     search_for: "Szukaj: {{name}}"
     shared: 
       contact_list: 
@@ -31,3 +33,5 @@ pl:
     videos: 
       unknown: "Nieznany typ wideo"
       watch: "OglÄ…daj to wideo na {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.pt-BR.yml b/config/locales/javascript/javascript.pt-BR.yml
index b0286c822e6d876e5de22da44f0ad72978209ca4..a91ccdf6cf7e8ae2cc11e110f44fba1711e8d3c1 100644
--- a/config/locales/javascript/javascript.pt-BR.yml
+++ b/config/locales/javascript/javascript.pt-BR.yml
@@ -6,6 +6,8 @@
 pt-BR: 
   javascripts: 
     confirm_dialog: "Tem certeza?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Search for {{name}}"
@@ -31,3 +33,5 @@ pt-BR:
     videos: 
       unknown: "Tipo de vídeo desconhecido"
       watch: "Assista este vídeo no {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.pt-PT.yml b/config/locales/javascript/javascript.pt-PT.yml
index 53fc7d064b7ff1359617344cc501518c6b020397..5b7ccc7daef3e91680640ae74fc5eae3c8e0c0b4 100644
--- a/config/locales/javascript/javascript.pt-PT.yml
+++ b/config/locales/javascript/javascript.pt-PT.yml
@@ -6,6 +6,8 @@
 pt-PT: 
   javascripts: 
     confirm_dialog: "Are you sure?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Search for {{name}}"
@@ -31,3 +33,5 @@ pt-PT:
     videos: 
       unknown: "Unknown video type"
       watch: "Watch this video on {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.ro.yml b/config/locales/javascript/javascript.ro.yml
index 71507a52a4c0e082b2aef4d14f5dd52b978abc26..7dd18f5087330cb3485bc0451ab9ef68f3b5662c 100644
--- a/config/locales/javascript/javascript.ro.yml
+++ b/config/locales/javascript/javascript.ro.yml
@@ -6,6 +6,8 @@
 ro: 
   javascripts: 
     confirm_dialog: "EÅŸti sigur?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Search for {{name}}"
@@ -31,3 +33,5 @@ ro:
     videos: 
       unknown: "Format de video necunoscut"
       watch: "Vizualizează acest video pe {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.ru.yml b/config/locales/javascript/javascript.ru.yml
index ae0c1d1afb46f264cea802f9b76064ef794f2976..1f9e99644f69d784f4862478674f17858e991e42 100644
--- a/config/locales/javascript/javascript.ru.yml
+++ b/config/locales/javascript/javascript.ru.yml
@@ -6,6 +6,8 @@
 ru: 
   javascripts: 
     confirm_dialog: "Вы уверенны? "
+    infinite_scroll: 
+      no_more: "Сообщений больше нет."
     publisher: 
       at_least_one_aspect: "Вам надо минимум один аспект создать"
     search_for: "Искать {{name}}"
@@ -31,3 +33,5 @@ ru:
     videos: 
       unknown: "Неизвестный видеоформат"
       watch: "Смотреть это видео на {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.sk.yml b/config/locales/javascript/javascript.sk.yml
index a55234d63033b1c78c55b473c2eabe7f342e031e..afcdc24c21362d9eb59f68247b3df9c86ed72ae8 100644
--- a/config/locales/javascript/javascript.sk.yml
+++ b/config/locales/javascript/javascript.sk.yml
@@ -6,6 +6,8 @@
 sk: 
   javascripts: 
     confirm_dialog: "Ste si istý?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Hľadať {{name}}"
@@ -31,3 +33,5 @@ sk:
     videos: 
       unknown: "Neznámy typ videa"
       watch: "Pozrite sa na toto video na {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.sl.yml b/config/locales/javascript/javascript.sl.yml
index 345bdfada6cd8a346bba02594451e3727de95f19..bb3d86b80936ac47cab2377828bbc0e4aa95ae60 100644
--- a/config/locales/javascript/javascript.sl.yml
+++ b/config/locales/javascript/javascript.sl.yml
@@ -6,6 +6,8 @@
 sl: 
   javascripts: 
     confirm_dialog: "Are you sure?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "Search for {{name}}"
@@ -31,3 +33,5 @@ sl:
     videos: 
       unknown: "Unknown video type"
       watch: "Watch this video on {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.sv.yml b/config/locales/javascript/javascript.sv.yml
index 51ec24e6877a88d8aff169b5bad5f542d55718c2..48002e2b784ff852c5f09641fcc035d21b6fc5e1 100644
--- a/config/locales/javascript/javascript.sv.yml
+++ b/config/locales/javascript/javascript.sv.yml
@@ -6,6 +6,8 @@
 sv: 
   javascripts: 
     confirm_dialog: "Är du säker?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "Du måste publicera till minst en aspekt."
     search_for: "Sök efter {{name}}"
@@ -31,3 +33,5 @@ sv:
     videos: 
       unknown: "Okänd videotyp"
       watch: "Se denhär videon på {{provider}}"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.tr.yml b/config/locales/javascript/javascript.tr.yml
index cfbaffbc134baaa533723d245c1dcac7e163b987..64a32f6cc23cc7ad90a5d23993fac1a7c2bc683e 100644
--- a/config/locales/javascript/javascript.tr.yml
+++ b/config/locales/javascript/javascript.tr.yml
@@ -6,6 +6,8 @@
 tr: 
   javascripts: 
     confirm_dialog: "Emin misiniz?"
+    infinite_scroll: 
+      no_more: "No more posts."
     publisher: 
       at_least_one_aspect: "You must publish to at least one aspect"
     search_for: "{{name}}'i ara"
@@ -31,3 +33,5 @@ tr:
     videos: 
       unknown: "Bilinmeyen video tipi"
       watch: "Bu videoyu {{provider}}'da izle"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.zh-CN.yml b/config/locales/javascript/javascript.zh-CN.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5601ec70afb28964ecc894cb4f2a82a1f038945f
--- /dev/null
+++ b/config/locales/javascript/javascript.zh-CN.yml
@@ -0,0 +1,37 @@
+#   Copyright (c) 2010, Diaspora Inc.  This file is
+#   licensed under the Affero General Public License version 3 or later.  See
+#   the COPYRIGHT file.
+
+
+zh-CN: 
+  javascripts: 
+    confirm_dialog: "你确定吗?"
+    infinite_scroll: 
+      no_more: "No more posts."
+    publisher: 
+      at_least_one_aspect: "发布时请选择至少一个情景"
+    search_for: "搜索 {{name}}"
+    shared: 
+      contact_list: 
+        cannot_remove: "无法将好友从他所在的最后一个情景中移除。(如果你想与这个人断绝连结,你可以解除与他的好友关系。)"
+    timeago: 
+      day: "1天"
+      days: "%d天"
+      hour: "约1小时"
+      hours: "约%d小时"
+      minute: "约1分钟"
+      minutes: "%d分钟"
+      month: "约1个月"
+      months: "%d个月"
+      prefixAgo: ""
+      prefixFromNow: ""
+      seconds: "少于1分钟"
+      suffixAgo: "前"
+      suffixFromNow: "后"
+      year: "约1年"
+      years: "%då¹´"
+    videos: 
+      unknown: "未知视频格式"
+      watch: "在 {{provider}} 上看观看视频"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.zh-TW.yml b/config/locales/javascript/javascript.zh-TW.yml
index 8c887dd792b8829f1b5f72a83e80103444bc1cf9..01c27fd3fe38696d6c05698ddcdcd4fc3be43002 100644
--- a/config/locales/javascript/javascript.zh-TW.yml
+++ b/config/locales/javascript/javascript.zh-TW.yml
@@ -6,6 +6,8 @@
 zh-TW: 
   javascripts: 
     confirm_dialog: "你確定嗎?"
+    infinite_scroll: 
+      no_more: "沒有貼文了."
     publisher: 
       at_least_one_aspect: "發表時請至少選擇一個面向"
     search_for: "搜尋 {{name}}"
@@ -31,3 +33,5 @@ zh-TW:
     videos: 
       unknown: "不明的影片類別"
       watch: "從 {{provider}} 看這部影片"
+    web_sockets: 
+      disconnected: "The websocket is closed; posts will no longer be streamed live."
diff --git a/config/locales/javascript/javascript.zh.yml b/config/locales/javascript/javascript.zh.yml
deleted file mode 100644
index 7c75b4a05e52cee79d48856833e83884309db3b9..0000000000000000000000000000000000000000
--- a/config/locales/javascript/javascript.zh.yml
+++ /dev/null
@@ -1,33 +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.
-
-
-zh: 
-  javascripts: 
-    confirm_dialog: "Are you sure?"
-    publisher: 
-      at_least_one_aspect: "You must publish to at least one aspect"
-    search_for: "Search for {{name}}"
-    shared: 
-      contact_list: 
-        cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)"
-    timeago: 
-      day: "1 天"
-      days: "%d 天"
-      hour: "大约 1 小时"
-      hours: "大约 %d 小时"
-      minute: "大约 1 分钟"
-      minutes: "%d 分钟"
-      month: "大约 1 个月"
-      months: "%d 月"
-      prefixAgo: ""
-      prefixFromNow: "从现在开始"
-      seconds: "不到 1 分钟"
-      suffixAgo: "之前"
-      suffixFromNow: ""
-      year: "大约 1 年"
-      years: "%d å¹´"
-    videos: 
-      unknown: "Unknown video type"
-      watch: "Watch this video on {{provider}}"
diff --git a/config/locales/rails-i18n/README b/config/locales/rails-i18n/README.md
similarity index 100%
rename from config/locales/rails-i18n/README
rename to config/locales/rails-i18n/README.md
diff --git a/config/locales/rails-i18n/ar.yml b/config/locales/rails-i18n/ar.yml
index 4488c5cfa0573093a92ee0bee229a8727bdd17d8..2fdd026622805b30142a30f57321d971f1b9aff8 100644
--- a/config/locales/rails-i18n/ar.yml
+++ b/config/locales/rails-i18n/ar.yml
@@ -1,4 +1,4 @@
-# Arabic translations for Ruby on Rails 
+# Arabic translations for Ruby on Rails
 # by Rida Al Barazi (me@rida.me)
 # updated by Ahmed Hazem (nardgo@gmail.com)
 # Rails 3 edit by rbjarnason
@@ -86,10 +86,10 @@
         format: "%n %u"
         units:
           unit: ""
-          thousand: "ألف"
-          million: "مليون"
-          billion: "مليار"
-          trillion: "تريليون"
+          thousand: ألف
+          million: مليون
+          billion: مليار
+          trillion: تريليون
           quadrillion: الكدريليون رقم
 
   datetime:
@@ -183,4 +183,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/bg.yml b/config/locales/rails-i18n/bg.yml
index d2e674a726a33f84daede90c717b7f342cfc256e..1c13a21c867a0505c2fc1c8ca4c94cb9cec720f5 100644
--- a/config/locales/rails-i18n/bg.yml
+++ b/config/locales/rails-i18n/bg.yml
@@ -6,21 +6,21 @@
 # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
 
 bg:
-  
+
   # ===== Rails Specific ===========================================================================
-  
+
   date:
     formats:
       default: "%d.%m.%Y"
       short: "%d %b"
       long: "%d %B %Y"
-      
+
     day_names: [неделя, понеделник, вторник, сряда, четвъртък, петък, събота]
-    standalone_day_names: [Неделя, Понеделник, Вторник, Сряда, Четвъртък, Петък, Събота]
-    abbr_day_names: [Нед, Пон, Вт, Ср, Чет, Пет, Съб]
-    
+    standalone_day_names: [неделя, понеделник, вторник, сряда, четвъртък, петък, събота]
+    abbr_day_names: [нед, пон, вт, ср, чет, пет, съб]
+
     # should start with nil cause there is no 0-th month
-    month_names: [~, Януари, Февруари, Март, Април, Май, Юни, Юли, Август, Септември, Октомври, Ноември, Декември]
+    month_names: [~, януари, февруари, март, април, май, юни, юли, август, септември, октомври, ноември, декември]
     abbr_month_names: [~, яну., фев., март, апр., май, юни, юли, авг., сеп., окт., ноем., дек.]
 
     order:
@@ -33,16 +33,16 @@ bg:
       default: "%a, %d %b %Y, %H:%M:%S %z"
       short: "%d %b, %H:%M"
       long: "%d %B %Y, %H:%M"
-      
+
     am: "преди обяд"
     pm: "следобед"
-    
+
   number:
     format:
       separator: "."
       delimiter: ""
       precision: 3
-      
+
     currency:
       format:
         format: "%n %u"
@@ -50,15 +50,15 @@ bg:
         separator: "."
         delimiter: ""
         precision: 2
-        
+
     percentage:
       format:
         delimiter: ""
-        
+
     precision:
       format:
         delimiter: ""
-        
+
     human:
       format:
         delimiter: ""
@@ -75,7 +75,7 @@ bg:
           mb: "МБ"
           gb: "ГБ"
           tb: "ТБ"
-          
+
   datetime:
     distance_in_words:
       half_a_minute: "половин минута"
@@ -141,7 +141,7 @@ bg:
       hour: "Час"
       minute: "Минута"
       second: "Секунда"
-      
+
   activemodel:
     errors:
       template:
@@ -150,12 +150,12 @@ bg:
           other:  "%{count} грешки спряха %{model} да бъде запазен"
         # The variable :count is also available
         body: "Имаше проблем с следните полета:"
-          
+
   support:
     select:
       # default value for :prompt => true in FormOptionsHelper
       prompt: "Моля отбележете"
-      
+
   activerecord:
     errors:
       template:
@@ -165,7 +165,7 @@ bg:
           many: "%{model}: записа е неуспешен заради %{count} грешки"
           other: "%{model}: записа е неуспешен заради %{count} грешки"
         body: "Възникнаха проблеми при следните полета:"
-        
+
       messages:
         inclusion: "съдържа непредвидена стойност"
         exclusion: "съдържа предварително зададена стойност"
@@ -199,9 +199,9 @@ bg:
         odd: "може да е единствено четно"
         even: "може да е единствено нечетно"
         record_invalid: "имаше грешки: %{errors}"
-  
+
   # ===== I18n Specific ============================================================================
-  
+
   i18n:
     transliterate:
       rule:
@@ -265,11 +265,11 @@ bg:
         Ю: "Yu"
         я: "ya"
         Я: "Ya"
-        
+
   # ===== Paginate Specific ========================================================================
-  
+
   pagination:
     previous: "&laquo; предишна"
     next: "следваща &raquo;"
-    
+
   # ===== Application Specific =====================================================================
diff --git a/config/locales/rails-i18n/bn-IN.yml b/config/locales/rails-i18n/bn-IN.yml
index 0c4230f32f5fda16bfdd5c64373a5c3360737d7b..78f215df4572ae1aa63e1f7110fd6993db3ede6d 100644
--- a/config/locales/rails-i18n/bn-IN.yml
+++ b/config/locales/rails-i18n/bn-IN.yml
@@ -7,9 +7,9 @@ bn-IN:
     # These are also the defaults for 'currency', 'percentage', 'precision', and 'human'
     format:
       # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5)
-      separator: "." 
+      separator: "."
       # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three)
-      delimiter: "," 
+      delimiter: ","
       # Number of decimals, behind the separator (1 with a precision of 2 gives: 1.00)
       precision: 2
 
@@ -17,35 +17,35 @@ bn-IN:
     currency:
       format:
         # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00)
-        format: "%u %n" 
-        unit: "Rs." 
+        format: "%u %n"
+        unit: "Rs."
         # These three are to override number.format and are optional
-        separator: "." 
-        delimiter: "," 
+        separator: "."
+        delimiter: ","
         precision: 2
 
     # Used in number_to_percentage()
     percentage:
       format:
         # These three are to override number.format and are optional
-        # separator: 
-        delimiter: "" 
-        # precision: 
+        # separator:
+        delimiter: ""
+        # precision:
 
     # Used in number_to_precision()
     precision:
       format:
         # These three are to override number.format and are optional
         # separator:
-        delimiter: "" 
+        delimiter: ""
         # precision:
 
     # Used in number_to_human_size()
     human:
       format:
         # These three are to override number.format and are optional
-        # separator: 
-        delimiter: "" 
+        # separator:
+        delimiter: ""
         precision: 1
       # Rails <= v2.2.2
       # storage_units: [Bytes, KB, MB, GB, TB]
@@ -64,36 +64,36 @@ bn-IN:
   # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
   datetime:
     distance_in_words:
-      half_a_minute: "অার্ধেক মিনিট" 
+      half_a_minute: "অার্ধেক মিনিট"
       less_than_x_seconds:
-        one:  "১ সেকেন্ডর কম " 
+        one:  "১ সেকেন্ডর কম "
         other: "%{count} সেকেন্ডের কম"
       x_seconds:
-        one:  "১ সেকেন্ড" 
-        other: "%{count} সেকেন্ড" 
+        one:  "১ সেকেন্ড"
+        other: "%{count} সেকেন্ড"
       less_than_x_minutes:
-        one:  "১ মিনিটের কম" 
-        other: "%{count} মিনিটের কম" 
+        one:  "১ মিনিটের কম"
+        other: "%{count} মিনিটের কম"
       x_minutes:
-        one:  "১ মিনিট" 
-        other: "%{count} মিনিট" 
+        one:  "১ মিনিট"
+        other: "%{count} মিনিট"
       about_x_hours:
-        one:  "প্রায় ১ ঘন্টা" 
-        other: "প্রায় %{count} ঘন্টা" 
+        one:  "প্রায় ১ ঘন্টা"
+        other: "প্রায় %{count} ঘন্টা"
       x_days:
-        one:  "১ দিন" 
-        other: "%{count} দিন" 
+        one:  "১ দিন"
+        other: "%{count} দিন"
       about_x_months:
-        one:  "প্রায় ১ মাস" 
-        other: "প্রায় %{count} মাস" 
+        one:  "প্রায় ১ মাস"
+        other: "প্রায় %{count} মাস"
       x_months:
-        one:  "১ মাস" 
-        other: "%{count} মাস" 
+        one:  "১ মাস"
+        other: "%{count} মাস"
       about_x_years:
-        one:  "প্রায় ১ বছর" 
-        other: "প্রায় %{count} বছর" 
+        one:  "প্রায় ১ বছর"
+        other: "প্রায় %{count} বছর"
       over_x_years:
-        one:  "১ বছরের বেশি" 
+        one:  "১ বছরের বেশি"
         other: "%{count} বছরের বেশি"
     prompts:
       year:   "বছর"
@@ -101,23 +101,23 @@ bn-IN:
       day:    "দিন"
       hour:   "ঘন্টা"
       minute: "মিনিট"
-      second: "সেকেন্ড" 
+      second: "সেকেন্ড"
 
   activerecord:
     errors:
       template:
         header:
-          one:   "১ টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি" 
-          other:  "%{count} টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি" 
+          one:   "১ টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি"
+          other:  "%{count} টি ত্রুটির কারনে %{model} সংরক্ষন করা সম্ভব হয়নি"
         # The variable :count is also available
-        body: "এই ফিল্ডগুলোতে কিছু সমস্যা দেখা দিয়েছে:" 
+        body: "এই ফিল্ডগুলোতে কিছু সমস্যা দেখা দিয়েছে:"
 
       # The values :model, :attribute and :value are always available for interpolation
       # The value :count is available when applicable. Can be used for pluralization.
       messages:
-        inclusion: "লিস্টে অন্তর্ভুক্ত নয়" 
-        exclusion: "রিসার্ভ করা অাছে" 
-        invalid: "সঠিক নয়" 
+        inclusion: "লিস্টে অন্তর্ভুক্ত নয়"
+        exclusion: "রিসার্ভ করা অাছে"
+        invalid: "সঠিক নয়"
         confirmation: "অনুমোদনের সঙ্গে মিলছে না"
         accepted: "গ্রাহ্য করতে হবে"
         empty: "খালি রাখা যাবে না"
@@ -149,8 +149,8 @@ bn-IN:
       # When no format has been given, it uses default.
       # You can provide other formats here if you like!
       default: "%e/%m/%Y"
-      short: "%e de %b" 
-      long: "%e de %B de %Y" 
+      short: "%e de %b"
+      long: "%e de %B de %Y"
 
     day_names: [রবিবার, সোমবার, মঙ্গলবার, বুধবার, বৃহস্পতিবার, শুক্রবার, শনিবার]
     abbr_day_names: [রবিবার, সোমবার, মঙ্গলবার, বুধবার, বৃহস্পতিবার, শুক্রবার, শনিবার]
@@ -167,10 +167,10 @@ bn-IN:
   time:
     formats:
       default: "%A, %e de %B de %Y %H:%M:%S %z"
-      short: "%e de %b %H:%M" 
-      long: "%e de %B de %Y %H:%M" 
-    am: "am" 
-    pm: "pm" 
+      short: "%e de %b %H:%M"
+      long: "%e de %B de %Y %H:%M"
+    am: "am"
+    pm: "pm"
 
 # Used in array.to_sentence.
   support:
diff --git a/config/locales/rails-i18n/ca.yml b/config/locales/rails-i18n/ca.yml
index dc5d236302ca18ee3f639ccb8a1039b8ed331f21..6c1b3950e41582c3b9e7a6c1ae7d1dc585b703c8 100644
--- a/config/locales/rails-i18n/ca.yml
+++ b/config/locales/rails-i18n/ca.yml
@@ -1,51 +1,51 @@
 # Catalan translations for Rails
 # by Emili Parreño (emili@eparreno.com - www.eparreno.com)
- 
+
 ca:
   number:
     # Used in number_with_delimiter()
     # These are also the defaults for 'currency', 'percentage', 'precision', and 'human'
     format:
       # Sets the separator between the units, for more precision (e.g. 1.0 / 2.0 == 0.5)
-      separator: "," 
+      separator: ","
       # Delimets thousands (e.g. 1,000,000 is a million) (always in groups of three)
-      delimiter: "." 
+      delimiter: "."
       # Number of decimals, behind the separator (1 with a precision of 2 gives: 1.00)
       precision: 3
- 
+
     # Used in number_to_currency()
     currency:
       format:
         # Where is the currency sign? %u is the currency unit, %n the number (default: $5.00)
-        format: "%n %u" 
-        unit: "€" 
+        format: "%n %u"
+        unit: "€"
         # These three are to override number.format and are optional
-        separator: "," 
-        delimiter: "." 
+        separator: ","
+        delimiter: "."
         precision: 2
- 
+
     # Used in number_to_percentage()
     percentage:
       format:
         # These three are to override number.format and are optional
-        # separator: 
-        delimiter: "" 
-        # precision: 
- 
+        # separator:
+        delimiter: ""
+        # precision:
+
     # Used in number_to_precision()
     precision:
       format:
         # These three are to override number.format and are optional
         # separator:
-        delimiter: "" 
+        delimiter: ""
         # precision:
- 
+
     # Used in number_to_human_size()
     human:
       format:
         # These three are to override number.format and are optional
-        # separator: 
-        delimiter: "" 
+        # separator:
+        delimiter: ""
         precision: 1
       storage_units:
         # Storage units output formatting.
@@ -59,57 +59,57 @@ ca:
           mb: "MB"
           gb: "GB"
           tb: "TB"
- 
+
   # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
   datetime:
     distance_in_words:
-      half_a_minute: "mig minut" 
+      half_a_minute: "mig minut"
       less_than_x_seconds:
-        one:  "menys d'1 segon" 
+        one:  "menys d'1 segon"
         other: "menys de %{count} segons"
       x_seconds:
-        one:  "1 segon" 
-        other: "%{count} segons" 
+        one:  "1 segon"
+        other: "%{count} segons"
       less_than_x_minutes:
-        one:  "menys d'1 minut" 
-        other: "menys de %{count} minuts" 
+        one:  "menys d'1 minut"
+        other: "menys de %{count} minuts"
       x_minutes:
-        one:  "1 minut" 
-        other: "%{count} minuts" 
+        one:  "1 minut"
+        other: "%{count} minuts"
       about_x_hours:
-        one:  "aproximadament 1 hora" 
-        other: "aproximadament %{count} hores" 
+        one:  "aproximadament 1 hora"
+        other: "aproximadament %{count} hores"
       x_days:
-        one:  "1 dia" 
-        other: "%{count} dies" 
+        one:  "1 dia"
+        other: "%{count} dies"
       about_x_months:
-        one:  "aproximadament 1 mes" 
-        other: "aproximadament %{count} mesos" 
+        one:  "aproximadament 1 mes"
+        other: "aproximadament %{count} mesos"
       x_months:
-        one:  "1 mes" 
-        other: "%{count} mesos" 
+        one:  "1 mes"
+        other: "%{count} mesos"
       about_x_years:
-        one:  "aproximadament 1 any" 
-        other: "aproximadament %{count} anys" 
+        one:  "aproximadament 1 any"
+        other: "aproximadament %{count} anys"
       over_x_years:
-        one:  "més d'1 any" 
-        other: "més de %{count} anys" 
- 
+        one:  "més d'1 any"
+        other: "més de %{count} anys"
+
   activerecord:
     errors:
       template:
         header:
-          one:   "No s'ha pogut desar aquest/a %{model} perquè hi ha 1 error" 
-          other:  "No s'ha pogut desar aquest/a %{model} perquè hi ha hagut %{count} errors" 
+          one:   "No s'ha pogut desar aquest/a %{model} perquè hi ha 1 error"
+          other:  "No s'ha pogut desar aquest/a %{model} perquè hi ha hagut %{count} errors"
         # The variable :count is also available
-        body: "Hi ha hagut problemes amb els següents camps:" 
- 
+        body: "Hi ha hagut problemes amb els següents camps:"
+
       # The values :model, :attribute and :value are always available for interpolation
       # The value :count is available when applicable. Can be used for pluralization.
       messages:
-        inclusion: "no està incluós a la llista" 
-        exclusion: "està reservat" 
-        invalid: "no és vàlid" 
+        inclusion: "no està incluós a la llista"
+        exclusion: "està reservat"
+        invalid: "no és vàlid"
         confirmation: "no coincideix"
         accepted: "ha de ser acceptat"
         empty: "no pot estar buit"
@@ -126,27 +126,27 @@ ca:
         less_than_or_equal_to: "ha de ser menor o igual a %{count}"
         odd: "ha de ser imparell"
         even: "ha de ser parell"
- 
+
         # Append your own errors here or at the model/attributes scope.
- 
+
       models:
         # Overrides default messages
- 
+
       attributes:
         # Overrides model and default messages.
- 
+
   date:
     formats:
       # Use the strftime parameters for formats.
       # When no format has been given, it uses default.
       # You can provide other formats here if you like!
-      default: "%Y-%m-%d" 
-      short: "%d de %b" 
-      long: "%d de %B de %Y" 
- 
+      default: "%Y-%m-%d"
+      short: "%d de %b"
+      long: "%d de %B de %Y"
+
     day_names: [diumenge, dilluns, dimarts, dimecres, dijous, divendres, dissabte]
     abbr_day_names: [dg, dl, dm, dc, dj, dv, ds]
- 
+
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
     month_names: [~, gener, febrer, març, abril, maig, juny, juliol, agost, setembre, octubre, novembre, desembre]
     abbr_month_names: [~, Gen, Feb, Mar, Abr, Mai, Jun, Jul, Ago, Set, Oct, Nov, Des]
@@ -155,16 +155,16 @@ ca:
       - :day
       - :month
       - :year
- 
+
   time:
     formats:
       default: "%A, %d de %B de %Y %H:%M:%S %z"
-      short: "%d de %b %H:%M" 
-      long: "%d de %B de %Y %H:%M" 
-    am: "am" 
-    pm: "pm" 
- 
+      short: "%d de %b %H:%M"
+      long: "%d de %B de %Y %H:%M"
+    am: "am"
+    pm: "pm"
+
 # Used in array.to_sentence.
   support:
     array:
-      sentence_connector: "i"
\ No newline at end of file
+      sentence_connector: "i"
diff --git a/config/locales/rails-i18n/cs.rb b/config/locales/rails-i18n/cs.rb
index 55988ec78bf7195e96d8c44a9a537ff448eddd97..8218b34a2464c0a32de3f6a39bb0a0d9b2803c61 100644
--- a/config/locales/rails-i18n/cs.rb
+++ b/config/locales/rails-i18n/cs.rb
@@ -1,5 +1,33 @@
-# Czech translations for Ruby on Rails 
+# Czech translations for Ruby on Rails
 # by Karel Minařík (karmi@karmi.cz)
+# contributors:
+#  - Vít Krchov - http://github.com/vita - Rails 3 update
+
+unless defined?(CzechLocaleI18n::ERROR_MESSAGES)
+  module CzechLocaleI18n
+    ERROR_MESSAGES = {
+      :inclusion           => "není v seznamu povolených hodnot",
+      :exclusion           => "je vyhrazeno pro jiný účel",
+      :invalid             => "není platná hodnota",
+      :confirmation        => "nebylo potvrzeno",
+      :accepted            => "musí být potvrzeno",
+      :empty               => "nesmí být prázdný/é",
+      :blank               => "je povinná položka", # alternate formulation: "is required"
+      :too_long            => "je příliš dlouhá/ý (max. %{count} znaků)",
+      :too_short           => "je příliš krátký/á (min. %{count} znaků)",
+      :wrong_length        => "nemá správnou délku (očekáváno %{count} znaků)",
+      :not_a_number        => "není číslo",
+      :greater_than        => "musí být větší než %{count}",
+      :greater_than_or_equal_to => "musí být větší nebo rovno %{count}",
+      :equal_to            => "musí být rovno %{count}",
+      :less_than           => "musí být méně než %{count}",
+      :less_than_or_equal_to    => "musí být méně nebo rovno %{count}",
+      :odd                 => "musí být liché číslo",
+      :even                => "musí být sudé číslo",
+      :not_an_integer       => "musí být celé číslo"
+    }
+  end
+end
 
 { :'cs' => {
 
@@ -7,8 +35,11 @@
     :support => {
       :array => {
         :two_words_connector => ' a ',
-        :sentence_connector => 'a',
-        :skip_last_comma => true
+        :last_word_connector => ' a ',
+        :words_connector => ', '
+      },
+      :select => {
+        :prompt => 'Prosím vyberte si',
       }
     },
 
@@ -42,7 +73,9 @@
       :format => {
         :precision => 3,
         :separator => '.',
-        :delimiter => ','
+        :delimiter => ',',
+        :significant => false,
+        :strip_insignificant_zeros => false
       },
       :currency => {
         :format => {
@@ -51,12 +84,16 @@
           :format    => '%n %u',
           :separator => ",",
           :delimiter => " ",
+          :significant => false,
+          :strip_insignificant_zeros => false
         }
       },
       :human => {
         :format => {
           :precision => 1,
-          :delimiter => ''
+          :delimiter => '',
+          :significant => false,
+          :strip_insignificant_zeros => false
         },
        :storage_units => {
          :format => "%n %u",
@@ -67,6 +104,17 @@
            :gb   => "GB",
            :tb   => "TB",
          }
+       },
+       :decimal_units => {
+         :format => "%n %u",
+         :units => {
+           :unit => "",
+           :thousand => "Tisíc",
+           :million => "Milion",
+           :billion => "Miliarda",
+           :trillion => "Bilion",
+           :quadrillion => "Kvadrilion"
+         }
        }
       },
       :percentage => {
@@ -84,6 +132,14 @@
     # Distance of time ... helper
     # NOTE: In Czech language, these values are different for the past and for the future. Preference has been given to past here.
     :datetime => {
+      :prompts => {
+        :second => "Sekunda",
+        :minute => "Minuta",
+        :hour => "Hodina",
+        :day => "Den",
+        :month => "Měsíc",
+        :year => "Rok"
+      },
       :distance_in_words => {
         :half_a_minute => 'půl minutou',
         :less_than_x_seconds => {
@@ -125,42 +181,49 @@
         :over_x_years => {
           :one => 'více než před rokem',
           :other => 'více než %{count} roky'
+        },
+        :almost_x_years => {
+          :one => 'téměř před rokem',
+          :other => 'téměř před %{count} roky'
         }
       }
     },
 
+    :helpers => {
+      :select => {
+        :prompt => "Prosím vyberte si"
+      },
+
+      :submit => {
+        :create => "Vytvořit %{model}",
+        :update => "Aktualizovat %{model}",
+        :submit => "Uložit %{model}"
+      }
+    },
+
+    :errors => {
+      :format => "%{attribute} %{message}",
+      :messages => CzechLocaleI18n::ERROR_MESSAGES
+    },
+
     # ActiveRecord validation messages
     :activerecord => {
       :errors => {
         :messages => {
-          :inclusion           => "není v seznamu povolených hodnot",
-          :exclusion           => "je vyhrazeno pro jiný účel",
-          :invalid             => "není platná hodnota",
-          :confirmation        => "nebylo potvrzeno",
-          :accepted            => "musí být potvrzeno",
-          :empty               => "nesmí být prázdný/é",
-          :blank               => "je povinná položka", # alternate formulation: "is required"
-          :too_long            => "je příliš dlouhá/ý (max. %{count} znaků)",
-          :too_short           => "je příliš krátký/á (min. %{count} znaků)",
-          :wrong_length        => "nemá správnou délku (očekáváno %{count} znaků)",
           :taken               => "již databáze obsahuje",
-          :not_a_number        => "není číslo",
-          :greater_than        => "musí být větší než %{count}",
-          :greater_than_or_equal_to => "musí být větší nebo rovno %{count}",
-          :equal_to            => "musí být rovno %{count}",
-          :less_than           => "musí být méně než %{count}",
-          :less_than_or_equal_to    => "musí být méně nebo rovno %{count}",
-          :odd                 => "musí být liché číslo",
-          :even                => "musí být sudé číslo"
-        },
+          :record_invalid      => "Validace je neúspešná: %{errors}"
+        }.merge(CzechLocaleI18n::ERROR_MESSAGES),
         :template => {
           :header   => {
             :one => "Při ukládání objektu %{model} došlo k chybám a nebylo jej možné uložit",
             :other => "Při ukládání objektu %{model} došlo ke %{count} chybám a nebylo možné jej uložit"
           },
           :body  => "Následující pole obsahují chybně vyplněné údaje:"
+        },
+        :full_messages => {
+          :format => "%{attribute} %{message}"
         }
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/config/locales/rails-i18n/cy.yml b/config/locales/rails-i18n/cy.yml
index 5ad9ac234e57bc494e4bc29c14aab0f2f7a8b468..320c55f8e4e5fcfa3f4b0e3c35fafccf19690087 100644
--- a/config/locales/rails-i18n/cy.yml
+++ b/config/locales/rails-i18n/cy.yml
@@ -81,11 +81,11 @@ cy:
         format: "%n %u"
         units:
           unit: ""
-          thousand: "Mil"
-          million: "Miliwn"
-          billion: "Biliwn"
-          trillion: "Triliwn"
-          quadrillion: "Cwadriliwn"
+          thousand: Mil
+          million: Miliwn
+          billion: Biliwn
+          trillion: Triliwn
+          quadrillion: Cwadriliwn
 
   datetime:
     distance_in_words:
@@ -178,4 +178,4 @@ cy:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/da.yml b/config/locales/rails-i18n/da.yml
index 070a69078887a7828f9fe3ddd2088a8bec6e2580..b0a306aed35d27b0a1ab5c944b4d3eaa229b7d8e 100644
--- a/config/locales/rails-i18n/da.yml
+++ b/config/locales/rails-i18n/da.yml
@@ -95,11 +95,11 @@ da:
         format: "%n %u"
         units:
           unit: ""
-          thousand: "Tusind"
-          million: "Million"
-          billion: "Milliard"
-          trillion: "Billion"
-          quadrillion: "Billiard"
+          thousand: Tusind
+          million: Million
+          billion: Milliard
+          trillion: Billion
+          quadrillion: Billiard
 
   datetime:
     distance_in_words:
@@ -192,4 +192,4 @@ da:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/de-AT.yml b/config/locales/rails-i18n/de-AT.yml
index b9a0369d0e97a1998dc41491b2ef9ecea8f984f4..ec1f88411a329818857cb9dfc1c92e0f454cd6c5 100644
--- a/config/locales/rails-i18n/de-AT.yml
+++ b/config/locales/rails-i18n/de-AT.yml
@@ -1,4 +1,4 @@
-# German translations for Ruby on Rails 
+# German translations for Ruby on Rails
 # by Clemens Kofler (clemens@railway.at)
 
 de-AT:
@@ -17,7 +17,7 @@ de-AT:
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%A, %d. %B %Y, %H:%M Uhr"
@@ -27,7 +27,7 @@ de-AT:
 
     am: "vormittags"
     pm: "nachmittags"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: 'eine halbe Minute'
@@ -81,9 +81,9 @@ de-AT:
       format:
         unit: '€'
         format: '%n%u'
-        separator: 
-        delimiter: 
-        precision: 
+        separator:
+        delimiter:
+        precision:
     percentage:
       format:
         delimiter: ""
diff --git a/config/locales/rails-i18n/de-CH.yml b/config/locales/rails-i18n/de-CH.yml
index fcc85606111e72a585a81e69f282d8adb6517cfa..84c367707e6854f136aefdea2f6b4fdf3911f9ba 100644
--- a/config/locales/rails-i18n/de-CH.yml
+++ b/config/locales/rails-i18n/de-CH.yml
@@ -1,4 +1,4 @@
-# German (Switzerland) translations for Ruby on Rails 
+# German (Switzerland) translations for Ruby on Rails
 # by Clemens Kofler (clemens@railway.at)
 
 de-CH:
@@ -17,7 +17,7 @@ de-CH:
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%A, %d. %B %Y, %H:%M Uhr"
@@ -27,7 +27,7 @@ de-CH:
 
     am: "vormittags"
     pm: "nachmittags"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: 'eine halbe Minute'
@@ -81,9 +81,9 @@ de-CH:
       format:
         unit: 'CHF'
         format: '%u %n'
-        separator: 
-        delimiter: 
-        precision: 
+        separator:
+        delimiter:
+        precision:
     percentage:
       format:
         delimiter: ""
diff --git a/config/locales/rails-i18n/de.yml b/config/locales/rails-i18n/de.yml
index a0b62bd8e888f7ef7d2ab2045753c5f4b409963c..ecafaee22b01670669756d8c5c5e643d2b048525 100644
--- a/config/locales/rails-i18n/de.yml
+++ b/config/locales/rails-i18n/de.yml
@@ -1,4 +1,4 @@
-# German translations for Ruby on Rails 
+# German translations for Ruby on Rails
 # by Clemens Kofler (clemens@railway.at)
 # contributors:
 #  - Alexander Dreher - http://github.com/alexdreher - Rails 3 update
@@ -19,7 +19,7 @@ de:
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%A, %d. %B %Y, %H:%M Uhr"
@@ -29,7 +29,7 @@ de:
 
     am: "vormittags"
     pm: "nachmittags"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: 'eine halbe Minute'
@@ -118,15 +118,15 @@ de:
         format: "%n %u"
         units:
           unit: ""
-          thousand: "Tausend"
-          million: "Millionen"
-          billion: 
-            one: "Milliarde"
-            others: "Milliarden"
-          trillion: "Billionen"
-          quadrillion: 
-            one: "Billiarde"
-            others: "Billiarden"
+          thousand: Tausend
+          million: Millionen
+          billion:
+            one: Milliarde
+            others: Milliarden
+          trillion: Billionen
+          quadrillion:
+            one: Billiarde
+            others: Billiarden
 
   support:
     array:
@@ -175,7 +175,7 @@ de:
       odd: "muss ungerade sein"
       even: "muss gerade sein"
       not_an_integer: "muss ganzzahlig sein"
-      
+
   activerecord:
     errors:
       template:
@@ -184,10 +184,10 @@ de:
           other:  "Konnte %{model} nicht speichern: %{count} Fehler."
         body: "Bitte überprüfen Sie die folgenden Felder:"
 
-      messages:        
+      messages:
         taken: "ist bereits vergeben"
         record_invalid: "Gültigkeitsprüfung ist fehlgeschlagen: %{errors}"
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/en-AU.yml b/config/locales/rails-i18n/en-AU.yml
index a98aac1de443a9306f622742fd6d15b04aad1d2d..2eb397bf6e71f16ef5a31f1021bc898b76bf3ac9 100644
--- a/config/locales/rails-i18n/en-AU.yml
+++ b/config/locales/rails-i18n/en-AU.yml
@@ -80,11 +80,11 @@
         format: "%n %u"
         units:
           unit: ""
-          thousand: "Thousand"
-          million: "Million"
-          billion: "Billion"
-          trillion: "Trillion"
-          quadrillion: "Quadrillion"
+          thousand: Thousand
+          million: Million
+          billion: Billion
+          trillion: Trillion
+          quadrillion: Quadrillion
 
   datetime:
     distance_in_words:
@@ -177,4 +177,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/en-GB.yml b/config/locales/rails-i18n/en-GB.yml
index 7ef25ee9382b62b015a43a9715418dfed2f77390..5bf1212c93ba9108c4eba0ab080b580001ee3fce 100644
--- a/config/locales/rails-i18n/en-GB.yml
+++ b/config/locales/rails-i18n/en-GB.yml
@@ -80,11 +80,11 @@
         format: "%n %u"
         units:
           unit: ""
-          thousand: "Thousand"
-          million: "Million"
-          billion: "Billion"
-          trillion: "Trillion"
-          quadrillion: "Quadrillion"
+          thousand: Thousand
+          million: Million
+          billion: Billion
+          trillion: Trillion
+          quadrillion: Quadrillion
 
   datetime:
     distance_in_words:
@@ -177,4 +177,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/en-US.yml b/config/locales/rails-i18n/en-US.yml
index 66a72b43ff7392e355fc5e83475a5be3f00975ad..645aefdc3bc6b22a6d6b976cbbc83b1b93fac28d 100644
--- a/config/locales/rails-i18n/en-US.yml
+++ b/config/locales/rails-i18n/en-US.yml
@@ -82,11 +82,11 @@
         format: "%n %u"
         units:
           unit: ""
-          thousand: "Thousand"
-          million: "Million"
-          billion: "Billion"
-          trillion: "Trillion"
-          quadrillion: "Quadrillion"
+          thousand: Thousand
+          million: Million
+          billion: Billion
+          trillion: Trillion
+          quadrillion: Quadrillion
 
   datetime:
     distance_in_words:
@@ -179,4 +179,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/eo.yml b/config/locales/rails-i18n/eo.yml
index 178d4ae78e5ecd99026c9a4767e7e42d243fe735..bdaf8a170feb7814363a2fd790eca1bc4814f070 100644
--- a/config/locales/rails-i18n/eo.yml
+++ b/config/locales/rails-i18n/eo.yml
@@ -8,7 +8,7 @@ eo:
       default: "%Y/%m/%d"
       short: "%e %b"
       long: "%e %B %Y"
- 
+
     day_names: [dimanĉo, lundo, mardo, merkredo, ĵaŭdo, vendredo, sabato]
     abbr_day_names: [dim, lun, mar, mer, ĵaŭ, ven, sam]
     month_names: [~, januaro, februaro, marto, aprilo, majo, junio, julio, aÅ­gusto, septembro, oktobro, novembro, decembro]
@@ -17,7 +17,7 @@ eo:
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%d %B %Y %H:%M:%S"
@@ -25,7 +25,7 @@ eo:
       long: "%A %d %B %Y %H:%M"
     am: 'am'
     pm: 'pm'
- 
+
   datetime:
     distance_in_words:
       half_a_minute: "duona minuto"
@@ -71,7 +71,7 @@ eo:
       hour: "Horo"
       minute: "Minuto"
       second: "Sekundo"
-  
+
   number:
     format:
       separator: ","
diff --git a/config/locales/rails-i18n/es-AR.yml b/config/locales/rails-i18n/es-AR.yml
index b1180e1184fb20d38bd9f61a1d67a31be1289d30..2fe807c103f28e082464d97c151cbdf76425a0ed 100644
--- a/config/locales/rails-i18n/es-AR.yml
+++ b/config/locales/rails-i18n/es-AR.yml
@@ -174,4 +174,4 @@ es-AR:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/es-CL.yml b/config/locales/rails-i18n/es-CL.yml
index 13bb259eb35ac717edd3297488858f9b1841f144..1cfc207bcc2eb313dbd80a785427463277f1f7b6 100644
--- a/config/locales/rails-i18n/es-CL.yml
+++ b/config/locales/rails-i18n/es-CL.yml
@@ -137,7 +137,7 @@ es-CL:
       prompt: "Por favor seleccione"
 
     submit:
-      create: 'Guardar %{model}'
+      create: 'Crear %{model}'
       update: 'Actualizar %{model}'
       submit: 'Guardar %{model}'
 
@@ -180,4 +180,4 @@ es-CL:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/es-CO.yml b/config/locales/rails-i18n/es-CO.yml
index 4eaa7522d9486527a78d6280e043a9e7629f4091..950a12b29e47ded6f9307d6ea87533adcd678825 100644
--- a/config/locales/rails-i18n/es-CO.yml
+++ b/config/locales/rails-i18n/es-CO.yml
@@ -176,4 +176,4 @@ es-CO:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
\ No newline at end of file
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/es-MX.yml b/config/locales/rails-i18n/es-MX.yml
index 2b1f4f3b9e41b9710f6ed686268b1bdb06b652be..3f6d35de66f83c407192630f5c62a348f7e3727e 100644
--- a/config/locales/rails-i18n/es-MX.yml
+++ b/config/locales/rails-i18n/es-MX.yml
@@ -183,4 +183,4 @@ es-MX:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/es-PE.yml b/config/locales/rails-i18n/es-PE.yml
index 356546ab727301414d61336b9c58fa478d51ccd9..64ca7466dc92620a492060151858e9bff3a3a373 100644
--- a/config/locales/rails-i18n/es-PE.yml
+++ b/config/locales/rails-i18n/es-PE.yml
@@ -83,7 +83,7 @@ es-PE:
     prompts:
       hour: 'Hora'
       minute: 'Minuto'
-      second: 'Segundo'        
+      second: 'Segundo'
 
   # Active Record
 
@@ -121,4 +121,4 @@ es-PE:
           one: "longitud errónea (debe ser de 1 caracter)"
           other: "longitud errónea (debe ser de {{count}} caracteres)"
         even: "debe ser un número par"
-        odd: "debe ser un número non"
\ No newline at end of file
+        odd: "debe ser un número non"
diff --git a/config/locales/rails-i18n/es.yml b/config/locales/rails-i18n/es.yml
index f632fe6362c8d3bf9855c91e401b5be72c3631bc..970975d90f5119f2f1d4792b4cc8680ebf82b546 100644
--- a/config/locales/rails-i18n/es.yml
+++ b/config/locales/rails-i18n/es.yml
@@ -138,7 +138,7 @@
       prompt: "Por favor seleccione"
 
     submit:
-      create: 'Guardar %{model}'
+      create: 'Crear %{model}'
       update: 'Actualizar %{model}'
       submit: 'Guardar %{model}'
 
@@ -181,4 +181,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/et.yml b/config/locales/rails-i18n/et.yml
index 5323b9f34f83c0730858861886050ad0084d396b..e698626b85c320b3e39168a89cb2b9261415c0b7 100644
--- a/config/locales/rails-i18n/et.yml
+++ b/config/locales/rails-i18n/et.yml
@@ -59,15 +59,15 @@ et:
         precision: 2
         significant: false
         strip_insignificant_zeros: false
-        
+
     percentage:
       format:
         delimiter: ""
-        
+
     precision:
       format:
         delimiter: ""
-        
+
     human:
       format:
         delimiter: ""
@@ -88,11 +88,11 @@ et:
         format: "%n %u"
         units:
           unit: ""
-          thousand: "tuhat"
-          million: "miljon"
-          billion: "miljard"
-          trillion: "triljon"
-          quadrillion: "kvadriljon"
+          thousand: tuhat
+          million: miljon
+          billion: miljard
+          trillion: triljon
+          quadrillion: kvadriljon
 
   datetime:
     distance_in_words:
diff --git a/config/locales/rails-i18n/eu.yml b/config/locales/rails-i18n/eu.yml
index 94a27895992d2138c5c66fd7065fc7617fb29a74..e48249976f2aaba35042635686510a1fc8efc3e6 100644
--- a/config/locales/rails-i18n/eu.yml
+++ b/config/locales/rails-i18n/eu.yml
@@ -180,5 +180,5 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
 
diff --git a/config/locales/rails-i18n/fa.yml b/config/locales/rails-i18n/fa.yml
index 79927d2bff50908283989a37d009dad45ceb170c..f0a75bca85c3597ffec77e5d7ae49897813a22ac 100644
--- a/config/locales/rails-i18n/fa.yml
+++ b/config/locales/rails-i18n/fa.yml
@@ -1,4 +1,4 @@
-# Persian translations for Ruby on Rails 
+# Persian translations for Ruby on Rails
 # by Reza (reza@balatarin.com)
 # Rails 3 update by rbjarnason
 
@@ -82,11 +82,11 @@
         format: "%n %u"
         units:
           unit: ""
-          thousand: "هزار"
-          million: "میلیون"
-          billion: "بیلیون"
-          trillion: "تریلیون"
-          quadrillion: "کادریلیون"
+          thousand: هزار
+          million: میلیون
+          billion: بیلیون
+          trillion: تریلیون
+          quadrillion: کادریلیون
 
   datetime:
     distance_in_words:
@@ -145,11 +145,11 @@
     format: "%{attribute} %{message}"
 
     messages: &errors_messages
-      inclusion: "در لیست موجود نیست" 
-      exclusion: "رزرو است" 
-      invalid: "نامعتبر است" 
+      inclusion: "در لیست موجود نیست"
+      exclusion: "رزرو است"
+      invalid: "نامعتبر است"
       confirmation: "با تایید نمی‌خواند"
-      accepted: "باید پذیرفته شود" 
+      accepted: "باید پذیرفته شود"
       empty: "نمی‌تواند خالی باشد"
       blank: "نباید خالی باشد"
       too_long: "بلند است (حداکثر %{count} کاراکتر)"
@@ -179,4 +179,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/fi.yml b/config/locales/rails-i18n/fi.yml
index 401a31d9afd8c2f6ca1fdf397af72fa90ec759de..71d3f9c67b4d087e3b1a7de34e4cacda0229e832 100644
--- a/config/locales/rails-i18n/fi.yml
+++ b/config/locales/rails-i18n/fi.yml
@@ -85,11 +85,11 @@ fi:
         format: "%n %u"
         units:
           unit: ""
-          thousand: "Tuhatta"
-          million: "Euroa"
-          billion: "Miljardia"
-          trillion: "Biljoona"
-          quadrillion: "Kvadriljoona"
+          thousand: Tuhatta
+          million: Euroa
+          billion: Miljardia
+          trillion: Biljoona
+          quadrillion: Kvadriljoona
 
   datetime:
     distance_in_words:
@@ -182,4 +182,4 @@ fi:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/fur.yml b/config/locales/rails-i18n/fur.yml
index 3d05a22df7d835cbb41676cd14b1102f505ea139..de949f73cbae56a43c40b70d694c18b9ba378a33 100644
--- a/config/locales/rails-i18n/fur.yml
+++ b/config/locales/rails-i18n/fur.yml
@@ -1,4 +1,4 @@
-# Friulian translations for Ruby on Rails 
+# Friulian translations for Ruby on Rails
 # by Andrea Decorte (adecorte@gmail.com)
 
 fur:
@@ -7,7 +7,7 @@ fur:
       separator: ","
       delimiter: "."
       precision: 3
-      
+
     currency:
       format:
         format: "%n %u"
@@ -15,21 +15,21 @@ fur:
         separator: "."
         delimiter: ","
         precision: 2
-        
+
     percentage:
       format:
         delimiter: ""
-        # precision: 
-        
+        # precision:
+
     precision:
       format:
         # separator:
         delimiter: ""
         # precision:
-        
+
     human:
       format:
-        # separator: 
+        # separator:
         delimiter: ""
         precision: 1
       storage_units:
@@ -58,16 +58,16 @@ fur:
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%a %d di %b dal %Y, %H:%M:%S %z"
       short: "%d di %b %H:%M"
       long: "%d di %B %Y %H:%M"
-          
+
     am: 'am'
     pm: 'pm'
-      
+
   datetime:
     distance_in_words:
       half_a_minute: "mieç minût"
@@ -114,11 +114,11 @@ fur:
       words_connector: ", "
       two_words_connector: " e "
       last_word_connector: ", e "
-        
+
   activerecord:
     errors:
       template:
-        header: 
+        header:
           one: "No si pues salvâ chest %{model}: 1 erôr"
           other: "No si pues salvâ chest %{model}: %{count} erôrs."
         body: "Torne par plasê a controlâ i cjamps ca sot:"
@@ -141,4 +141,4 @@ fur:
         less_than: "al à di jessi mancul di %{count}"
         less_than_or_equal_to: "al à di jessi mancul o compagn di %{count}"
         odd: "al à di jessi dispar"
-        even: "al à di jessi pâr"
\ No newline at end of file
+        even: "al à di jessi pâr"
diff --git a/config/locales/rails-i18n/gl-ES.yml b/config/locales/rails-i18n/gl-ES.yml
index 53e6603bc245bb004ad3bf51d637f259845dc382..4b43491b574a6c3d5f2d382f7516e00672087cf2 100644
--- a/config/locales/rails-i18n/gl-ES.yml
+++ b/config/locales/rails-i18n/gl-ES.yml
@@ -6,40 +6,40 @@ gl-ES:
   number:
     # Usado en number_with_delimiter()
     format:
-      separator: "," 
-      delimiter: "." 
+      separator: ","
+      delimiter: "."
       precision: 2
-    
+
     # Usado en number_to_currency()
     currency:
       format:
         # %u é a unidade monetaria, %n o número
         # 1 euro sería 1.00 €
-        format: "%n %u" 
-        unit: "€" 
-        separator: "," 
-        delimiter: "." 
+        format: "%n %u"
+        unit: "€"
+        separator: ","
+        delimiter: "."
         precision: 2
-    
+
     # Usado en number_to_percentage()
     percentage:
       format:
-        # separator: 
-        delimiter: "" 
-        # precision: 
-    
+        # separator:
+        delimiter: ""
+        # precision:
+
     # Usado en number_to_precision()
     precision:
       format:
         # separator:
-        delimiter: "" 
+        delimiter: ""
         # precision:
-    
+
     # Usado en number_to_human_size()
     human:
       format:
-        # separator: 
-        delimiter: "" 
+        # separator:
+        delimiter: ""
         precision: 1
       # Se estás a usar Rails <= 2.2.2
       # storage_units: [Bytes, KB, MB, GB, TB]
@@ -57,7 +57,7 @@ gl-ES:
           mb: "MB"
           gb: "GB"
           tb: "TB"
-  
+
   # active_support
   date:
     formats:
@@ -83,7 +83,7 @@ gl-ES:
       # Podes engadir máis formatos nesta lista ou cambiar os aquí definidos
     am: ''
     pm: ''
-  
+
   # Usados en distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
   datetime:
     distance_in_words:
@@ -128,7 +128,7 @@ gl-ES:
       today: 'hoxe'
       tomorrow: 'mañá'
       in: 'dentro de'
-  
+
   support:
     array:
       # Se estás a usar Rails <= 2.2.2
@@ -154,7 +154,7 @@ gl-ES:
     #   user:
     #     login: "Aceso"
     #     traducirá o atribute login do modelo User como "Aceso"
-    
+
     errors:
       template:
         header:
@@ -183,7 +183,7 @@ gl-ES:
         odd: "debe ser par"
         even: "debe ser impar"
         # Engade aquí os teus propios mensaxes de erro ou no ámbito modelo/atributo
-        
+
         # Podes definir os teus propios erros para modelos ou para os atributos dun modelo
         # Os valores :model, :attribute e :value están sempre dispoñibles para a interpolación
         #
diff --git a/config/locales/rails-i18n/gsw-CH.yml b/config/locales/rails-i18n/gsw-CH.yml
index 5e26ccba44d371c95618643010494d7f7e742039..ef01de3c69f86a9e732c455a9d425cb2f87fc1f7 100644
--- a/config/locales/rails-i18n/gsw-CH.yml
+++ b/config/locales/rails-i18n/gsw-CH.yml
@@ -1,4 +1,4 @@
-# Swiss German (Switzerland) translations for Ruby on Rails 
+# Swiss German (Switzerland) translations for Ruby on Rails
 # by Florian Hanke (florian.hanke@gmail.com).
 #
 # Adapted from de-CH by Clemens Kofler (clemens@railway.at).
@@ -19,7 +19,7 @@ gsw-CH:
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%A, %d. %B %Y, %H:%M"
@@ -29,7 +29,7 @@ gsw-CH:
 
     am: "am Vormittaag"
     pm: "am Namitaag"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: 'ä halbi Minuutä'
@@ -118,11 +118,11 @@ gsw-CH:
         format: "%n %u"
         units:
           unit: ""
-          thousand: "Tuusig"
-          million: "Milioon"
-          billion: "Bilioon"
-          trillion: "Trilioon"
-          quadrillion: "Quadrilioon"
+          thousand: Tuusig
+          million: Milioon
+          billion: Bilioon
+          trillion: Trilioon
+          quadrillion: Quadrilioon
 
   support:
     array:
@@ -131,19 +131,19 @@ gsw-CH:
       last_word_connector: " und "
     select:
       prompt: "Bitte wääle:"
-      
+
   helpers:
     select:
       prompt: "Bitte wääle"
-      
+
     submit:
       create: '%{model} erschtele'
       update: '%{model} ändere'
       submit: '%{model} schpeichere'
-      
+
   errors:
     format: "%{attribute} %{message}"
-    
+
     messages: &errors_messages
       inclusion: "isch kän gültige Wert"
       exclusion: "isch nöd ume"
@@ -164,7 +164,7 @@ gsw-CH:
       less_than_or_equal_to: "mues chliiner oder gliich %{count} sii"
       odd: "mues ungraad sii"
       even: "mues graad sii"
-      
+
   activerecord:
     errors:
       template:
@@ -172,11 +172,11 @@ gsw-CH:
           one:    "Han's %{model} nöd schpeichere chönne: än Fehler."
           other:  "Han's %{model} näd schpeichere chönne: %{count} Fehler."
         body: "Bitte überprüefed Si die Felder:"
-        
+
       messages:
         taken: "isch bereits vergää"
         record_invalid: "Gültigkeitsprüefig hät fehlgschlage: %{errors}"
         <<: *errors_messages
-        
+
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/he.yml b/config/locales/rails-i18n/he.yml
index 4c025a8ff2106543e4fc1502e0a47992ae517984..7e74d90d11618946f879640398e0ffd7cd3d85a6 100644
--- a/config/locales/rails-i18n/he.yml
+++ b/config/locales/rails-i18n/he.yml
@@ -1,4 +1,4 @@
-# Hebrew translations for Ruby on Rails 
+# Hebrew translations for Ruby on Rails
 # by Dotan Nahum (dipidi@gmail.com)
 # Rails 3 update by rbjarnason
 
@@ -85,11 +85,11 @@
         format: "%n %u"
         units:
           unit: ""
-          thousand: "אלף"
-          million: "מיליון"
-          billion: "מיליארד"
-          trillion: "טריליון"
-          quadrillion: "קודריליון"
+          thousand: אלף
+          million: מיליון
+          billion: מיליארד
+          trillion: טריליון
+          quadrillion: קודריליון
 
   datetime:
     distance_in_words:
@@ -169,7 +169,7 @@
       less_than_or_equal_to: "חייב להיות קטן או שווה ל- %{count}"
       odd: "חייב להיות אי זוגי"
       even: "חייב להיות זוגי"
-      
+
   activerecord:
     errors:
       template:
@@ -184,4 +184,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/hi-IN.yml b/config/locales/rails-i18n/hi-IN.yml
index d0d24ad7dcc8858e77e506db2bedd0cd96694df7..42d0ec59aa147d6d1f25ddba58ba81cd11ba06a1 100644
--- a/config/locales/rails-i18n/hi-IN.yml
+++ b/config/locales/rails-i18n/hi-IN.yml
@@ -178,4 +178,4 @@ hi-IN:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/hi.yml b/config/locales/rails-i18n/hi.yml
index 5ca29700d9a3553355462d3b33dafaa86e5015a7..2d11aec36122da39c81eb57619733745f65bfc4e 100644
--- a/config/locales/rails-i18n/hi.yml
+++ b/config/locales/rails-i18n/hi.yml
@@ -178,4 +178,4 @@ hi:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/hsb.yml b/config/locales/rails-i18n/hsb.yml
index c5e4219df7a02a783defe84cfa30d2c10be74829..7206303a5859825ab1993d8d86375831304588c3 100644
--- a/config/locales/rails-i18n/hsb.yml
+++ b/config/locales/rails-i18n/hsb.yml
@@ -157,12 +157,12 @@ hsb:
         accepted:     "dyrbi so wobkrućić"
         empty:        "njesmě prózdny być"
         blank:        "je trěbny"
-        too_long:     
+        too_long:
           one:        "je předołhi (maks. 1 znamješko)"
           two:        "je předołhi (maks. %{count} znamješce)"
           few:        "je předołhi (maks. %{count} znamješka)"
           other:      "je předołhi (maks. %{count} znamješkow)"
-        too_short:    
+        too_short:
           one:        "je překrótki (min. 1 znamješko)"
           two:        "je překrótki (min. %{count} znamješće)"
           few:        "je překrótki (min. %{count} znamješka)"
diff --git a/config/locales/rails-i18n/hu.yml b/config/locales/rails-i18n/hu.yml
index d15676f9415f3d7177f4bcb4f20964747744b8c7..d4c3f73edc7e05afc27b2c21ec33366d625d6aee 100644
--- a/config/locales/rails-i18n/hu.yml
+++ b/config/locales/rails-i18n/hu.yml
@@ -1,4 +1,4 @@
-# Hungarian translations for Ruby on Rails 
+# Hungarian translations for Ruby on Rails
 # by Richard Abonyi (richard.abonyi@gmail.com)
 # thanks to KKata, replaced and #hup.hu
 # Cleaned up by László Bácsi (http://lackac.hu)
@@ -144,4 +144,4 @@
       last_word_connector: " és "
     select:
       # default value for :prompt => true in FormOptionsHelper
-      prompt: "Válasszon"
\ No newline at end of file
+      prompt: "Válasszon"
diff --git a/config/locales/rails-i18n/id.yml b/config/locales/rails-i18n/id.yml
index a126bdff7d3ec749a7c81ab5b0c1f90eda09b885..4173b2c3e8fd8d59f4ee120b86176acd398c9fae 100644
--- a/config/locales/rails-i18n/id.yml
+++ b/config/locales/rails-i18n/id.yml
@@ -1,4 +1,4 @@
-# Indonesian translations for Ruby on Rails 
+# Indonesian translations for Ruby on Rails
 # by wynst (wynst.uei@gmail.com)
 
 id:
@@ -10,7 +10,7 @@ id:
       default: "%d %B %Y"
       long: "%A, %d %B %Y"
       short: "%d.%m.%Y"
- 
+
     day_names: [Minggu, Senin, Selasa, Rabu, Kamis, Jum'at, Sabtu]
     abbr_day_names: [Min, Sen, Sel, Rab, Kam, Jum, Sab]
     month_names: [~, Januari, Februari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, November, Desember]
@@ -27,7 +27,7 @@ id:
       short: "%d %b %H.%M"
       long: "%d %B %Y %H.%M"
       time: "%H:%M"
-      
+
     am: "am"
     pm: "pm"
 
@@ -46,7 +46,7 @@ id:
       delimiter: "."
       separator: ","
       precision: 2
-    
+
     currency:
       format:
         format: "%n. %u"
@@ -54,7 +54,7 @@ id:
         separator: ","
         delimiter: "."
         precision: 2
-        
+
     percentage:
       format:
       delimiter: "."
@@ -65,14 +65,14 @@ id:
       format:
       delimiter: "."
       separator: ","
-        
+
     human:
       format:
       delimiter: "."
       separator: ","
       precision: 1
       storage_units: [Byte, KB, MB, GB, TB]
- 
+
   datetime:
     distance_in_words:
       half_a_minute: "setengah menit"
@@ -111,7 +111,7 @@ id:
       almost_x_years:
         one:   "hampir setahun"
         other: "hampir %{count} tahun"
- 
+
   activerecord:
     errors:
       template:
diff --git a/config/locales/rails-i18n/is.yml b/config/locales/rails-i18n/is.yml
index b8d7f77453fe8849557bdf207b9ac0860aab0812..c49b4a10bb25109010054d5b9b4f7323765fb5e3 100644
--- a/config/locales/rails-i18n/is.yml
+++ b/config/locales/rails-i18n/is.yml
@@ -81,11 +81,11 @@
         format: "%n %u"
         units:
           unit: ""
-          thousand: "þúsund"
-          million: "milljón"
-          billion: "billjón"
-          trillion: "trilljón"
-          quadrillion: "grasilljón"
+          thousand: þúsund
+          million: milljón
+          billion: billjón
+          trillion: trilljón
+          quadrillion: grasilljón
 
   datetime:
     distance_in_words:
@@ -178,4 +178,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/it.yml b/config/locales/rails-i18n/it.yml
index 4f7655bc3a9d878c99d464a08a6e3373bedd0219..8b0ddc2ac3101aa5d5cb2690e0b8459f60e35a90 100644
--- a/config/locales/rails-i18n/it.yml
+++ b/config/locales/rails-i18n/it.yml
@@ -27,7 +27,7 @@ it:
     percentage:
       format:
         delimiter: ""
-        # precision: 
+        # precision:
 
     precision:
       format:
@@ -37,7 +37,7 @@ it:
 
     human:
       format:
-        # separator: 
+        # separator:
         delimiter: ""
         precision: 1
         significant: true
@@ -159,13 +159,13 @@ it:
         accepted: "deve essere accettata"
         empty: "non può essere vuoto"
         blank: "non può essere lasciato in bianco"
-        too_long: 
+        too_long:
           one: "è troppo lungo (il massimo è 1 carattere)"
           other: "è troppo lungo (il massimo è %{count} caratteri)"
-        too_short: 
+        too_short:
           one:  "è troppo corto (il minimo è 1 carattere)"
           other:  "è troppo corto (il minimo è %{count} caratteri)"
-        wrong_length: 
+        wrong_length:
           one: "è della lunghezza sbagliata (deve essere di 1 carattere)"
           other: "è della lunghezza sbagliata (deve essere di %{count} caratteri)"
         not_a_number: "non è un numero"
@@ -181,7 +181,7 @@ it:
   activerecord:
     errors:
       template:
-        header: 
+        header:
           one: "Non posso salvare questo %{model}: 1 errore"
           other: "Non posso salvare questo %{model}: %{count} errori."
         body: "Per favore ricontrolla i seguenti campi:"
@@ -192,4 +192,4 @@ it:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/ja.yml b/config/locales/rails-i18n/ja.yml
index f0b626e6686bd698456f11ab7f704454b4e9c8ef..d0057511b979bfe2ea169d9ccf6d44bc03144d42 100644
--- a/config/locales/rails-i18n/ja.yml
+++ b/config/locales/rails-i18n/ja.yml
@@ -148,7 +148,7 @@ ja:
       submit: "保存する"
 
   errors:
-    format: "%{attribute}%{message}"
+    format: "%{attribute} %{message}"
 
     messages: &errors_messages
       inclusion: "は一覧にありません。"
diff --git a/config/locales/rails-i18n/ko.yml b/config/locales/rails-i18n/ko.yml
index 929b22c7b1d3966557887d63f5c6b9f27aefc626..882ff2207cbe812d577d0b5ebfe0421bd5893283 100644
--- a/config/locales/rails-i18n/ko.yml
+++ b/config/locales/rails-i18n/ko.yml
@@ -16,6 +16,7 @@ ko:
 
     month_names: [~, 1ì›”, 2ì›”, 3ì›”, 4ì›”, 5ì›”, 6ì›”, 7ì›”, 8ì›”, 9ì›”, 10ì›”, 11ì›”, 12ì›”]
     abbr_month_names: [~, 1ì›”, 2ì›”, 3ì›”, 4ì›”, 5ì›”, 6ì›”, 7ì›”, 8ì›”, 9ì›”, 10ì›”, 11ì›”, 12ì›”]
+    
     order:
       - :year
       - :month
@@ -32,6 +33,7 @@ ko:
   support:
     array:
       sentence_connector: ", "
+      skip_last_comma: true
       words_connector: ", "
       two_words_connector: "와(과) "
       last_word_connector: ", "
@@ -146,28 +148,28 @@ ko:
       submit: "제출"
 
   errors:
-    format: "%{attribute}%{message}"
+    format: "%{attribute} %{message}"
 
     messages: &errors_messages
-      inclusion: "은(는) 목록에 포함되어 있습니다"
-      exclusion: "은(는) 목록에 포함되어 있습니다"
-      invalid: "은(는) 무효입니다"
-      confirmation: "은(는) 확인되었습니다"
-      accepted: "은(는) 확인되었습니다"
-      empty: "은(는) 비어두면 안 됩니다"
-      blank: "은(는) 비어두면 안 됩니다"
-      too_long: "은(는) 너무 깁니다 (최대 %{count}자 까지)"
-      too_short: "은(는) 너무 짧습니다 (최소 %{count}자 까지)"
-      wrong_length: "은(는) 길이가 틀렸습니다 (%{count}자를 필요합니다)"
-      not_a_number: "은(는) 숫자가 아닙니다"
-      not_an_integer: "은(는) 정수가 아닙니다"
-      greater_than: "은(는) %{count}이상을 요구합니다"
-      greater_than_or_equal_to: "은(는) %{count}과 같거나 이상을 요구합니다"
+      inclusion: "은(는) 목록에 포함되어 있는 값이 아닙니다"
+      exclusion: "은(는) 이미 예약되어 있는 값입니다"
+      invalid: "은(는) 올바르지 않은 값입니다"
+      confirmation: "은(는) 서로 일치해야 합니다"
+      accepted: "을(를) 반드시 확인해야 합니다"
+      empty: "에 내용을 입력해 주세요"
+      blank: "에 내용을 입력해 주세요"
+      too_long: "은(는) %{count}자를 넘을 수 없습니다"
+      too_short: "은(는) 적어도 %{count}자를 넘어야 합니다"
+      wrong_length: "은(는) %{count}자여야 합니다"
+      not_a_number: "에 숫자를 입력해 주세요"
+      not_an_integer: "에 정수를 입력해 주세요"
+      greater_than: "은(는) %{count}보다 커야 합니다"
+      greater_than_or_equal_to: "은(는) %{count}보다 크거야 같아야 합니다"
       equal_to: "은(는) %{count}과 같아야 합니다"
-      less_than: "은(는) %{count}이하를 요구합니다"
-      less_than_or_equal_to: "은(는) %{count}과 같거나 이하을 요구합니다"
-      odd: "은(는) 홀수를 요구합니다"
-      even: "은(는) 짝수를 요구합니다"
+      less_than: "은(는) %{count}보다 작아야 합니다"
+      less_than_or_equal_to: "은(는) %{count}과 작거나 같아야 합니다"
+      odd: "에 홀수를 입력해 주세요"
+      even: "에 짝수를 입력해 주세요"
 
   activerecord:
     errors:
@@ -183,4 +185,4 @@ ko:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
\ No newline at end of file
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/lo.yml b/config/locales/rails-i18n/lo.yml
index 32a63207bd99810f5dee2f36557acc3ce320691e..d5c4cb00bd4c52c3f96800991a4dea1d14d84165 100644
--- a/config/locales/rails-i18n/lo.yml
+++ b/config/locales/rails-i18n/lo.yml
@@ -1,6 +1,6 @@
 # Lao translation for Ruby on Rails
 # By justin maccarthy justin.maccarthy@gmail.com with help from Lao language experts...
-# 
+#
 
 lo:
   number:
@@ -13,7 +13,7 @@ lo:
       delimiter: ","
       # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
       precision: 3
-      
+
     # Used in number_to_currency()
     currency:
       format:
@@ -24,15 +24,15 @@ lo:
         separator: "."
         delimiter: ","
         precision: 2
-        
+
     # Used in number_to_percentage()
     percentage:
       format:
         # These three are to override number.format and are optional
-        # separator: 
+        # separator:
         delimiter: ""
-        # precision: 
-        
+        # precision:
+
     # Used in number_to_precision()
     precision:
       format:
@@ -40,12 +40,12 @@ lo:
         # separator:
         delimiter: ""
         # precision:
-        
+
     # Used in number_to_human_size()
     human:
       format:
         # These three are to override number.format and are optional
-        # separator: 
+        # separator:
         delimiter: ""
         precision: 1
       storage_units:
@@ -111,7 +111,7 @@ lo:
           other:  "ບໍ່ສາມາດບັນທຶກ %{model} ໄດ້ເນື່ອງຈາກ ເກີດ %{count} ຂໍ້ຜິດພາດ"
         # The variable :count is also available
         body: "ກະລຸນາກວດສອບຂໍ້ມູນໃນຫ້ອງຕໍ່ໄປນີ້ :"
-        
+
       # The values :model, :attribute and :value are always available for interpolation
       # The value :count is available when applicable. Can be used for pluralization.
       messages:
@@ -147,16 +147,16 @@ lo:
       #       attributes:
       #         login:
       #           blank: "This is a custom blank message for User login"
-      # Will define custom blank validation message for User model and 
+      # Will define custom blank validation message for User model and
       # custom blank validation message for login attribute of User model.
       #models:
-        
+
     # Translate model names. Used in Model.human_name().
     #models:
       # For example,
       #   user: "Dude"
       # will translate User model name to "Dude"
-    
+
     # Translate model attribute names. Used in Model.human_attribute_name(attribute).
     #attributes:
       # For example,
@@ -172,10 +172,10 @@ lo:
       default: "%d-%m-%Y"
       short: "%e %b"
       long: "%e %B %Y"
-      
+
     day_names: ["ອາທິດ", "ຈັນ", "ອັງຄານ", "ພຸດ", "ພະຫັດ", "ສຸກ", "ເສົາ"]
     abbr_day_names: ["", "", "", "", "", "", ""]
-      
+
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
     month_names: [~, "ມັງກອນ", "ກຸມພາ", "ມີນາ", "ເມສາ", "ພຶດສະພາ", "ມິຖຸນາ", "ກໍລະກົດ", "ສິງຫາ", "ກັນຍາ", "ຕຸລາ", "ພະຈິກ", "ທັນວາ"]
     abbr_month_names: [~,"", "", "", "", "", "", "", "", "", "", "", ""]
@@ -192,7 +192,7 @@ lo:
       long: "%d %B %Y %H:%M น."
     am: ""
     pm: ""
-      
+
 # Used in array.to_sentence.
   support:
     array:
diff --git a/config/locales/rails-i18n/lt.yml b/config/locales/rails-i18n/lt.yml
index 3df8df7f9270054203bd06f75ce26cd4147c6fc1..eb4bcc7c6dc07c601818c1cd2b024538dab22dd9 100644
--- a/config/locales/rails-i18n/lt.yml
+++ b/config/locales/rails-i18n/lt.yml
@@ -7,7 +7,7 @@ lt:
       separator: ","
       delimiter: " "
       precision: 3
-      
+
     currency:
       format:
         format: "%n %u"
@@ -15,15 +15,15 @@ lt:
         separator: ","
         delimiter: " "
         precision: 2
-        
+
     percentage:
       format:
         delimiter: ""
-        
+
     precision:
       format:
         delimiter: ""
-        
+
     human:
       format:
         delimiter: ""
@@ -110,7 +110,7 @@ lt:
         less_than_or_equal_to: "turi būti mažesnis arba lygus %{count}"
         odd: "turi būti nelyginis"
         even: "turi būti lyginis"
-    
+
       models:
 
   date:
@@ -118,10 +118,10 @@ lt:
       default: "%Y-%m-%d"
       short: "%b %d"
       long: "%B %d, %Y"
-      
+
     day_names: [sekmadienis, pirmadienis, antradienis, trečiadienis, ketvirtadienis, penktadienis, šeštadienis]
     abbr_day_names: [Sek, Pir, Ant, Tre, Ket, Pen, Šeš]
-      
+
     month_names: [~, sausio, vasario, kovo, balandžio, gegužės, birželio, liepos, rugpjūčio, rugsėjo, spalio, lapkričio, gruodžio]
     abbr_month_names: [~, Sau, Vas, Kov, Bal, Geg, Bir, Lie, Rgp, Rgs, Spa, Lap, Grd]
     order:
@@ -136,7 +136,7 @@ lt:
       long: "%B %d, %Y %H:%M"
     am: "am"
     pm: "pm"
-      
+
   support:
     array:
       words_connector: ", "
diff --git a/config/locales/rails-i18n/lv.yml b/config/locales/rails-i18n/lv.yml
index 3976a9d2f46170b982f45cdc6e0d2768f008fd15..7b456e03098678447f0000a3b672143a26ba687c 100644
--- a/config/locales/rails-i18n/lv.yml
+++ b/config/locales/rails-i18n/lv.yml
@@ -116,11 +116,11 @@ lv:
         format: "%n %u"
         units:
           unit: ""
-          thousand: "TÅ«kstotis"
-          million: "Miljons"
-          billion: "Biljons"
-          trillion: "Triljons"
-          quadrillion: "Kvadriljons"
+          thousand: TÅ«kstotis
+          million: Miljons
+          billion: Biljons
+          trillion: Triljons
+          quadrillion: Kvadriljons
 
   support:
     array:
@@ -178,4 +178,4 @@ lv:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/mn.yml b/config/locales/rails-i18n/mn.yml
index ea50672ffcf84aa0a7b07c89a655459c0452db3a..734374e564c74e9b751a8e2185aafe716fd30bb6 100644
--- a/config/locales/rails-i18n/mn.yml
+++ b/config/locales/rails-i18n/mn.yml
@@ -1,25 +1,25 @@
 # Mongolian localization for Ruby on Rails 2.2+
 # by Ochirkhuyag.L <ochkoo@gmail.com>
 #
- 
+
 mn:
   date:
     formats:
       default: "%Y-%m-%d"
       short: "%y-%m-%d"
       long: "%Y %B %d"
- 
+
     day_names: [Ням, Даваа, Мягмар, Лхагва, Пүрэв, Баасан, Бямба]
     abbr_day_names: [Ня, Да, Мя, Лх, Пү, Ба, Бя]
- 
+
     month_names: [~, 1 сар, 2 сар, 3 сар, 4 сар, 5 сар, 6 сар, 7 сар, 8 сар, 9 сар, 10 сар, 11 сар, 12 сар]
     abbr_month_names: [~, 1 сар, 2 сар, 3 сар, 4 сар, 5 сар, 6 сар, 7 сар, 8 сар, 9 сар, 10 сар, 11 сар, 12 сар]
- 
+
     order:
       - :year
       - :month
       - :day
- 
+
   time:
     formats:
       default: "%Y-%m-%d %H:%M"
@@ -27,13 +27,13 @@ mn:
       long: "%Y %B %d, %H:%M:%S"
     am: "өглөө"
     pm: "орой"
- 
+
   number:
     format:
       separator: "."
       delimiter: " "
       precision: 3
-      
+
     currency:
       format:
         format: "%n %u"
@@ -41,22 +41,22 @@ mn:
         separator: "."
         delimiter: " "
         precision: 2
-        
+
     percentage:
       format:
         delimiter: ""
-        
+
     precision:
       format:
         delimiter: ""
-        
+
     human:
       format:
         delimiter: ""
         precision: 1
       # Rails 2.2
       # storage_units: [байт, КБ, МБ, ГБ, ТБ]
- 
+
       # Rails 2.3
       storage_units:
         # Storage units output formatting.
@@ -70,7 +70,7 @@ mn:
           mb: "МБ"
           gb: "ГБ"
           tb: "ТБ"
- 
+
   datetime:
     distance_in_words:
       half_a_minute: "хагас минут"	
diff --git a/config/locales/rails-i18n/nb.yml b/config/locales/rails-i18n/nb.yml
index 395361aecdb83c345d61638b3a58c810a1202451..023abef4cfae52e066e78f9a51b87f4f18bc3b75 100644
--- a/config/locales/rails-i18n/nb.yml
+++ b/config/locales/rails-i18n/nb.yml
@@ -177,4 +177,4 @@ nb:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/nl.yml b/config/locales/rails-i18n/nl.yml
index 307f1653fcd1b5f507d6201edc84b4827797984d..e5354df89e8413c75eb7651f703369ec7e39db36 100644
--- a/config/locales/rails-i18n/nl.yml
+++ b/config/locales/rails-i18n/nl.yml
@@ -21,18 +21,18 @@ nl:
       - :month
       - :year
 
-  time: 
-    formats: 
+  time:
+    formats:
       default: "%a %d %b %Y %H:%M:%S %Z"
       short: "%d %b %H:%M"
-      long: "%d %B %Y %H:%M"            
+      long: "%d %B %Y %H:%M"
       time: "%H:%M"
       only_second: "%S"
     am: "'s ochtends"
     pm: "'s middags"
 
-  support: 
-    array: 
+  support:
+    array:
       words_connector: ", "
       two_words_connector: " en "
       last_word_connector: " en "
@@ -113,16 +113,16 @@ nl:
       x_days:
         one:   "1 dag"
         other: "%{count} dagen"
-      about_x_months: 
+      about_x_months:
         one: "ongeveer \xC3\xA9\xC3\xA9n maand"
         other: "ongeveer %{count} maanden"
       x_months:
         one:   "1 maand"
         other: "%{count} maanden"
-      about_x_years: 
+      about_x_years:
         one: "ongeveer \xC3\xA9\xC3\xA9n jaar"
         other: "ongeveer %{count} jaar"
-      over_x_years: 
+      over_x_years:
         one: "meer dan \xC3\xA9\xC3\xA9n jaar"
         other: "meer dan %{count} jaar"
       almost_x_years:
@@ -183,4 +183,4 @@ nl:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/pl.yml b/config/locales/rails-i18n/pl.yml
index 863e035921f3b28c8dad04fec292bd045b1868be..55eceb57b5d6ae636a0b121f0a6083067af796ec 100644
--- a/config/locales/rails-i18n/pl.yml
+++ b/config/locales/rails-i18n/pl.yml
@@ -1,6 +1,7 @@
 # Polish translations for Ruby on Rails
 # by Jacek Becela (jacek.becela@gmail.com, http://github.com/ncr)
 # Minor changes and adjustments for Rails 3 by Piotrek Okoński (http://github.com/pokonski)
+# Minor changes and adjustments by Paweł Chojnacki (https://github.com/chojnacki)
 
 pl:
   date:
@@ -82,11 +83,11 @@ pl:
         format: "%n %u"
         units:
           unit: ""
-          thousand: "TysiÄ…c"
-          million: "Milion"
-          billion: "Miliard"
-          trillion: "Trylion"
-          quadrillion: "Kwadrylion"
+          thousand: TysiÄ…c
+          million: Milion
+          billion: Miliard
+          trillion: Bilion
+          quadrillion: Biliard
 
   datetime:
     distance_in_words:
@@ -190,4 +191,4 @@ pl:
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/pt-BR.yml b/config/locales/rails-i18n/pt-BR.yml
index 74fa57aba9d860511513df43998562c0dd4347e5..69355e5ce3e3ae8566d00bbd4da812f0541a4757 100644
--- a/config/locales/rails-i18n/pt-BR.yml
+++ b/config/locales/rails-i18n/pt-BR.yml
@@ -17,7 +17,7 @@
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%A, %d de %B de %Y, %H:%M h"
@@ -83,20 +83,20 @@
       decimal_units:
         format: "%n %u"
         units:
-          unit: ""     
+          unit: ""
           thousand: "mil"
           million:
-            one: "milhão"
-            other: "milhões"
+            one: milhão
+            other: milhões
           billion:
-            one: "bilhão"
-            other: "bilhões"
+            one: bilhão
+            other: bilhões
           trillion:
-            one: "trilhão"
-            other: "trilhões"
+            one: trilhão
+            other: trilhões
           quadrillion:
-            one: "quatrilhão"
-            other: "quatrilhões"
+            one: quatrilhão
+            other: quatrilhões
 
   # distancia do tempo em palavras
   datetime:
@@ -196,4 +196,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/pt-PT.yml b/config/locales/rails-i18n/pt-PT.yml
index e8721418b51d4eda4e3fc37028bdb8a59204b398..c5c51b69a9d2c613deab245eb29d59f475b8392d 100644
--- a/config/locales/rails-i18n/pt-PT.yml
+++ b/config/locales/rails-i18n/pt-PT.yml
@@ -4,14 +4,14 @@
 
 "pt-PT":
   date:
-    formats:      
+    formats:
       default: "%d/%m/%Y"
       short: "%d de %B"
       long: "%d de %B de %Y"
 
     day_names: [Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sábado]
     abbr_day_names: [Dom, Seg, Ter, Qua, Qui, Sex, Sáb]
-    
+
     month_names: [~, Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro]
     abbr_month_names: [~, Jan, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez]
     order:
@@ -31,11 +31,11 @@
     array:
       words_connector: ", "
       two_words_connector: " e "
-      last_word_connector: ", e"  
-    
-    select:    
+      last_word_connector: ", e"
+
+    select:
       prompt: "Por favor seleccione"
-      
+
   number:
     format:
       separator: ","
@@ -77,25 +77,25 @@
           kb: "KB"
           mb: "MB"
           gb: "GB"
-          tb: "TB"      
+          tb: "TB"
       decimal_units:
         format: "%n %u"
         units:
           unit: ""
-          thousand: "mil"
+          thousand: mil
           million:
-            one: "milhão"
-            other: "milhões"
+            one: milhão
+            other: milhões
           billion:
             one: mil milhões
             other: mil milhões
           trillion:
-            one: "bilião"
-            other: "biliões"
+            one: bilião
+            other: biliões
           quadrillion:
             one: mil biliões
             other:  mil biliões
-      
+
   datetime:
     distance_in_words:
       half_a_minute: "meio minuto"
@@ -187,4 +187,4 @@
         <<: *errors_messages
 
       full_messages:
-        format: "%{attribute}%{message}"
+        format: "%{attribute} %{message}"
diff --git a/config/locales/rails-i18n/rm.yml b/config/locales/rails-i18n/rm.yml
index 7b81ecf92e3e37b4fcfe8417ff1424e97d3a3a83..1d256857413871b7d8de0706ded6dbddf610a781 100644
--- a/config/locales/rails-i18n/rm.yml
+++ b/config/locales/rails-i18n/rm.yml
@@ -1,4 +1,4 @@
-# Romansh translations for Ruby on Rails 
+# Romansh translations for Ruby on Rails
 # by Flurina Andriuet and Sebastian de Castelberg (rails-i18n@kpricorn.org)
 
 rm:
@@ -16,7 +16,7 @@ rm:
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%A, %d. %B %Y, %H:%M Uhr"
@@ -24,7 +24,7 @@ rm:
       long: "%A, %d. %B %Y, %H:%M Uhr"
     am: "avantmezdi"
     pm: "suentermezdi"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: "ina mesa minuta"
diff --git a/config/locales/rails-i18n/ro.yml b/config/locales/rails-i18n/ro.yml
index ce9e3349b5ec4999489207d2f9e438217fb3d222..e979c5539f35e1b7fdd31aeb97f5499468b0978a 100644
--- a/config/locales/rails-i18n/ro.yml
+++ b/config/locales/rails-i18n/ro.yml
@@ -1,4 +1,4 @@
-# Romanian translations for Ruby on Rails 
+# Romanian translations for Ruby on Rails
 # by Catalin Ilinca (me@talin.ro)
 # updated by kfl62 (bogus keys are now commented)
 
@@ -18,7 +18,7 @@ ro:
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%a %d %b %Y, %H:%M:%S %z"
@@ -26,14 +26,14 @@ ro:
       short: "%d %b %H:%M"
       long: "%d %B %Y %H:%M"
 #      only_second: "%S"
-      
+
 #      datetime:
 #        formats:
 #          default: "%d-%m-%YT%H:%M:%S%Z"
-          
+
     am: ''
     pm: ''
-      
+
   datetime:
     distance_in_words:
       half_a_minute: "jumătate de minut"
@@ -77,7 +77,7 @@ ro:
       hour:   "Ora"
       minute: "Minutul"
       second: "Secunda"
-      
+
   number:
     format:
       precision: 3
@@ -115,11 +115,11 @@ ro:
           mb: "MB"
           gb: "GB"
           tb: "TB"
-       
+
   activerecord:
     errors:
       template:
-        header: 
+        header:
           one: "Nu am putut salva acest %{model}: o eroare"
           other: "Nu am putut salva acest %{model}: %{count} erori."
         body: "Încearcă să corectezi urmatoarele câmpuri:"
diff --git a/config/locales/rails-i18n/ru.yml b/config/locales/rails-i18n/ru.yml
index b4311d9a3689ea1e8f1075a83e5f1a4e522d0242..5f52626ae537df11114eb40a17134c55d2727dfa 100644
--- a/config/locales/rails-i18n/ru.yml
+++ b/config/locales/rails-i18n/ru.yml
@@ -2,11 +2,11 @@
 # by Yaroslav Markin <yaroslav@markin.net>
 #
 # Be sure to check out "russian" gem (http://github.com/yaroslav/russian) for
-# full Russian language support in Rails (month names, pluralization, etc). 
+# full Russian language support in Rails (month names, pluralization, etc).
 # The following is an excerpt from that gem.
 #
-# Для полноценной поддержки русского языка (варианты названий месяцев, 
-# плюрализация и так далее) в Rails 2.2 нужно использовать gem "russian" 
+# Для полноценной поддержки русского языка (варианты названий месяцев,
+# плюрализация и так далее) в Rails 2.2 нужно использовать gem "russian"
 # (http://github.com/yaroslav/russian). Следующие данные -- выдержка их него, чтобы
 # была возможность минимальной локализации приложения на русский язык.
 
@@ -48,7 +48,7 @@ ru:
       precision: 3
       significant: false
       strip_insignificant_zeros: false
-      
+
     currency:
       format:
         format: "%n %u"
@@ -58,22 +58,22 @@ ru:
         precision: 2
         significant: false
         strip_insignificant_zeros: false
-        
+
     percentage:
       format:
         delimiter: ""
-        
+
     precision:
       format:
         delimiter: ""
-        
+
     human:
       format:
         delimiter: ""
         precision: 1
         significant: false
         strip_insignificant_zeros: false
-        
+
       # Rails 2.2
       # storage_units: [байт, КБ, МБ, ГБ, ТБ]
 
@@ -92,7 +92,7 @@ ru:
           mb: "МБ"
           gb: "ГБ"
           tb: "ТБ"
-      
+
       # Rails 3
       decimal_units:
         format: "%n %u"
@@ -102,8 +102,8 @@ ru:
             one: "Тысяча"
             few: "Тысяч"
             many: "Тысяч"
-            other: "Тысяч"              
-          million: 
+            other: "Тысяч"
+          million:
             one: "Миллион"
             few: "Миллионов"
             many: "Миллионов"
@@ -283,10 +283,10 @@ ru:
         odd: "может иметь лишь четное значение"
         even: "может иметь лишь нечетное значение"
         record_invalid: "Возникли ошибки: %{errors}"
-        
+
       full_messages:
         format: "%{attribute} %{message}"
-        
+
 
   support:
     select:
@@ -296,7 +296,7 @@ ru:
       # Rails 2.2
       sentence_connector: "и"
       skip_last_comma: true
-      
+
       # Rails 2.3
       words_connector: ", "
       two_words_connector: " и "
diff --git a/config/locales/rails-i18n/sk.yml b/config/locales/rails-i18n/sk.yml
index 4ca80834690e121abeca0f1a8e2c217546f6eeed..00148b6f32efdd52a505f1e5ebfae9af513cbc50 100644
--- a/config/locales/rails-i18n/sk.yml
+++ b/config/locales/rails-i18n/sk.yml
@@ -1,5 +1,6 @@
 # Slovak translations for Ruby on Rails (inspired by the Czech localization - thanx to Karel Minařík)
 # by Jozef Fulop (jofi-rails@silake.com)
+# edit by Ivan Stana (stiipa@centrum.sk)
  
 "sk":
     # Date
@@ -35,14 +36,14 @@
             two_words_connector: " a "
             last_word_connector: " a "
         select:
-            prompt: "Prosím vyberte si." 
+            prompt: "Prosím vyberte si"
                 
     # Numbers
     number:
         format:
             precision: 3
-            separator: "."
-            delimiter: ","
+            separator: ","
+            delimiter: " "
             significant: false
             strip_insignificant_zeros: false
 
@@ -58,7 +59,7 @@
 
         percentage:
             format:
-                delimiter: ""
+                delimiter: " "
 
         precision:
             format:
@@ -85,11 +86,11 @@
                 format: "%n %u"
                 units:
                    unit: ""
-                   thousand: "Tisíc"
-                   million: "Milión"
-                   billion: "Miliarda"
-                   trillion: "Trilión"
-                   quadrillion: "Quadrilión"
+                   thousand: Tisíc
+                   million: Milión
+                   billion: Miliarda
+                   trillion: Bilión
+                   quadrillion: Biliarda
 
     # Distance of time ... helper
     datetime:
@@ -101,7 +102,7 @@
             month: "Mesiac"
             year: "Rok"
         distance_in_words:    
-            half_a_minute: 'pol minutou'
+            half_a_minute: 'pol minútou'
             less_than_x_seconds:
                 one: 'asi pred sekundou'
                 other: 'asi pred %{count} sekundami'
@@ -133,8 +134,8 @@
                 one: 'pred viac ako rokom'
                 other: 'viac ako %{count} rokmi'
             almost_x_years:
-                one:   "takmer rokom"
-                other: "takmer %{count} rokmi"
+                one:   "takmer pred rokom"
+                other: "takmer pred %{count} rokmi"
 
     helpers:
        select:
@@ -153,43 +154,43 @@
             invalid: "nie je platná hodnota"
             confirmation: "nebolo potvrdené"
             accepted: "musí byť potvrdené"
-            empty: "nesmie byť prázdný/é"
+            empty: "nesmie byť prázdny/e"
             blank: "je povinná položka"
             too_long: "je príliš dlhá/ý (max. %{count} znakov)"
-            too_short: "je príliš krátký/á (min. %{count} znakov)"
+            too_short: "je príliš krátky/a (min. %{count} znakov)"
             wrong_length: "nemá správnu dĺžku (očakáva sa %{count} znakov)"
             taken: "sa už nachádza v databáze"
             not_a_number: "nie je číslo"
-            not_an_integer: "nie je celé číslo"
-            greater_than: "musí byť väčšíe ako %{count}"
-            greater_than_or_equal_to: "musí byť väčšie alebo rovnaké ako %{count}"
+            not_an_integer: "musí byť celé číslo"
+            greater_than: "musí byť väčšie ako %{count}"
+            greater_than_or_equal_to: "musí byť väčšie alebo rovné %{count}"
             equal_to: "sa musí rovnať %{count}"
             less_than: "musí byť menšie ako %{count}"
-            less_than_or_equal_to: "musí byť menšie ako %{count}"
+            less_than_or_equal_to: "musí byť menšie alebo rovné %{count}"
             odd: "musí byť nepárne číslo"
             even: "musí byť párne číslo"
 
     # ActiveRecord validation messages
-    activerecord:                  
+    activerecord:
         errors:
             template:
                header:
-                  one:    "Zmeny na %{model} neboli uložené. Vyskytla sa 1 chyba"
-                  other:  "Zmeny na %{model} neboli uložené. Vyskytlo sa %{count} chýb"
-               body: "There were problems with the following fields:"
+                  one:    "Objekt %{model} nebol uložený. Vyskytla sa 1 chyba"
+                  other:  "Objekt %{model} nebol uložený. Vyskytlo sa %{count} chýb"
+               body: "Nasledujúce polia obsahujú chybne vyplnené údaje:"
 
             messages:
                taken: "ste už použili"
-               record_invalid: "Validácia neuspešná: %{errors}"
+               record_invalid: "Validácia neúspešná: %{errors}"
                <<: *errors_messages
 
             full_messages:
-               format: "%{attribute}%{message}"
+               format: "%{attribute} %{message}"
 
     activemodel:
         errors:
             template:
                 header:
-                    one: "Pri ukladaní objektu %{model} došlo k chybám a nebolo možné objekt uložiť"
-                    other: "Pri ukladaní objektu %{model} došlo ku %{count} chybe/ám a nebolo možné objekt uložiť"
+                    one: "Pri ukladaní objektu %{model} došlo k chybám a nebolo ho možné uložiť"
+                    other: "Pri ukladaní objektu %{model} došlo k %{count} chybám a nebolo ho možné uložiť"
                 body: "Nasledujúce polia obsahujú chybne vyplnené údaje:"
diff --git a/config/locales/rails-i18n/sl.yml b/config/locales/rails-i18n/sl.yml
index d1bdb285b11fea51f32d1f6f220c9c149091ff22..468e4399b33fafecb7622ac1c59058a37bf68953 100644
--- a/config/locales/rails-i18n/sl.yml
+++ b/config/locales/rails-i18n/sl.yml
@@ -1,6 +1,6 @@
 # Slovenian language localization (sl-sl)
 # by Miha Rebernik <miha@rebernik.info>
-sl:  
+sl:
   date:
     formats:
       default: "%d.%m.%Y"
@@ -24,7 +24,7 @@ sl:
       short: "%d. %b ob %H:%M"
       long: "%d. %B, %Y ob %H:%M"
       simple: "%d. %B %Y ob %H:%M"
-      
+
     am: "dopoldan"
     pm: "popoldan"
 
@@ -77,7 +77,7 @@ sl:
        delimiter: "."
        # Number of decimals, behind the separator (the number 1 with a precision of 2 gives: 1.00)
        precision: 2
- 
+
      # Used in number_to_currency()
      currency:
        format:
@@ -88,15 +88,15 @@ sl:
          separator: ","
          delimiter: "."
          precision: 2
-   
+
      # Used in number_to_percentage()
      percentage:
        format:
          # These three are to override number.format and are optional
-         # separator: 
+         # separator:
          delimiter: ""
-         # precision: 
-   
+         # precision:
+
      # Used in number_to_precision()
      precision:
        format:
@@ -104,12 +104,12 @@ sl:
          # separator:
          delimiter: ""
          # precision:
-   
+
      # Used in number_to_human_size()
      human:
        format:
          # These three are to override number.format and are optional
-         # separator: 
+         # separator:
          delimiter: ""
          precision: 1
        storage_units:
@@ -169,7 +169,7 @@ sl:
        two:   "2 meseca"
        few:   "%{count} mesece"
        other: "%{count} mesecev"
-     almost_x_years:      
+     almost_x_years:
        one:   "skoraj 1 leto"
        two:   "skoraj 2 leti"
        few:   "skoraj %{count} leta"
@@ -190,4 +190,4 @@ sl:
      day:    "Dan"
      hour:   "Ura"
      minute: "Minute"
-     second: "Sekunde"
\ No newline at end of file
+     second: "Sekunde"
diff --git a/config/locales/rails-i18n/sv-SE.yml b/config/locales/rails-i18n/sv-SE.yml
index ddc835fa3b8ef7adf142ff8656b0736f16033647..044aa98ee106d1aec1a10cc1f75f9c47bbf7d67a 100644
--- a/config/locales/rails-i18n/sv-SE.yml
+++ b/config/locales/rails-i18n/sv-SE.yml
@@ -143,6 +143,7 @@
       odd: "måste vara udda"
       even: "måste vara jämnt"
       record_invalid: "Ett fel uppstod: %{errors}"
+      not_saved: "Kunde inte sparas"
 
   activerecord:
     errors:
diff --git a/config/locales/rails-i18n/sw.yml b/config/locales/rails-i18n/sw.yml
index b8875a437f17a1f27ee69893a765da0ca37d98a3..e9b33413f3e30563bac9d61b523d20e8fa001555 100644
--- a/config/locales/rails-i18n/sw.yml
+++ b/config/locales/rails-i18n/sw.yml
@@ -82,11 +82,11 @@ sw:
         format: '%n %u'
         units:
           unit: ''
-          thousand: "Elfu"
-          million: "Milioni"
-          billion: "Bilioni"
-          trillion: "Trilioni"
-          quadrillion: "Quadrillion"
+          thousand: Elfu
+          million: Milioni
+          billion: Bilioni
+          trillion: Trilioni
+          quadrillion: Quadrillion
 
   datetime:
     distance_in_words:
diff --git a/config/locales/rails-i18n/th.rb b/config/locales/rails-i18n/th.rb
index 5e82451e5b8515691aa91c851f2075284c60b2a1..b07f54807dc308b91ff97b117659ef62b16b9ae7 100644
--- a/config/locales/rails-i18n/th.rb
+++ b/config/locales/rails-i18n/th.rb
@@ -174,7 +174,7 @@ end
 },
 
 :errors => {
-  :format => "%{attribute}%{message}",
+  :format => "%{attribute} %{message}",
   :messages => ThaiLocaleI18n::ERROR_MESSAGES
 },
 
@@ -191,7 +191,7 @@ end
     }.merge(ThaiLocaleI18n::ERROR_MESSAGES),
 
     :full_messages => {
-      :format => "%{attribute}%{message}"
+      :format => "%{attribute} %{message}"
     },
   }
 }
diff --git a/config/locales/rails-i18n/tr.yml b/config/locales/rails-i18n/tr.yml
index 058ba12f01d5d77ea23e9afc218ecf91eb96fb67..23af454d616aa461ed2d8b18b6625b75b3721c07 100644
--- a/config/locales/rails-i18n/tr.yml
+++ b/config/locales/rails-i18n/tr.yml
@@ -1,9 +1,9 @@
-# Turkish translations for Ruby on Rails 
+# Turkish translations for Ruby on Rails
 # by Ozgun Ataman (ozataman@gmail.com)
 
 tr:
   locale:
-    native_name: "Türkçe"
+    native_name: Türkçe
     address_separator: " "
   date:
     formats:
@@ -21,7 +21,7 @@ tr:
       - :day
       - :month
       - :year
-  
+
   time:
     formats:
       default: "%a %d.%b.%y %H:%M"
@@ -32,7 +32,7 @@ tr:
 
     am: "öğleden önce"
     pm: "öğleden sonra"
-      
+
   datetime:
     distance_in_words:
       half_a_minute: 'yarım dakika'
@@ -71,7 +71,7 @@ tr:
       almost_x_years:
         one:   "neredeyse 1 yıl"
         other: "neredeyse %{count} yıl"
-      
+
   number:
     format:
       precision: 2
@@ -109,7 +109,7 @@ tr:
       words_connector: ", "
       two_words_connector: " ve "
       last_word_connector: " ve "
-        
+
   activerecord:
     errors:
       template:
diff --git a/config/locales/rails-i18n/uk.yml b/config/locales/rails-i18n/uk.yml
index c16e7c9f0ca629df1748cc34286cad0d571c9355..1630fd6f1ea3e6d95523bb9f6ab82c28cd046dbb 100644
--- a/config/locales/rails-i18n/uk.yml
+++ b/config/locales/rails-i18n/uk.yml
@@ -16,7 +16,7 @@ uk:
       precision: 3
       significant: false
       strip_insignificant_zeros: false
-      
+
     # Used in number_to_currency()
     currency:
       format:
@@ -29,15 +29,15 @@ uk:
         precision: 2
         significant: false
         strip_insignificant_zeros: false
-        
+
     # Used in number_to_percentage()
     percentage:
       format:
         # These three are to override number.format and are optional
-        # separator: 
+        # separator:
         delimiter: ""
-        # precision: 
-        
+        # precision:
+
     # Used in number_to_precision()
     precision:
       format:
@@ -45,17 +45,17 @@ uk:
         # separator:
         delimiter: ""
         # precision:
-        
+
     # Used in number_to_human_size()
     human:
       format:
         # These three are to override number.format and are optional
-        # separator: 
+        # separator:
         delimiter: ""
         precision: 1
         significant: false
         strip_insignificant_zeros: false
-        
+
       storage_units:
         # Storage units output formatting.
         # %u is the storage unit, %n is the number (default: 2 MB)
@@ -79,8 +79,8 @@ uk:
             one: "Тисяча"
             few: "Тисяч"
             many: "Тисяч"
-            other: "Тисяч"              
-          million: 
+            other: "Тисяч"
+          million:
             one: "Мільйон"
             few: "Мільйонів"
             many: "Мільйонів"
@@ -112,7 +112,7 @@ uk:
         other: "менше %{count} секунди"
       x_seconds:
         one:   "%{count} секунда"
-        few:   "%{count} секунди" 
+        few:   "%{count} секунди"
         many:  "%{count} секунд"
         other: "%{count} секунди"
       less_than_x_minutes:
@@ -160,7 +160,7 @@ uk:
         few:   "майже %{count} років"
         many:  "майже %{count} років"
         other: "майже %{count} років"
-        
+
     prompts:
       year:   "Рік"
       month:  "Місяць"
@@ -168,7 +168,7 @@ uk:
       hour:   "Година"
       minute: "Хвилина"
       second: "Секунда"
-  
+
   helpers:
     select:
       # Default value for :prompt => true in FormOptionsHelper
@@ -180,7 +180,7 @@ uk:
       update: 'Зберегти %{model}'
       submit: 'Зберегти %{model}'
 
-      
+
   errors:
     format: "%{attribute} %{message}"
     # The values :model, :attribute and :value are always available for interpolation
@@ -193,7 +193,7 @@ uk:
       accepted: "має бути прийнятий"
       empty: "не може бути порожнім"
       blank: "не може бути пустим"
-      too_long: 
+      too_long:
         one:    "занадто довгий (максимум %{count} знак)"
         few:    "занадто довгий (максимум %{count} знаки)"
         many:   "занадто довгий (максимум %{count} знаків)"
@@ -243,7 +243,7 @@ uk:
         accepted: "має бути прийнятий"
         empty: "не може бути порожнім"
         blank: "не може бути пустим"
-        too_long: 
+        too_long:
           one:    "занадто довгий (максимум %{count} знак)"
           few:    "занадто довгий (максимум %{count} знаки)"
           many:   "занадто довгий (максимум %{count} знаків)"
@@ -268,7 +268,7 @@ uk:
         odd: "має бути непарним"
         even: "має бути парним"
         record_invalid: "Виникли помилки: %{errors}"
-      
+
   date:
     formats:
       # Use the strftime parameters for formats.
@@ -277,10 +277,10 @@ uk:
       default: "%d.%m.%Y"
       short: "%d %b"
       long: "%d %B %Y"
-      
+
     day_names: [неділя, понеділок, вівторок, середа, четвер, "п'ятниця", субота]
     abbr_day_names: [нд., пн., вт., ср., чт., пт., сб.]
-      
+
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
     month_names: [~, Січень, Лютий, Березень, Квітень, Травень, Червень, Липень, Серпень, Вересень, Жовтень, Листопад, Грудень]
     abbr_month_names: [~, січ., лют., бер., квіт., трав., черв., лип., серп., вер., жовт., лист., груд.]
@@ -297,7 +297,7 @@ uk:
       long: "%d %B %Y, %H:%M"
     am: "до полудня"
     pm: "по полудні"
-      
+
   # Used in array.to_sentence.
   support:
     select:
@@ -308,4 +308,4 @@ uk:
       words_connector: ", "
       two_words_connector: " Ñ– "
       last_word_connector: " та "
-      
+
diff --git a/config/locales/rails-i18n/vi.yml b/config/locales/rails-i18n/vi.yml
index aea7e3e54c82007a0c96670380a8f297c7bc5dc4..0006c7a0c08fef39b32da9e3af2963bfd1acbd36 100644
--- a/config/locales/rails-i18n/vi.yml
+++ b/config/locales/rails-i18n/vi.yml
@@ -147,16 +147,16 @@ vi:
       #       attributes:
       #         login:
       #           blank: "This is a custom blank message for User login"
-      # Will define custom blank validation message for User model and 
+      # Will define custom blank validation message for User model and
       # custom blank validation message for login attribute of User model.
       # models:
-        
+
     # Translate model names. Used in Model.human_name().
     #models:
       # For example,
       #   user: "Dude"
       # will translate User model name to "Dude"
-    
+
     # Translate model attribute names. Used in Model.human_attribute_name(attribute).
     #attributes:
       # For example,
diff --git a/config/routes.rb b/config/routes.rb
index 096d6e8cea48cafde33179b26b3bc7f4ed65ff85..3160ab45a6cc7a292120ceeea8e32d0a7706d600 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -12,18 +12,16 @@ Diaspora::Application.routes.draw do
   end
 
   resources :status_messages, :only => [:new, :create, :destroy, :show]
-  get 'p/:id' => 'posts#show', :as => 'post'
+  get 'bookmarklet' => 'status_messages#bookmarklet'
+  get 'p/:id'       => 'posts#show', :as => 'post'
 
   resources :photos, :except => [:index] do
     put 'make_profile_photo' => :make_profile_photo
   end
 
   resources :comments, :only => [:create, :destroy]
+  resource :like,      :only => [:create]
 
-  get 'tags/:name' => 'tags#show', :as => 'tag'
-  resources :tags, :only => [:index]
-
-  resource :like, :only => [:create]
 
   resources :conversations do
     resources :messages, :only => [:create, :show]
@@ -34,6 +32,8 @@ Diaspora::Application.routes.draw do
     get 'read_all' => :read_all, :on => :collection
   end
 
+  resources :tags, :only => [:index]
+  get 'tags/:name' => 'tags#show', :as => 'tag'
 
   # Users and people
 
@@ -42,6 +42,7 @@ Diaspora::Application.routes.draw do
     get :export_photos
   end
 
+
   controller :users do
     get 'public/:username'          => :public,          :as => 'users_public'
     match 'getting_started'         => :getting_started, :as => 'getting_started'
@@ -61,21 +62,21 @@ Diaspora::Application.routes.draw do
   get 'login' => redirect('/users/sign_in')
 
   scope 'admins', :controller => :admins do
-    match 'user_search' => :user_search
-    get 'admin_inviter' => :admin_inviter
-    get 'add_invites' => :add_invites, :as => 'add_invites'
+    match 'user_search'   => :user_search
+    get   'admin_inviter' => :admin_inviter
+    get   'add_invites'   => :add_invites, :as => 'add_invites'
   end
 
-  get 'bookmarklet' => 'status_messages#bookmarklet'
   resource :profile
 
-  resources :contacts, :except => [:index, :update, :create]
-  resources :aspect_memberships, :only => [:destroy, :create, :update]
-  resources :post_visibilities, :only => [:update]
+  resources :contacts,           :except => [:index, :update, :create]
+  resources :aspect_memberships, :only   => [:destroy, :create, :update]
+  resources :post_visibilities,  :only   => [:update]
 
   resources :people, :except => [:edit, :update] do
     resources :status_messages
     resources :photos
+    get  :contacts
     post 'by_handle' => :retrieve_remote, :on => :collection, :as => 'person_by_handle'
   end
 
diff --git a/db/migrate/20110421120744_downcase_usernames.rb b/db/migrate/20110421120744_downcase_usernames.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a4d24d1ab56d883c1a27763e5c3f748bef0795cd
--- /dev/null
+++ b/db/migrate/20110421120744_downcase_usernames.rb
@@ -0,0 +1,13 @@
+class DowncaseUsernames < ActiveRecord::Migration
+  def self.up
+    execute <<SQL
+      UPDATE users
+      SET users.username = LOWER(users.username)
+      WHERE users.username != LOWER(users.username)
+SQL
+  end
+
+  def self.down
+    raise ActiveRecord::IrreversibleMigration.new
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 6c4c75ddf2aa024ecd2d2869fcbd707b759d6ff5..6b8dcb155b4c5fa605b943b6bd892841c5e883cc 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
 #
 # It's strongly recommended to check this file into your version control system.
 
-ActiveRecord::Schema.define(:version => 20110406203720) do
+ActiveRecord::Schema.define(:version => 20110421120744) do
 
   create_table "aspect_memberships", :force => true do |t|
     t.integer  "aspect_id",  :null => false
diff --git a/db/seeds.rb b/db/seeds.rb
index ef0d810830005530624fa3e0a0f20b1c5f182edb..7d8dd676c63bb2894d38970d0ed7f44c0c8a04b0 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -34,8 +34,8 @@ time_interval = 1000
 (1..25).each do |n|
   [alice, bob, eve].each do |u|
     post = u.post :status_message, :text => "#{u.username} - #{n} - #seeded", :to => u.aspects.first.id
-    post.created_at = post.created_at + time_interval
-    post.updated_at = post.updated_at + time_interval
+    post.created_at = post.created_at - time_interval
+    post.updated_at = post.updated_at - time_interval
     post.save
     time_interval += 1000
   end
diff --git a/features/change_password.feature b/features/change_password.feature
index 0ee3bc43365fb2ea12e592b4d39a3af9e728244e..d93f2c7251e0f566cd7c67c2c4af9e03d2081216 100644
--- a/features/change_password.feature
+++ b/features/change_password.feature
@@ -11,8 +11,7 @@ Feature: Change password
     And I fill in "user_password_confirmation" with "newsecret"
     And I press "Change Password"
     Then I should see "Password Changed"  
-    And I click on my name in the header
-    And I follow "logout"
+    When I sign out
     Then I should be on the home page    
     And I sign in with password "newsecret"
     Then I should be on the aspects page
diff --git a/features/comments.feature b/features/comments.feature
index ac88ce360a7edb52d036bdb2b7c2e3d6ee565625..55e2ccf9f73b49888b1cc4f471b276e2bc555d83 100644
--- a/features/comments.feature
+++ b/features/comments.feature
@@ -61,3 +61,17 @@ Feature: commenting
     And I click to delete the first comment
     And I wait for the ajax to finish
     Then I should not see "is that a poodle?"
+
+  Scenario: expand the comment form
+    When I sign in as "bob@bob.bob"
+    Then I should see "Look at this dog"
+    Then the first comment field should be closed
+    When I focus the comment field
+    Then the first comment field should be open
+
+    When I follow "Besties"
+    And I wait for the ajax to finish
+    Then I should see "Look at this dog"
+    Then the first comment field should be closed
+    When I focus the comment field
+    Then the first comment field should be open
diff --git a/features/embedder.feature b/features/embedder.feature
new file mode 100644
index 0000000000000000000000000000000000000000..a2134415c042c0d78517ae58bf091383d68ecf60
--- /dev/null
+++ b/features/embedder.feature
@@ -0,0 +1,25 @@
+# @javascript
+# Feature: embedding
+#     Get sure that embedding stuff actually works
+# 
+#     Background:
+#       Given a user with username "bob"
+#       When I sign in as "bob@bob.bob"
+#       And I have no open aspects saved
+#       And I am on the home page
+# 
+#     Scenario: Youtube is fully embedded
+#       Given I expand the publisher
+#       When I fill in "status_message_fake_text" with "Look at this awesome video: https://www.youtube.com/watch?v=53tq9g35kwk"
+#         And I press "Share"
+#         And I follow "All Aspects"
+#       Then I should see "Look at this awesome video: Youtube: Leekspin" within ".stream_element"
+#       When I follow "Youtube: Leekspin"
+#       And I wait for the ajax to finish
+#       Then I should see "Watch this video on YouTube" within ".video-container"
+# 
+#       #After ajax aspect switch
+#       When I follow "Besties" 
+#       And I wait for the ajax to finish
+#       And I follow "Youtube: Leekspin"
+#       Then I should see "Watch this video on YouTube" within ".video-container"
diff --git a/features/infinite_scroll.feature b/features/infinite_scroll.feature
new file mode 100644
index 0000000000000000000000000000000000000000..98181bff15ebdc8e1a78ead8ee46958df63032e6
--- /dev/null
+++ b/features/infinite_scroll.feature
@@ -0,0 +1,72 @@
+@javascript
+Feature: infinite scroll
+    In order to browse without disruption
+    As medium-sized internet grazing animal
+    I want the stream to infinite scroll
+    
+    Background:
+      Given many posts from alice for bob
+      When I sign in as "bob@bob.bob"
+
+    Scenario: on the main stream
+      Then I should see 15 posts
+      And I should see "alice - 15 - #seeded"
+
+      When I scroll down
+      Then I should see 30 posts
+      And I should see "alice - 30 - #seeded"
+
+      When I scroll down
+      Then I should see 40 posts
+      And I should see "alice - 40 - #seeded"
+
+      When I scroll down
+      Then I should see "No more"
+
+      When I follow "generic"
+      And I wait for the ajax to finish
+      Then I should see 15 posts
+      And I should see "alice - 15 - #seeded"
+
+      When I scroll down
+      Then I should see 30 posts
+      And I should see "alice - 30 - #seeded"
+
+      When I scroll down
+      Then I should see 40 posts
+      And I should see "alice - 40 - #seeded"
+
+      When I scroll down
+      Then I should see "No more"
+
+    Scenario: On a tag page
+      And I am on the tag page for "seeded"
+      Then I should see 15 posts
+      And I should see "alice - 15 - #seeded"
+
+      When I scroll down
+      Then I should see 30 posts
+      And I should see "alice - 30 - #seeded"
+
+      When I scroll down
+      Then I should see 40 posts
+      And I should see "alice - 40 - #seeded"
+
+      When I scroll down
+      Then I should see "No more"
+
+    Scenario: On a profile page
+      And I am on "alice@alice.alice"'s page
+      Then I should see 15 posts
+      And I should see "alice - 15 - #seeded"
+
+      When I scroll down
+      Then I should see 30 posts
+      And I should see "alice - 30 - #seeded"
+
+      When I scroll down
+      Then I should see 40 posts
+      And I should see "alice - 40 - #seeded"
+
+      When I scroll down
+      Then I should see "No more"
diff --git a/features/logs_in_and_out.feature b/features/logs_in_and_out.feature
index 9d86be644eb3b4b5c890a2c2efc331ac46b9fe99..b39b3e68280b8f6d4335be6b4b88ced0b8323e9a 100644
--- a/features/logs_in_and_out.feature
+++ b/features/logs_in_and_out.feature
@@ -12,5 +12,5 @@ Feature: user authentication
   Scenario: user logs out
     Given I am signed in
     And I click on my name in the header
-    And I follow "logout"
+    And I follow "log out"
     Then I should be on the home page
diff --git a/features/step_definitions/comment_steps.rb b/features/step_definitions/comment_steps.rb
index 05727152abebf41f7b663b8254c781d6f227f7d0..e1be708be7c9aa71f8594d653059c3bb7e19ae39 100644
--- a/features/step_definitions/comment_steps.rb
+++ b/features/step_definitions/comment_steps.rb
@@ -1,3 +1,13 @@
 When /^I focus the comment field$/ do
   find("a.focus_comment_textarea").click
 end
+
+Then /^the first comment field should be open/ do
+  css_query = "$('#main_stream .stream_element:first .submit_button .comment_submit.button:visible')"
+  page.evaluate_script("#{css_query}.length").should == 1
+end
+
+Then /^the first comment field should be closed$/ do
+  css_query = "$('#main_stream .stream_element:first .submit_button .comment_submit.button:hidden')"
+  page.evaluate_script("#{css_query}.length").should == 1
+end
diff --git a/features/step_definitions/custom_web_steps.rb b/features/step_definitions/custom_web_steps.rb
index fa3d1f14663730244fed6368b65426987e3d8716..7a8377a34b704fab71d9e48c13a5ae22b00d95b7 100644
--- a/features/step_definitions/custom_web_steps.rb
+++ b/features/step_definitions/custom_web_steps.rb
@@ -188,3 +188,13 @@ Then /^the "([^"]*)" field(?: within "([^"]*)")? should be filled with "([^"]*)"
     end
   end
 end
+
+Then /^I should see (\d+) posts$/ do |n_posts|
+  evaluate_script("$('#main_stream .stream_element').length").should == n_posts.to_i
+end
+
+And /^I scroll down$/ do
+  evaluate_script("window.scrollBy(0,3000000)")
+  sleep 1
+  wait_until(10) { evaluate_script('$("#infscr-loading:visible").length') == 0 }
+end
diff --git a/features/step_definitions/session_steps.rb b/features/step_definitions/session_steps.rb
index d81fc321a48bea327df9ecaba426918a57072440..79ebb7eba0d0b3a3a47036fd88cfcdb4286249f6 100644
--- a/features/step_definitions/session_steps.rb
+++ b/features/step_definitions/session_steps.rb
@@ -39,5 +39,5 @@ end
 
 When /^I (?:log|sign) out$/ do
   When 'I click on my name in the header'
-  And 'I follow "logout"'
+  And 'I follow "log out"'
 end
diff --git a/features/step_definitions/user_steps.rb b/features/step_definitions/user_steps.rb
index af0465bf65b7077a8b74f555d756d3c8c2398c62..181be70a8feef03cfc6a84a3eda0bf67f986a7de 100644
--- a/features/step_definitions/user_steps.rb
+++ b/features/step_definitions/user_steps.rb
@@ -139,3 +139,17 @@ Given /^there is a user "([^\"]*)" who's tagged "([^\"]*)"$/ do |full_name, tag|
   user.profile.build_tags
   user.profile.save!
 end
+
+Given /^many posts from alice for bob$/ do
+  alice = Factory(:user_with_aspect, :username => 'alice', :email => 'alice@alice.alice', :password => 'password', :getting_started => false)
+  bob = Factory(:user_with_aspect, :username => 'bob', :email => 'bob@bob.bob', :password => 'password', :getting_started => false)
+  connect_users_with_aspects(alice, bob)
+  time_interval = 1000
+  (1..40).each do |n|
+    post = alice.post :status_message, :text => "#{alice.username} - #{n} - #seeded", :to => alice.aspects.first.id
+    post.created_at = post.created_at - time_interval
+    post.updated_at = post.updated_at - time_interval
+    post.save
+    time_interval += 1000
+  end
+end
diff --git a/features/support/env.rb b/features/support/env.rb
index 1257f607d94b66c52813018e59aeafaae8a714aa..09827a3f5a29d38a190dc400683c0e7d456230e3 100644
--- a/features/support/env.rb
+++ b/features/support/env.rb
@@ -43,6 +43,7 @@ require File.join(File.dirname(__FILE__), "database_cleaner_patches")
 
 require File.join(File.dirname(__FILE__), "..", "..", "spec", "support", "fake_redis")
 require File.join(File.dirname(__FILE__), "..", "..", "spec", "helper_methods")
+require File.join(File.dirname(__FILE__), "..", "..", "spec", "support","user_methods")
 include HelperMethods
 
 Before do
@@ -52,6 +53,8 @@ end
 silence_warnings do
   SERVICES['facebook'] = {'app_id' => :fake}
 end
+
+require File.join(File.dirname(__FILE__), "..", "..", "spec", "support", "fake_resque")
 module Resque
   def enqueue(klass, *args)
     klass.send(:perform, *args)
diff --git a/lib/collect_user_photos.rb b/lib/collect_user_photos.rb
index 358ce4e0c6a5744a4de002e12122cada7d2f0f16..f91875a0be09922719361cf1b2a949451ce6e600 100644
--- a/lib/collect_user_photos.rb
+++ b/lib/collect_user_photos.rb
@@ -5,7 +5,7 @@ module PhotoMover
     FileUtils::mkdir_p temp_dir
     Dir.chdir 'tmp/exports'
 
-    photos = user.raw_visible_posts.where(:author_id => user.person.id, :type => 'Photo')
+    photos = user.visible_posts.where(:author_id => user.person.id, :type => 'Photo')
 
     photos_dir = "#{user.id}/photos"
     FileUtils::mkdir_p photos_dir
diff --git a/lib/diaspora/exporter.rb b/lib/diaspora/exporter.rb
index adb33d26da74ac460b299ee59c2ad16b717c1e0c..36e71444b2ffd09d6a296170abd724e8f948b173 100644
--- a/lib/diaspora/exporter.rb
+++ b/lib/diaspora/exporter.rb
@@ -64,7 +64,7 @@ module Diaspora
             }
 
             xml.posts {
-              user.raw_visible_posts.find_all_by_author_id(user_person_id).each do |post|
+              user.visible_posts.find_all_by_author_id(user_person_id).each do |post|
                 #post.comments.each do |comment|
                 #  post_doc << comment.to_xml
                 #end
diff --git a/lib/diaspora/ostatus_builder.rb b/lib/diaspora/ostatus_builder.rb
index bd5b81931a0f8f4c199e8b2c4aad33721356d67b..e5fd0e855775b3c582e7b35b26e1a89f657aec34 100644
--- a/lib/diaspora/ostatus_builder.rb
+++ b/lib/diaspora/ostatus_builder.rb
@@ -44,8 +44,8 @@ module Diaspora
 <author>
   <activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
   <name>#{x(@user.name)}</name>
-  <uri>"#{AppConfig[:pod_url]}/people/#{@user.person.id}"</uri>
-  <link href="#{@user.public_url}" rel="alternative" type="text/html"/>
+  <uri>#{AppConfig[:pod_url]}people/#{@user.person.id}</uri>
+  <link rel="alternate" type="text/html" href="#{@user.public_url}" />
   <poco:preferredUsername>#{x(@user.username)}</poco:preferredUsername>
   <poco:displayName>#{x(@user.person.name)}</poco:displayName>
   <link rel="avatar" type="image/jpeg" media:width="100" media:height="100" href="#{@user.profile.image_url}"/>
diff --git a/lib/diaspora/taggable.rb b/lib/diaspora/taggable.rb
index 74b4377ff33405eabaf5fee5f4e89db120c93432..2eff354428c06900bae53f82ce7323730c36e7a8 100644
--- a/lib/diaspora/taggable.rb
+++ b/lib/diaspora/taggable.rb
@@ -4,7 +4,7 @@
 
 module Diaspora
   module Taggable
-    VALID_TAG_BODY = /[^_,\s#*\[\]()\:\@\/"'\.%]+/
+    VALID_TAG_BODY = /[^_,\s#*\[\]()\@\/"'\.%]+\b/
 
     def self.included(model)
       model.class_eval do
diff --git a/lib/diaspora/user/querying.rb b/lib/diaspora/user/querying.rb
index df19e394efe9d6714ad87615b5fed2d79aab8c6f..9eaa425a7b1ed878169cbb91844bb1508c0aa0cd 100644
--- a/lib/diaspora/user/querying.rb
+++ b/lib/diaspora/user/querying.rb
@@ -12,14 +12,16 @@ module Diaspora
         post ||= Post.where(:id => id, :public => true).where(opts).first
       end
 
-      def raw_visible_posts(opts = {})
+      def visible_posts(opts = {})
         opts = opts.dup
         opts[:type] ||= ['StatusMessage', 'Photo']
         opts[:limit] ||= 15
         opts[:order] ||= 'updated_at DESC'
+        order_field = opts[:order].split.first.to_sym
         opts[:hidden] ||= false
         order_with_table = 'posts.' + opts[:order]
-        opts[:offset] = opts[:page].nil? || opts[:page] == 1 ? 0 : opts[:limit] * (opts[:page] - 1)
+        opts[:max_time] = Time.at(opts[:max_time]) if opts[:max_time].is_a?(Integer)
+        opts[:max_time] ||= Time.now + 1
         select_clause ='DISTINCT posts.id, posts.updated_at AS updated_at, posts.created_at AS created_at'
 
         posts_from_others = Post.joins(:contacts).where( :post_visibilities => {:hidden => opts[:hidden]}, :contacts => {:user_id => self.id})
@@ -31,8 +33,8 @@ module Diaspora
           posts_from_self = posts_from_self.joins(:aspect_visibilities).where(:aspect_visibilities => {:aspect_id => opts[:by_members_of]})
         end
 
-        posts_from_others = posts_from_others.select(select_clause).limit(opts[:limit]).offset(opts[:offset]).order(order_with_table)
-        posts_from_self = posts_from_self.select(select_clause).limit(opts[:limit]).offset(opts[:offset]).order(order_with_table)
+        posts_from_others = posts_from_others.select(select_clause).limit(opts[:limit]).order(order_with_table).where(Post.arel_table[order_field].lt(opts[:max_time]))
+        posts_from_self = posts_from_self.select(select_clause).limit(opts[:limit]).order(order_with_table).where(Post.arel_table[order_field].lt(opts[:max_time]))
 
         all_posts = "(#{posts_from_others.to_sql}) UNION ALL (#{posts_from_self.to_sql}) ORDER BY #{opts[:order]} LIMIT #{opts[:limit]}"
         post_ids = Post.connection.execute(all_posts).map{|r| r.first}
@@ -40,8 +42,8 @@ module Diaspora
         Post.where(:id => post_ids, :pending => false, :type => opts[:type]).select('DISTINCT posts.*').limit(opts[:limit]).order(order_with_table)
       end
 
-      def visible_photos
-        raw_visible_posts(:type => 'Photo')
+      def visible_photos(opts = {})
+        visible_posts(opts.merge(:type => 'Photo'))
       end
 
       def contact_for(person)
diff --git a/lib/fake.rb b/lib/fake.rb
index 77050ff10d1a21573f316a6756ff1116aae28370..2a1c86d272dc20011a80f9adbeeeacb3dad73621 100644
--- a/lib/fake.rb
+++ b/lib/fake.rb
@@ -1,6 +1,6 @@
 class PostsFake
   attr_reader :people_hash, :post_fakes
-  delegate :length, :each, :to_ary, :to => :post_fakes
+  delegate :length, :each, :to_ary, :last, :to => :post_fakes
 
   def initialize(posts)
     author_ids = []
diff --git a/lib/splunk_logging.rb b/lib/splunk_logging.rb
index 39f58763f2bc6458c9f3337e3e2e173fd3bf57cd..53a79eceae140f9aecad1cd31dbd1ff35682f066 100644
--- a/lib/splunk_logging.rb
+++ b/lib/splunk_logging.rb
@@ -5,7 +5,9 @@ module SplunkLogging
     end
   end
   def add_with_splunk(arg1, log_hash = nil, arg3 = nil, &block)
-    add_without_splunk(arg1, format_hash(log_hash), arg3, &block)
+    string = format_hash(log_hash).dup
+    string << "pid=#{Process.pid} "
+    add_without_splunk(arg1, string, arg3, &block)
   end
   def format_hash(hash)
     if hash.respond_to?(:keys)
diff --git a/public/javascripts/apiconsole.js b/public/javascripts/apiconsole.js
index e9a4c7a487824f2799b3fc5a13fabaeb2b166258..1a51d56a4c64e1071a9c625ae50d5feb7addd816 100644
--- a/public/javascripts/apiconsole.js
+++ b/public/javascripts/apiconsole.js
@@ -3,13 +3,13 @@ var ApiConsole = {
   prettyPrint: function(obj, indent)
   {
     var result = "";
-    if (indent == null) indent = "";
+    if (indent === null) { indent = ""; }
 
     for (var property in obj)
       {
         var value = obj[property];
         if (typeof value == 'string')
-          value = "'" + value + "'";
+          { value = "'" + value + "'"; }
         else if (typeof value == 'object')
           {
             if (value instanceof Array)
@@ -46,7 +46,7 @@ var ApiConsole = {
       });
     });
   }
-}
+};
 
 $(document).ready(function(){
 
diff --git a/public/javascripts/aspect-edit.js b/public/javascripts/aspect-edit.js
index 5edfe368eabd9e37a64b979b7de2dce0d892ccd0..3cb4d2b3aa4f982b17162ead9220fb6658ea92ef 100644
--- a/public/javascripts/aspect-edit.js
+++ b/public/javascripts/aspect-edit.js
@@ -46,9 +46,9 @@ var AspectEdit = {
     var dropzone = $(this);
     var person = ui.draggable;
 
-    if (person.attr('data-aspect_id') != undefined && // a request doesn't have a data-aspect_id, but an existing contact does
+    if (person.attr('data-aspect_id') !== undefined && // a request doesn't have a data-aspect_id, but an existing contact does
         dropzone.attr('data-aspect_id') != person.attr('data-aspect_id')) {
-        var aspect_id = person.attr('data-aspect_id')
+        var aspect_id = person.attr('data-aspect_id');
       $.ajax({
         type: "PUT",
         url: "/aspect_memberships/garbage",
diff --git a/public/javascripts/aspect-filters.js b/public/javascripts/aspect-filters.js
index fd1e62d615f91be977890905de293d19bb1eb0b8..19557ca1c2f818296457165f2256d79d924887d8 100644
--- a/public/javascripts/aspect-filters.js
+++ b/public/javascripts/aspect-filters.js
@@ -3,98 +3,105 @@
  *   the COPYRIGHT file.
  */
 
-$(document).ready(function(){
-  var selectedGUIDS = [],
-      requests = 0;
-
-  $("#aspect_nav li").each(function(){
-    var button = $(this),
-        guid = button.attr('data-guid');
-
-    if(guid && location.href.search("a_ids..="+guid+"(&|$)") != -1){
-      button.addClass('selected');
-      selectedGUIDS.push(guid);
+var AspectFilters = {
+  selectedGUIDS: [],
+  requests: 0,
+  initialize: function(){
+    AspectFilters.initializeSelectedGUIDS();
+    AspectFilters.interceptAspectLinks();
+    AspectFilters.interceptAspectNavLinks();
+
+    if($("a.home_selector").parent().hasClass("selected")){
+      AspectFilters.performAspectUpdate();
     }
-  });
-
-
-  $("a.hard_aspect_link").live("click", function(e){
+  },
+  initializeSelectedGUIDS: function(){
+    $("#aspect_nav li").each(function(){
+      var button = $(this),
+          guid = button.attr('data-guid');
+
+      if(guid && location.href.search("a_ids..="+guid+"(&|$)") != -1){
+        button.addClass('selected');
+        AspectFilters.selectedGUIDS.push(guid);
+      }
+    });
+  },
+  interceptAspectLinks: function(){
+    $("a.hard_aspect_link").live("click", AspectFilters.aspectLinkClicked);
+  },
+  aspectLinkClicked: function(e){
     var link = $(this);
+    e.preventDefault();
     if( !link.hasClass('aspect_selector') ){
-      e.preventDefault();
-      requests++;
-
-      var guid = $(this).attr('data-guid');
-
-      // select correct aspect in filter list & deselect others
-      $("#aspect_nav li").each(function(){
-        var $this = $(this);
-        if( $this.attr('data-guid') == guid){
-          $this.addClass('selected');
-        } else {
-          $this.removeClass('selected');
-        }
-      });
-
-      // loading animation
-      $("#aspect_stream_container").fadeTo(200, 0.4);
-      $("#aspect_contact_pictures").fadeTo(200, 0.4);
-
-      performAjax( $(this).attr('href'));
+      AspectFilters.switchToAspect(link);
     }
 
+    // remove focus
+    this.blur();
+
     $('html, body').animate({scrollTop:0}, 'fast');
-  });
+  },
+  switchToAspect: function(aspectLi){
+    AspectFilters.requests++;
 
-  $("#aspect_nav a.aspect_selector").click(function(e){
-    e.preventDefault();
+    var guid = aspectLi.attr('data-guid');
 
-    requests++;
+    // select correct aspect in filter list & deselect others
+    $("#aspect_nav li").removeClass('selected');
+    aspectLi.addClass('selected');
 
-    // loading animation
-    $("#aspect_stream_container").fadeTo(100, 0.4);
-    $("#aspect_contact_pictures").fadeTo(100, 0.4);
+    AspectFilters.fadeOut();
 
-    // filtering //////////////////////
-    var $this = $(this),
-        listElement = $this.parent(),
-        guid = listElement.attr('data-guid'),
-        homeListElement = $("#aspect_nav a.home_selector").parent();
-
-    if( listElement.hasClass('selected') ){
-      // remove filter
-      var idx = selectedGUIDS.indexOf( guid );
-      if( idx != -1 ){
-        selectedGUIDS.splice(idx,1);
-      }
-      listElement.removeClass('selected');
+    AspectFilters.performAjax( aspectLi.attr('href'));
+  },
+  interceptAspectNavLinks: function(){
+    $("#aspect_nav a.aspect_selector").click(function(e){
+      e.preventDefault();
 
-      if(selectedGUIDS.length == 0){
-        homeListElement.addClass('selected');
-      }
+      AspectFilters.requests++;
 
-    } else {
-      // append filter
-      if(selectedGUIDS.indexOf( guid == 1)){
-        selectedGUIDS.push( guid );
-      }
-      listElement.addClass('selected');
+      // loading animation
+      AspectFilters.fadeOut();
+
+      // filtering //////////////////////
+      var $this = $(this),
+          listElement = $this.parent(),
+          guid = listElement.attr('data-guid'),
+          homeListElement = $("#aspect_nav a.home_selector").parent();
+
+      if( listElement.hasClass('selected') ){
+        // remove filter
+        var idx = AspectFilters.selectedGUIDS.indexOf( guid );
+        if( idx != -1 ){
+          AspectFilters.selectedGUIDS.splice(idx,1);
+        }
+        listElement.removeClass('selected');
 
-      homeListElement.removeClass('selected');
-    }
+        if(AspectFilters.selectedGUIDS.length === 0){
+          homeListElement.addClass('selected');
+        }
 
-     performAjax(generateURL());
-  });
+      } else {
+        // append filter
+        if(AspectFilters.selectedGUIDS.indexOf( guid == 1)){
+          AspectFilters.selectedGUIDS.push( guid );
+        }
+        listElement.addClass('selected');
 
+        homeListElement.removeClass('selected');
+      }
 
-  function generateURL(){
+       AspectFilters.performAjax(AspectFilters.generateURL());
+    });
+  },
+  generateURL: function(){
     var baseURL = location.href.split("?")[0];
 
     // generate new url
     baseURL = baseURL.replace('#','');
     baseURL += '?';
-    for(i=0; i < selectedGUIDS.length; i++){
-      baseURL += 'a_ids[]='+ selectedGUIDS[i] +'&';
+    for(i=0; i < AspectFilters.selectedGUIDS.length; i++){
+      baseURL += 'a_ids[]='+ AspectFilters.selectedGUIDS[i] +'&';
     }
 
     if(!$("#publisher").hasClass("closed")) {
@@ -105,46 +112,36 @@ $(document).ready(function(){
       baseURL = baseURL.slice(0,baseURL.length-1);
     }
     return baseURL;
-  }
-
-  function performAspectUpdate(){
-      // update the open aspects in the user
-      updateURL = "/user";
-      updateURL += '?';
-      if(selectedGUIDS.length == 0){
-        updateURL += 'user[a_ids][]=home';
-      } else {
-        for(i=0; i < selectedGUIDS.length; i++){
-          updateURL += 'user[a_ids][]='+ selectedGUIDS[i] +'&';
-        }
+  },
+  performAspectUpdate: function(){
+    // update the open aspects in the user
+    updateURL = "/user";
+    updateURL += '?';
+    if(AspectFilters.selectedGUIDS.length === 0){
+      updateURL += 'user[a_ids][]=home';
+    } else {
+      for(i=0; i < AspectFilters.selectedGUIDS.length; i++){
+        updateURL += 'user[a_ids][]='+ AspectFilters.selectedGUIDS[i] +'&';
       }
+    }
 
-      $.ajax({
-        url : updateURL,
-        type: "PUT",
-        });
-
-  }
-
-  if($("a.home_selector").parent().hasClass("selected")){
-    performAspectUpdate();
-  }
-
-  function performAjax(newURL) {
+    $.ajax({
+      url : updateURL,
+      type: "PUT"
+      });
+  },
+  performAjax: function(newURL) {
     var post = $("#publisher textarea").val(),
         photos = {};
 
-
     //pass photos
     $('#photodropzone img').each(function(){
       var img = $(this);
-      guid = img.attr('data-id');
-      url = img.attr('src');
+      var guid = img.attr('data-id');
+      var url = img.attr('src');
       photos[guid] = url;
     });
 
-
-
     // set url
     // some browsers (Firefox for example) don't support pushState
     if (typeof(history.pushState) == 'function') {
@@ -155,14 +152,14 @@ $(document).ready(function(){
       url : newURL,
       dataType : 'script',
       success  : function(data){
-        requests--;
+        AspectFilters.requests--;
         // fill in publisher
         // (not cached because this element changes)
 
         var textarea = $("#publisher textarea");
-        var photozone = $('#photodropzone')
+        var photozone = $('#photodropzone');
 
-        if( post != "" ) {
+        if( post !== "" ) {
           textarea.val(post);
           textarea.focus();
         }
@@ -171,24 +168,29 @@ $(document).ready(function(){
         for(var key in photos){
           $("#publisher textarea").addClass("with_attachments");
           photos_html = photos_html + "<li style='position:relative;'> " + ("<img src='" + photos[key] +"' data-id='" + key + "'>") +  "</li>";
-        };
+        }
 
         // reinit listeners on stream
         photozone.html(photos_html);
-        Stream.initialize();
-        InfiniteScroll.initialize();
-
-        Publisher.initialize();
+        Diaspora.widgets.publish("stream/reloaded");
 
         // fade contents back in
-        if(requests == 0){
-          $("#aspect_stream_container").fadeTo(100, 1);
-          $("#aspect_contact_pictures").fadeTo(100, 1);
-          performAspectUpdate();
+        if(AspectFilters.requests === 0){
+          AspectFilters.fadeIn();
+          AspectFilters.performAspectUpdate();
         }
       }
     });
-
+  },
+  fadeIn: function(){
+    $("#aspect_stream_container").fadeTo(100, 1);
+    $("#aspect_contact_pictures").fadeTo(100, 1);
+  },
+  fadeOut: function(){
+    $("#aspect_stream_container").fadeTo(100, 0.4);
+    $("#aspect_contact_pictures").fadeTo(100, 0.4);
   }
-
+}
+$(document).ready(function(){
+  AspectFilters.initialize();
 });
diff --git a/public/javascripts/contact-list.js b/public/javascripts/contact-list.js
index 3120626b5208c9f1f329ea8e8b64a8825d44b36d..439f1228bdda57aa439715fc6717cec34e0d6b89 100644
--- a/public/javascripts/contact-list.js
+++ b/public/javascripts/contact-list.js
@@ -47,7 +47,6 @@ $(document).ready(function() {
     $(this).fadeTo(200,0.4);
   });
 
-
   $('.added').live('ajax:failure', function(data, html, xhr) {
     if(confirm(Diaspora.widgets.i18n.t('shared.contact_list.cannot_remove'))){
       var contact_id;
@@ -64,7 +63,6 @@ $(document).ready(function() {
     $(this).fadeTo(200,1);
   });
 
-
   $('.added').live('mouseover', function() {
     $(this).addClass("remove");
     $(this).children("img").attr("src","/images/icons/monotone_close_exit_delete.png");
diff --git a/public/javascripts/diaspora.js b/public/javascripts/diaspora.js
index a896631ccc7f22899b24693d0936c593e295a833..8b2e8c032929a00f0e6056ec1cca72f3519c0493 100644
--- a/public/javascripts/diaspora.js
+++ b/public/javascripts/diaspora.js
@@ -3,33 +3,53 @@
 *   the COPYRIGHT file.
 */
 
-var Diaspora = Diaspora || {};
+(function() {
+  if(typeof window.Diaspora !== "undefined") {
+    return;
+  }
+
+  var Diaspora = { };
 
-Diaspora.widgetCollection = function() {
-  this.initialized = false;
-  this.collection = {};
-};
+  Diaspora.WidgetCollection = function() {
+    this.initialized = false;
+    this.collection = { };
+    this.eventsContainer = $({});
+  };
 
-Diaspora.widgetCollection.prototype.add = function(widgetId, widget) {
+  Diaspora.WidgetCollection.prototype.add = function(widgetId, widget) {
     this[widgetId] = this.collection[widgetId] = new widget();
     if(this.initialized) {
       this.collection[widgetId].start();
     }
   };
 
-Diaspora.widgetCollection.prototype.remove = function(widgetId) {
+  Diaspora.WidgetCollection.prototype.remove = function(widgetId) {
     delete this.collection[widgetId];
-};
+  };
+
+  Diaspora.WidgetCollection.prototype.init = function() {
+    this.initialized = true;
+
+    for(var widgetId in this.collection) {
+      if(typeof this.collection[widgetId].start !== "undefined") {
+        this.collection[widgetId].start();
+      }
+    }
+  };
+
+  Diaspora.WidgetCollection.prototype.subscribe = function(id, callback, context) {
+    this.eventsContainer.bind(id, $.proxy(callback, context));
+  };
+
+  Diaspora.WidgetCollection.prototype.publish = function(id) {
+    this.eventsContainer.trigger(id);
+  };
+
+  Diaspora.widgets = new Diaspora.WidgetCollection();
+
+  window.Diaspora = Diaspora;
+})();
 
-Diaspora.widgetCollection.prototype.init = function() {
-  this.initialized = true;
-  for(var widgetId in this.collection) {
-    this.collection[widgetId].start();
-  }
-}
 
-Diaspora.widgets = Diaspora.widgets || new Diaspora.widgetCollection();
+$(document).ready(function() { Diaspora.widgets.init(); });
 
-$(document).ready(function() {
-  Diaspora.widgets.init();
-});
diff --git a/public/javascripts/fileuploader-custom.js b/public/javascripts/fileuploader-custom.js
index 7b9b044d981bb203ab295cf2c265489c62494f30..4fc1ad643cb8960e185a21104ee786dfc6c88b6a 100644
--- a/public/javascripts/fileuploader-custom.js
+++ b/public/javascripts/fileuploader-custom.js
@@ -28,12 +28,12 @@ qq.extend = function(first, second){
  * @param {Number} [from] The index at which to begin the search
  */
 qq.indexOf = function(arr, elt, from){
-    if (arr.indexOf) return arr.indexOf(elt, from);
+    if (arr.indexOf) { return arr.indexOf(elt, from); }
 
     from = from || 0;
     var len = arr.length;
 
-    if (from < 0) from += len;
+    if (from < 0) { from += len; }
 
     for (; from < len; from++){
         if (from in arr && arr[from] === elt){
@@ -89,7 +89,7 @@ qq.remove = function(element){
 
 qq.contains = function(parent, descendant){
     // compareposition returns false in this case
-    if (parent == descendant) return true;
+    if (parent == descendant) { return true; }
 
     if (parent.contains){
         return parent.contains(descendant);
@@ -120,7 +120,7 @@ qq.toElement = (function(){
  * Fixes opacity in IE6-8.
  */
 qq.css = function(element, styles){
-    if (styles.opacity != null){
+    if (styles.opacity !== null){
         if (typeof element.style.opacity != 'string' && typeof(element.filters) != 'undefined'){
             styles.filter = 'alpha(opacity=' + Math.round(100 * styles.opacity) + ')';
         }
diff --git a/public/javascripts/inbox.js b/public/javascripts/inbox.js
index 6320659a5119459f53ff13e8c4ca6645b7ea8eb8..637b6480d2179aac366eab4b7a8683371da87d2f 100644
--- a/public/javascripts/inbox.js
+++ b/public/javascripts/inbox.js
@@ -16,7 +16,7 @@ $(document).ready(function(){
     if(conv.hasClass('unread') ){
       conv.removeClass('unread');
     }
-    if(cBadge.html() != null) {
+    if(cBadge.html() !== null) {
       cBadge.html().replace(/\d+/, function(num){
         num = parseInt(num);
         cBadge.html(parseInt(num)-1);
@@ -30,7 +30,7 @@ $(document).ready(function(){
   });
 
   $(window).bind("popstate", function(){
-    if (location.href.match(/conversations\/\d+/) != null) {
+    if (location.href.match(/conversations\/\d+/) !== null) {
 	  $.getScript(location.href, function() {
         Diaspora.widgets.directionDetector.updateBinds();
       });
@@ -72,7 +72,7 @@ $(document).ready(function(){
 
   // remove the paginator when we're done.
   $(document).ajaxError(function(e,xhr,opt){
-    if (xhr.status == 404) $('a.next_page').remove();
+    if (xhr.status == 404) { $('a.next_page').remove(); }
   });
 
   $('#reply_to_conversation').live('click', function(evt) {
@@ -84,7 +84,7 @@ $(document).ready(function(){
 });
 
 var resize = function(){
-  var inboxSidebar = $('#conversation_inbox');
+  var inboxSidebar = $('#conversation_inbox'),
       inboxSidebarOffset = inboxSidebar.offset().top,
       windowHeight = $(window).height();
 
diff --git a/public/javascripts/infinite-scroll.js b/public/javascripts/infinite-scroll.js
deleted file mode 100644
index 9ec191d41b7ca1ef9572f438b7ae85315b969915..0000000000000000000000000000000000000000
--- a/public/javascripts/infinite-scroll.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var InfiniteScroll = {
-  options: {
-    navSelector  : "#pagination",
-                   // selector for the paged navigation (it will be hidden)
-    nextSelector : ".paginate",
-                   // selector for the NEXT link (to page 2)
-    itemSelector : ".stream_element",
-                   // selector for all items you'll retrieve
-    pathParse    : function( pathStr, nextPage ){
-      var newPath = pathStr.replace("?", "?only_posts=true&");
-      return newPath.replace( "page=2", "page=" + nextPage);
-    },
-    bufferPx: 500,
-    debug: false,
-    donetext: "no more.",
-    loadingText: "",
-    loadingImg: '/images/ajax-loader.gif'
-  },
-  postScrollCallback: function(){
-    for (var callback in InfiniteScroll.postScrollCallbacks){
-      InfiniteScroll.postScrollCallbacks[callback]();
-    }
-  },
-  postScrollCallbacks: [],
-  initialize: function(){
-    $('#main_stream').infinitescroll(InfiniteScroll.options, InfiniteScroll.postScrollCallback);
-  },
-  postScroll: function( callback ){
-    InfiniteScroll.postScrollCallbacks.push(callback);
-  }
-}
-
-$(document).ready(function() {
-  InfiniteScroll.initialize();
-});
-
diff --git a/public/javascripts/keycodes.js b/public/javascripts/keycodes.js
index ca275d1ce598224a8ed9b3be075ee4d7cb0c7ab0..ae6c143dbe5451d5bd32c83bcc28af9d17066b18 100644
--- a/public/javascripts/keycodes.js
+++ b/public/javascripts/keycodes.js
@@ -112,5 +112,5 @@ isInsertion : function(keyCode){
   }else {
     return true;
   }
-},
 }
+};
diff --git a/public/javascripts/publisher.js b/public/javascripts/publisher.js
index 89e215baa46f6ffd70e66c2052dfface0c2c0847..62193520197b2f44e7280bb83e7df9b6f12f89d8 100644
--- a/public/javascripts/publisher.js
+++ b/public/javascripts/publisher.js
@@ -28,13 +28,6 @@ var Publisher = {
     }
     return Publisher.cachedInput;
   },
-  cachedSubmit : false,
-  submit: function(){
-    if(!Publisher.cachedSubmit){
-      Publisher.cachedSubmit = Publisher.form().find('#status_message_submit');
-    }
-    return Publisher.cachedSubmit;
-  },
 
   cachedHiddenInput : false,
   hiddenInput: function(){
@@ -107,7 +100,7 @@ var Publisher = {
       },
       generateHiddenInput : function(visibleString){
         var resultString = visibleString;
-        for(i in this.sortedMentions()){
+        for(var i in this.sortedMentions()){
           var mention = this.mentions[i];
           var start = resultString.slice(0, mention.visibleStart);
           var insertion = mention.mentionString;
@@ -165,14 +158,14 @@ var Publisher = {
       },
       updateMentionLocations : function(effectiveCursorIndex, offset){
         var changedMentions = this.mentionsAfter(effectiveCursorIndex);
-        for(i in changedMentions){
+        for(var i in changedMentions){
           var mention = changedMentions[i];
           mention.visibleStart += offset;
           mention.visibleEnd += offset;
         }
       },
       mentionAt : function(visibleCursorIndex){
-        for(i in this.mentions){
+        for(var i in this.mentions){
           var mention = this.mentions[i];
           if(visibleCursorIndex > mention.visibleStart && visibleCursorIndex < mention.visibleEnd){
             return i;
@@ -182,14 +175,14 @@ var Publisher = {
       },
       mentionsAfter : function(visibleCursorIndex){
         var resultMentions = [];
-        for(i in this.mentions){
+        for(var i in this.mentions){
           var mention = this.mentions[i];
           if(visibleCursorIndex <= mention.visibleStart){
             resultMentions.push(mention);
           }
         }
         return resultMentions;
-      },
+      }
     },
     repopulateHiddenInput: function(){
       var newHiddenVal = Publisher.autocompletion.mentionList.generateHiddenInput(Publisher.input().val());
@@ -207,8 +200,8 @@ var Publisher = {
       var input = Publisher.input();
       var selectionStart = input[0].selectionStart;
       var selectionEnd = input[0].selectionEnd;
-      var isDeletion = (event.keyCode == KEYCODES.DEL && selectionStart < input.val().length) || (event.keyCode == KEYCODES.BACKSPACE && (selectionStart > 0 || selectionStart != selectionEnd))
-      var isInsertion = (KEYCODES.isInsertion(event.keyCode) && event.keyCode != KEYCODES.RETURN )
+      var isDeletion = (event.keyCode == KEYCODES.DEL && selectionStart < input.val().length) || (event.keyCode == KEYCODES.BACKSPACE && (selectionStart > 0 || selectionStart != selectionEnd));
+      var isInsertion = (KEYCODES.isInsertion(event.keyCode) && event.keyCode != KEYCODES.RETURN );
 
       if(isDeletion){
         Publisher.autocompletion.mentionList.deletionAt(selectionStart, selectionEnd, event.keyCode);
@@ -226,15 +219,15 @@ var Publisher = {
       var stringEnd = inputContent.slice(stringLoc[1]);
 
       input.val(stringStart + formatted + stringEnd);
-      var offset = formatted.length - (stringLoc[1] - stringLoc[0])
+      var offset = formatted.length - (stringLoc[1] - stringLoc[0]);
       Publisher.autocompletion.mentionList.updateMentionLocations(stringStart.length, offset);
-      return [stringStart.length, stringStart.length + formatted.length]
+      return [stringStart.length, stringStart.length + formatted.length];
     },
 
     findStringToReplace: function(value, cursorIndex){
       var atLocation = value.lastIndexOf('@', cursorIndex);
       if(atLocation == -1){return [0,0];}
-      var nextAt = cursorIndex
+      var nextAt = cursorIndex;
 
       if(nextAt == -1){nextAt = value.length;}
       return [atLocation, nextAt];
@@ -247,7 +240,7 @@ var Publisher = {
       if(stringLoc[0] <= 2){
         stringLoc[0] = 0;
       }else{
-        stringLoc[0] -= 2
+        stringLoc[0] -= 2;
       }
 
       var relevantString = value.slice(stringLoc[0], stringLoc[1]).replace(/\s+$/,"");
@@ -270,9 +263,9 @@ var Publisher = {
     }
   },
   determineSubmitAvailability: function(){
-    var onlyWhitespaces = (Publisher.input().val().trim() == '');
+    var onlyWhitespaces = (Publisher.input().val().trim() === '');
     var isSubmitDisabled = Publisher.submit().attr('disabled');
-    var isPhotoAttached = ($("#photodropzone").children().length > 0)
+    var isPhotoAttached = ($("#photodropzone").children().length > 0);
     if ((onlyWhitespaces &&  !isPhotoAttached) && !isSubmitDisabled) {
       Publisher.submit().attr('disabled', true);
     } else if ((!onlyWhitespaces || isPhotoAttached) && isSubmitDisabled) {
@@ -295,40 +288,40 @@ var Publisher = {
       $(this).toggleClass("dim");
       var public_field= $("#publisher #status_message_public");
 
-      (public_field.val() == 'false')?(public_field.val('true')):(public_field.val('false'));
+      (public_field.val() == 'false') ? (public_field.val('true')) : (public_field.val('false'));
     });
   },
   toggleServiceField: function(service){
     Publisher.createCounter(service);
 
     var provider = service.attr('id');
-    var hidden_field = $('#publisher [name="services[]"][value="'+provider+'"]')
+    var hidden_field = $('#publisher [name="services[]"][value="'+provider+'"]');
     if(hidden_field.length > 0){
       hidden_field.remove();
     } else {
       $("#publisher .content_creation form").append(
       '<input id="services_" name="services[]" type="hidden" value="'+provider+'">');
-    };
+    }
   },
   toggleAspectIds: function(aspectId) {
-    var hidden_field = $('#publisher [name="aspect_ids[]"][value="'+aspectId+'"]')
+    var hidden_field = $('#publisher [name="aspect_ids[]"][value="'+aspectId+'"]');
     if(hidden_field.length > 0){
       hidden_field.remove();
     } else {
       $("#publisher .content_creation form").append(
       '<input id="aspect_ids_" name="aspect_ids[]" type="hidden" value="'+aspectId+'">');
-    };
+    }
   },
   createCounter: function(service){
     var counter = $("#publisher .counter");
     counter.remove();
-    
+
     var min = 40000;
     var a = $('.service_icon:not(.dim)');
     if(a.length > 0){
       $.each(a, function(index, value){
         var num = parseInt($(value).attr('maxchar'));
-        if (min > num) { min = num}
+        if (min > num) { min = num; }
       });
       $('#status_message_fake_text').charCount({allowed: min, warning: min/10 });
     }
@@ -338,26 +331,24 @@ var Publisher = {
     $('#publisher .aspect_badge').bind("click", function(){
       var unremovedAspects = $(this).parent().children('.aspect_badge').length - $(this).parent().children(".aspect_badge.removed").length;
       if(!$(this).hasClass('removed') && ( unremovedAspects == 1 )){
-        alert(Diaspora.widgets.i18n.t('publisher.at_least_one_aspect'))
+        alert(Diaspora.widgets.i18n.t('publisher.at_least_one_aspect'));
       }else{
         Publisher.toggleAspectIds($(this).children('a').attr('data-guid'));
         $(this).toggleClass("removed");
-      };
+      }
     });
   },
   initialize: function() {
-    Publisher.cachedForm = false;
-    Publisher.cachedInput = false;
-    Publisher.cachedHiddenInput = false;
-    Publisher.cachedSubmit = false;
+    Publisher.cachedForm = Publisher.cachedSubmit =
+      Publisher.cachedInput = Publisher.cachedHiddenInput = false;
 
     Publisher.bindServiceIcons();
     Publisher.bindPublicIcon();
     Publisher.bindAspectToggles();
 
-    if ($("#status_message_fake_text").val() == "") {
+    if ($("#status_message_fake_text").val() === "") {
       Publisher.close();
-    };
+    }
 
     Publisher.autocompletion.initialize();
     Publisher.hiddenInput().val(Publisher.input().val());
@@ -371,4 +362,5 @@ var Publisher = {
 
 $(document).ready(function() {
   Publisher.initialize();
+  Diaspora.widgets.subscribe("stream/reloaded", Publisher.initialize);
 });
diff --git a/public/javascripts/stream.js b/public/javascripts/stream.js
index e5f3b5e379b7aa03e4fd7d60fdd95ffb98fe0236..646365a91b6ac99e0681955969564da96da1c05d 100644
--- a/public/javascripts/stream.js
+++ b/public/javascripts/stream.js
@@ -5,24 +5,27 @@
 
 var Stream = {
   initialize: function() {
-    var $stream = $(".stream");
-    var $publisher = $("#publisher");
+    var stream_string = '#main_stream';
+    var $stream = $(stream_string);
 
     $(".status_message_delete").tipsy({trigger: 'hover', gravity: 'n'});
 
+    Diaspora.widgets.subscribe("stream/reloaded", Stream.initialized);
     Diaspora.widgets.timeago.updateTimeAgo();
     Diaspora.widgets.directionDetector.updateBinds();
-    $stream.not(".show").delegate("a.show_post_comments", "click", Stream.toggleComments);
+
+
+    $(stream_string + " a.show_post_comments:not(.show)").live("click", Stream.toggleComments);
     //audio linx
     Stream.setUpAudioLinks();
     //Stream.setUpImageLinks();
 
     // comment link form focus
-    $stream.delegate(".focus_comment_textarea", "click", function(e){
+    $(stream_string + " .focus_comment_textarea").live("click", function(e){
       Stream.focusNewComment($(this), e);
     });
 
-    $stream.delegate("textarea.comment_box", "focus", function(evt) {
+    $(stream_string + " textarea.comment_box").live("focus", function(evt) {
       var commentBox = $(this);
       commentBox
         .attr('rows',2)
@@ -30,7 +33,7 @@ var Stream = {
           .addClass('open');
     });
 
-    $stream.delegate("textarea.comment_box", "blur", function(evt) {
+    $(stream_string + " textarea.comment_box").live("blur", function(evt) {
       var commentBox = $(this);
       if (!commentBox.val()) {
         commentBox
@@ -42,18 +45,18 @@ var Stream = {
     });
 
     // like/dislike
-    $stream.delegate("a.expand_likes", "click", function(evt) {
+    $(stream_string + " a.expand_likes").live("click", function(evt) {
       evt.preventDefault();
       $(this).siblings('.likes_list').fadeToggle('fast');
     });
 
-    $stream.delegate("a.expand_dislikes", "click", function(evt) {
+    $(stream_string + " a.expand_dislikes").live("click", function(evt) {
       evt.preventDefault();
       $(this).siblings('.dislikes_list').fadeToggle('fast');
     });
 
     // reshare button action
-    $stream.delegate(".reshare_button", "click", function(evt) {
+    $(stream_string + ' .reshare_button').live("click", function(evt) {
       evt.preventDefault();
       var button = $(this);
       var box = button.siblings(".reshare_box");
@@ -77,24 +80,24 @@ var Stream = {
       Stream.setUpAudioLinks();
     });
 
-    $(".new_status_message").bind('ajax:failure', function(data, html , xhr) {
-      json = $.parseJSON(html.response);
-      if(json.errors.length != 0){
+    $(".new_status_message").live('ajax:failure', function(data, html , xhr) {
+      json = $.parseJSON(html.responseText);
+      if(json.errors.length !== 0){
         Diaspora.widgets.alert.alert(json.errors);
       }else{
         Diaspora.widgets.alert.alert('Failed to post message!');
       }
     });
 
-    $(".new_comment").live('ajax:success', function(data, json, xhr) {
+    $(stream_string + " .new_comment").live('ajax:success', function(data, json, xhr) {
       json = $.parseJSON(json);
       WebSocketReceiver.processComment(json.post_id, json.comment_id, json.html, false);
     });
-    $(".new_comment").live('ajax:failure', function(data, html, xhr) {
+    $(stream_string + ".new_comment").live('ajax:failure', function(data, html, xhr) {
       Diaspora.widgets.alert.alert('Failed to post message!');
     });
 
-    $(".stream").find(".comment_delete", ".comment").live('ajax:success', function(data, html, xhr) {
+    $stream.find(".comment_delete", ".comment").live('ajax:success', function(data, html, xhr) {
       var element = $(this),
           target = element.parents(".comment"),
           post = element.closest('.stream_element'),
@@ -183,7 +186,7 @@ var Stream = {
       commentBlock.removeClass('hidden');
       commentBlock.find('textarea').focus();
     } else {
-      if(!(commentBlock.children().length > 1)){
+      if(commentBlock.children().length <= 1){
         commentBlock.addClass('hidden');
       } else {
         commentBlock.find('textarea').focus();
diff --git a/public/javascripts/vendor/jquery.infinitescroll.min.js b/public/javascripts/vendor/jquery.infinitescroll.min.js
index c092afa69b756c12ccc828d480d4b3af0798b26d..5249dec6c90fbe5ee8eac9b5cb9b212e0f021ee8 100644
--- a/public/javascripts/vendor/jquery.infinitescroll.min.js
+++ b/public/javascripts/vendor/jquery.infinitescroll.min.js
@@ -1,9 +1,8 @@
 /*!
 // Infinite Scroll jQuery plugin
 // copyright Paul Irish, licensed GPL & MIT
-// version 1.5.101207
+// version 2.0b1.110420
 
 // home and docs: http://www.infinite-scroll.com
 */
-(function($){$.fn.infinitescroll=function(options,callback){function debug(){if(opts.debug){window.console&&console.log.call(console,arguments)}}function areSelectorsValid(opts){for(var key in opts){if(key.indexOf&&key.indexOf("Selector")>-1&&$(opts[key]).length===0){debug("Your "+key+" found no elements.");return false}return true}}function determinePath(path){if(path.match(/^(.*?)\b2\b(.*?$)/)){path=path.match(/^(.*?)\b2\b(.*?$)/).slice(1)}else{if(path.match(/^(.*?)2(.*?$)/)){if(path.match(/^(.*?page=)2(\/.*|$)/)){path=path.match(/^(.*?page=)2(\/.*|$)/).slice(1);return path}debug("Trying backup next selector parse technique. Treacherous waters here, matey.");path=path.match(/^(.*?)2(.*?$)/).slice(1)}else{if(path.match(/^(.*?page=)1(\/.*|$)/)){path=path.match(/^(.*?page=)1(\/.*|$)/).slice(1);return path}if($.isFunction(opts.pathParse)){return[path]}else{debug("Sorry, we couldn't parse your Next (Previous Posts) URL. Verify your the css selector points to the correct A tag. If you still get this error: yell, scream, and kindly ask for help at infinite-scroll.com.");props.isInvalidPage=true}}}return path}function filterNav(){opts.isFiltered=true;return $(window).trigger("error.infscr."+opts.infid,[302])}function isNearBottom(){var pixelsFromWindowBottomToBottom=0+$(document).height()-($(props.container).scrollTop()||$(props.container.ownerDocument.body).scrollTop())-$(window).height();debug("math:",pixelsFromWindowBottomToBottom,props.pixelsFromNavToBottom);return(pixelsFromWindowBottomToBottom-opts.bufferPx<props.pixelsFromNavToBottom)}function showDoneMsg(){props.loadingMsg.find("img").hide().parent().find("div").html(opts.donetext).animate({opacity:1},2000,function(){$(this).parent().fadeOut("normal")});opts.errorCallback()}function infscrSetup(){if(opts.isDuringAjax||opts.isInvalidPage||opts.isDone||opts.isFiltered||opts.isPaused){return}if(!isNearBottom(opts,props)){return}$(document).trigger("retrieve.infscr."+opts.infid)}function kickOffAjax(){opts.isDuringAjax=true;props.loadingMsg.appendTo(opts.loadMsgSelector).show(opts.loadingMsgRevealSpeed,function(){$(opts.navSelector).hide();opts.currPage++;debug("heading into ajax",path);box=$(opts.contentSelector).is("table")?$("<tbody/>"):$("<div/>");frag=document.createDocumentFragment();if($.isFunction(opts.pathParse)){desturl=opts.pathParse(path.join("2"),opts.currPage)}else{desturl=path.join(opts.currPage)}box.load(desturl+" "+opts.itemSelector,null,loadCallback)})}function loadCallback(){if(opts.isDone){showDoneMsg();return false}else{var children=box.children();if(children.length==0||children.hasClass("error404")){return $(window).trigger("error.infscr."+opts.infid,[404])}while(box[0].firstChild){frag.appendChild(box[0].firstChild)}$(opts.contentSelector)[0].appendChild(frag);props.loadingMsg.fadeOut("normal");if(opts.animate){var scrollTo=$(window).scrollTop()+$("#infscr-loading").height()+opts.extraScrollPx+"px";$("html,body").animate({scrollTop:scrollTo},800,function(){opts.isDuringAjax=false})}callback.call($(opts.contentSelector)[0],children.get());if(!opts.animate){opts.isDuringAjax=false}}}function initPause(pauseValue){if(pauseValue=="pause"){opts.isPaused=true}else{if(pauseValue=="resume"){opts.isPaused=false}else{opts.isPaused=!opts.isPaused}}debug("Paused: "+opts.isPaused);return false}function infscrError(xhr){if(!opts.isDone&&xhr==404){debug("Page not found. Self-destructing...");showDoneMsg();opts.isDone=true;opts.currPage=1;$(window).unbind("scroll.infscr."+opts.infid);$(document).unbind("retrieve.infscr."+opts.infid)}if(opts.isFiltered&&xhr==302){debug("Filtered. Going to next instance...");opts.isDone=true;opts.currPage=1;opts.isPaused=false;$(window).unbind("scroll.infscr."+opts.infid,infscrSetup).unbind("pause.infscr."+opts.infid).unbind("filter.infscr."+opts.infid).unbind("error.infscr."+opts.infid);$(document).unbind("retrieve.infscr."+opts.infid,kickOffAjax)}}$.browser.ie6=$.browser.msie&&$.browser.version<7;var opts=$.extend({},$.infinitescroll.defaults,options),props=$.infinitescroll,box,frag,desturl,thisPause,errorStatus;callback=callback||function(){};if(!areSelectorsValid(opts)){return false}props.container=document.documentElement;opts.contentSelector=opts.contentSelector||this;opts.loadMsgSelector=opts.loadMsgSelector||opts.contentSelector;var relurl=/(.*?\/\/).*?(\/.*)/,path=$(opts.nextSelector).attr("href");if(!path){debug("Navigation selector not found");return}path=determinePath(path);props.pixelsFromNavToBottom=$(document).height()+(props.container==document.documentElement?0:$(props.container).offset().top)-$(opts.navSelector).offset().top;props.loadingMsg=$('<div id="infscr-loading" style="text-align: center;"><img alt="Loading..." src="'+opts.loadingImg+'" /><div>'+opts.loadingText+"</div></div>");(new Image()).src=opts.loadingImg;$(window).bind("scroll.infscr."+opts.infid,infscrSetup).bind("filter.infscr."+opts.infid,filterNav).bind("error.infscr."+opts.infid,function(event,errorStatus){infscrError(errorStatus)}).bind("pause.infscr."+opts.infid,function(event,thisPause){initPause(thisPause)}).trigger("scroll.infscr."+opts.infid);$(document).bind("retrieve.infscr."+opts.infid,kickOffAjax);return this};$.infinitescroll={defaults:{debug:false,preload:false,nextSelector:"div.navigation a:first",loadingImg:"http://www.infinite-scroll.com/loading.gif",loadingText:"<em>Loading the next set of posts...</em>",donetext:"<em>Congratulations, you've reached the end of the internet.</em>",navSelector:"div.navigation",contentSelector:null,loadMsgSelector:null,loadingMsgRevealSpeed:"fast",extraScrollPx:150,itemSelector:"div.post",animate:false,pathParse:undefined,bufferPx:40,errorCallback:function(){},infid:1,currPage:1,isDuringAjax:false,isInvalidPage:false,isFiltered:false,isDone:false,isPaused:false},loadingImg:undefined,loadingMsg:undefined,container:undefined,currDOMChunk:null}})(jQuery);
-
+(function($){$.fn.infinitescroll=function infscr(options,callback){function areSelectorsValid(opts){var debug=$.fn.infinitescroll._debug;for(var key in opts){if(key.indexOf&&key.indexOf("Selector")>-1&&$(opts[key]).length===0){debug("Your "+key+" found no elements.");return false}return true}}function determinePath(path){if($.isFunction(opts.pathParse)){debug("pathParse");return[path]}else{if(path.match(/^(.*?)\b2\b(.*?$)/)){path=path.match(/^(.*?)\b2\b(.*?$)/).slice(1)}else{if(path.match(/^(.*?)2(.*?$)/)){if(path.match(/^(.*?page=)2(\/.*|$)/)){path=path.match(/^(.*?page=)2(\/.*|$)/).slice(1);return path}path=path.match(/^(.*?)2(.*?$)/).slice(1)}else{if(path.match(/^(.*?page=)1(\/.*|$)/)){path=path.match(/^(.*?page=)1(\/.*|$)/).slice(1);return path}else{debug("Sorry, we couldn't parse your Next (Previous Posts) URL. Verify your the css selector points to the correct A tag. If you still get this error: yell, scream, and kindly ask for help at infinite-scroll.com.");props.isInvalidPage=true}}}}debug("determinePath",path);return path}function hiddenHeight(element){var height=0;$(element).children().each(function(){height=height+$(this).outerHeight(false)});return height}function generateInstanceID(element){var number=$(element).length+$(element).html().length+$(element).attr("class").length+$(element).attr("id").length;opts.infid=number}if(typeof options=="string"){var command=options,argument=callback,validCommand=(command=="pause"||command=="destroy"||command=="retrieve"||command=="binding"),debug=$.fn.infinitescroll._debug;argument=argument||null;command=(validCommand)?$.fn.infinitescroll[command](argument):debug("Invalid command");return false}var opts=$.infinitescroll.opts=$.extend({},$.infinitescroll.defaults,options),props=$.infinitescroll,innerContainerHeight,box,frag,desturl,pause,error,errorStatus,method,result;callback=$.fn.infinitescroll._callback=callback||function(){},debug=$.fn.infinitescroll._debug,error=$.fn.infinitescroll._error,pause=$.fn.infinitescroll.pause,destroy=$.fn.infinitescroll.destroy,binding=$.fn.infinitescroll.binding;if(!areSelectorsValid(opts)){return false}opts.container=opts.container||document.documentElement;opts.contentSelector=opts.contentSelector||this;opts.infid=(opts.infid==0)?generateInstanceID(opts.contentSelector):opts.infid;opts.loadMsgSelector=opts.loadMsgSelector||opts.contentSelector;var relurl=/(.*?\/\/).*?(\/.*)/,path=$(opts.nextSelector).attr("href");if(!path){debug("Navigation selector not found");return}opts.path=determinePath(path);props.loadingMsg=$('<div id="infscr-loading" style="text-align: center;"><img alt="Loading..." src="'+opts.loadingImg+'" /><div>'+opts.loadingText+"</div></div>");(new Image()).src=opts.loadingImg;opts.binder=(opts.container.nodeName=="HTML")?$(window):$(opts.container);innerContainerHeight=(opts.container.nodeName=="HTML")?$(document).height():innerContainerHeight=hiddenHeight(opts.container);debug("Scrolling in: ",(opts.container.nodeName=="HTML")?"window":opts.container);opts.pixelsFromNavToBottom=innerContainerHeight+(opts.container==document.documentElement?0:$(opts.container).offset().top)-$(opts.navSelector).offset().top;binding("bind");opts.binder.trigger("smartscroll.infscr."+opts.infid);return this};$.infinitescroll={defaults:{debug:false,binder:$(window),preload:false,nextSelector:"div.navigation a:first",loadingImg:"http://www.infinite-scroll.com/loading.gif",loadingText:"<em>Loading the next set of posts...</em>",donetext:"<em>Congratulations, you've reached the end of the internet.</em>",navSelector:"div.navigation",contentSelector:null,loadMsgSelector:null,loadingMsgRevealSpeed:"fast",extraScrollPx:150,itemSelector:"div.post",animate:false,pathParse:undefined,dataType:"html",appendCallback:true,bufferPx:40,orientation:"height",errorCallback:function(){},currPage:1,infid:0,isDuringAjax:false,isInvalidPage:false,isDestroyed:false,isDone:false,isPaused:false,container:undefined,pixelsFromNavToBottom:undefined,path:undefined},loadingImg:undefined,loadingMsg:undefined,currDOMChunk:null};$.fn.infinitescroll._debug=function infscr_debug(){if($.infinitescroll.opts.debug){return window.console&&console.log.call(console,arguments)}};$.fn.infinitescroll._shorthand=function infscr_shorthand(){};$.fn.infinitescroll._nearbottom=function infscr_nearbottom(){var opts=$.infinitescroll.opts,debug=$.fn.infinitescroll._debug,hiddenHeight=$.fn.infinitescroll._hiddenheight;if(opts.container.nodeName=="HTML"){var pixelsFromWindowBottomToBottom=0+$(document).height()-($(opts.container).scrollTop()||$(opts.container.ownerDocument.body).scrollTop())-$(window).height()}else{var pixelsFromWindowBottomToBottom=0+hiddenHeight(opts.container)-$(opts.container).scrollTop()-$(opts.container).height()}debug("math:",pixelsFromWindowBottomToBottom,opts.pixelsFromNavToBottom);return(pixelsFromWindowBottomToBottom-opts.bufferPx<opts.pixelsFromNavToBottom)};$.fn.infinitescroll._setup=function infscr_setup(){var props=$.infinitescroll,opts=$.infinitescroll.opts,isNearBottom=$.fn.infinitescroll._nearbottom,kickOffAjax=$.fn.infinitescroll.retrieve;if(opts.isDuringAjax||opts.isInvalidPage||opts.isDone||opts.isDestroyed||opts.isPaused){return}if(!isNearBottom(opts,props)){return}kickOffAjax()};$.fn.infinitescroll.retrieve=function infscr_retrieve(){var props=$.infinitescroll,opts=props.opts,debug=$.fn.infinitescroll._debug,loadCallback=$.fn.infinitescroll._loadcallback,error=$.fn.infinitescroll._error,path=opts.path,box,frag,desturl,method,condition;opts.isDuringAjax=true;props.loadingMsg.appendTo(opts.loadMsgSelector).show(opts.loadingMsgRevealSpeed,function(){$(opts.navSelector).hide();opts.currPage++;debug("heading into ajax",path);box=$(opts.contentSelector).is("table")?$("<tbody/>"):$("<div/>");desturl=($.isFunction(opts.pathParse))?opts.pathParse(path.join("2"),opts.currPage):desturl=path.join(opts.currPage);method=(opts.dataType=="html"||opts.dataType=="json")?opts.dataType:"html+callback";if(opts.appendCallback&&opts.dataType=="html"){method+="+callback"}switch(method){case"html+callback":debug("Using HTML via .load() method");box.load(desturl+" "+opts.itemSelector,null,function(jqXHR,textStatus){loadCallback(box,jqXHR.responseText)});break;case"html":case"json":debug("Using "+(method.toUpperCase())+" via $.ajax() method");$.ajax({url:desturl,dataType:opts.dataType,complete:function _infscrAjax(jqXHR,textStatus){condition=(typeof(jqXHR.isResolved)!=="undefined")?(jqXHR.isResolved()):(textStatus==="success"||textStatus==="notmodified");(condition)?loadCallback(box,jqXHR.responseText):error([404])}});break}})};$.fn.infinitescroll._loadcallback=function infscr_loadcallback(box,data){var props=$.infinitescroll,opts=$.infinitescroll.opts,error=$.fn.infinitescroll._error,showDoneMsg=$.fn.infinitescroll._donemsg,callback=$.fn.infinitescroll._callback,result,frag;result=(opts.isDone)?"done":(!opts.appendCallback)?"no-append":"append";switch(result){case"done":showDoneMsg();return false;break;case"no-append":if(opts.dataType=="html"){data="<div>"+data+"</div>";data=$(data).find(opts.itemSelector)}break;case"append":var children=box.children();if(children.length==0||children.hasClass("error404")){return error([404])}frag=document.createDocumentFragment();while(box[0].firstChild){frag.appendChild(box[0].firstChild)}$(opts.contentSelector)[0].appendChild(frag);data=children.get();break}props.loadingMsg.fadeOut("normal");if(opts.animate){var scrollTo=$(window).scrollTop()+$("#infscr-loading").height()+opts.extraScrollPx+"px";$("html,body").animate({scrollTop:scrollTo},800,function(){opts.isDuringAjax=false})}if(!opts.animate){opts.isDuringAjax=false}callback.call($(opts.contentSelector)[0],data)};$.fn.infinitescroll._donemsg=function infscr_donemsg(){var props=$.infinitescroll,opts=$.infinitescroll.opts;props.loadingMsg.find("img").hide().parent().find("div").html(opts.donetext).animate({opacity:1},2000,function(){$(this).parent().fadeOut("normal")});opts.errorCallback()};$.fn.infinitescroll.pause=function infscr_pause(pause){var debug=$.fn.infinitescroll._debug,opts=$.infinitescroll.opts;if(pause!=="pause"&&pause!=="resume"&&pause!=="toggle"&&pause!==null){debug("Invalid argument. Toggling pause value instead")}pause=(pause&&(pause=="pause"||pause=="resume"))?pause:"toggle";switch(pause){case"pause":opts.isPaused=true;break;case"resume":opts.isPaused=false;break;case"toggle":opts.isPaused=!opts.isPaused;break}debug("Paused",opts.isPaused);return false};$.fn.infinitescroll._error=function infscr_error(xhr){var opts=$.infinitescroll.opts,binder=(opts.container.nodeName=="HTML")?$(window):$(opts.container),debug=$.fn.infinitescroll._debug,showDoneMsg=$.fn.infinitescroll._donemsg,error=(!opts.isDone&&xhr==404)?"end":(opts.isDestroyed&&xhr==302)?"destroy":"unknown";switch(error){case"end":debug("Page not found. Self-destructing...");showDoneMsg();opts.isDone=true;opts.currPage=1;opts.isPaused=false;binder.unbind("smartscroll.infscr."+opts.infid);break;case"destroy":debug("Destroyed. Going to next instance...");opts.isDone=true;opts.currPage=1;opts.isPaused=false;binder.unbind("smartscroll.infscr."+opts.infid);break;case"unknown":debug("Unknown Error. WHAT DID YOU DO?!...");showDoneMsg();opts.isDone=true;opts.currPage=1;binder.unbind("smartscroll.infscr."+opts.infid);break}};$.fn.infinitescroll.destroy=function infscr_destroy(){var opts=$.infinitescroll.opts,error=$.fn.infinitescroll._error;opts.isDestroyed=true;return error([302])};$.fn.infinitescroll.binding=function infscr_binding(binding){var opts=$.infinitescroll.opts,setup=$.fn.infinitescroll._setup,error=$.fn.infinitescroll._error,debug=$.fn.infinitescroll._debug;switch(binding){case"bind":opts.binder.bind("smartscroll.infscr."+opts.infid,setup);break;case"unbind":opts.binder.unbind("smartscroll.infscr."+opts.infid);break}debug("Binding",binding);return false};var event=$.event,scrollTimeout;event.special.smartscroll={setup:function(){$(this).bind("scroll",event.special.smartscroll.handler)},teardown:function(){$(this).unbind("scroll",event.special.smartscroll.handler)},handler:function(event,execAsap){var context=this,args=arguments;event.type="smartscroll";if(scrollTimeout){clearTimeout(scrollTimeout)}scrollTimeout=setTimeout(function(){jQuery.event.handle.apply(context,args)},execAsap==="execAsap"?0:100)}};$.fn.smartscroll=function(fn){return fn?this.bind("smartscroll",fn):this.trigger("smartscroll",["execAsap"])}})(jQuery);
\ No newline at end of file
diff --git a/public/javascripts/view.js b/public/javascripts/view.js
index 47cc08724e505ef60e84656bbf6f1d8103196b99..dfbfcf6a4bd23d81686372193cbd496d74c0c8da 100644
--- a/public/javascripts/view.js
+++ b/public/javascripts/view.js
@@ -18,7 +18,8 @@ var View = {
     $(document).bind('afterReveal.facebox', function() {
       jQuery("#facebox label").inFieldLabels();
     });
-    InfiniteScroll.postScroll(function(){
+
+    Diaspora.widgets.subscribe("stream/scrolled", function() {
       $('#main_stream .comments label').inFieldLabels();
     });
 
diff --git a/public/javascripts/web-socket-receiver.js b/public/javascripts/web-socket-receiver.js
index 5b39cc4151647fa97360954dee73ee9fc48245ad..c0bfdc578474728ba73c4489b02344697ee18170 100644
--- a/public/javascripts/web-socket-receiver.js
+++ b/public/javascripts/web-socket-receiver.js
@@ -6,6 +6,12 @@ var WebSocketReceiver = {
     //Attach onmessage to websocket
     ws.onmessage = WSR.onMessage;
     ws.onclose = function() {
+      Diaspora.widgets.notifications.showNotification({
+        html: '<div class="notification">' +
+          Diaspora.widgets.i18n.t("web_sockets.disconnected") +
+          '</div>'
+      });
+
       WSR.debug("socket closed");
     };
     ws.onopen = function() {
@@ -37,7 +43,7 @@ var WebSocketReceiver = {
           });
 
         } else if (obj['class']=="likes") {
-          WebSocketReceiver.processLike(obj.post_id, obj.html)
+          WebSocketReceiver.processLike(obj.post_id, obj.html);
 
         } else {
           WebSocketReceiver.processPost(obj['class'], obj.post_id, obj.html, obj.aspect_ids);
@@ -55,7 +61,7 @@ var WebSocketReceiver = {
     } else {
       $('#people_stream').prepend(response.html).slideDown('slow', function(){});
       var first_li = result_ul.find('li:first');
-      first_li.hide()
+      first_li.hide();
       first_li.after(response.html);
       result_ul.find("[name='request[into]']").val(result_ul.attr('aspect_id'));
       result_ul.children(':nth-child(2)').slideDown('fast', function(){});
@@ -64,36 +70,21 @@ var WebSocketReceiver = {
 
 
   processNotification: function(notification){
-    var nBadge = $("#notification_badge div.badge_count");
-
-    nBadge.html().replace(/\d+/, function(num){
-      nBadge.html(parseInt(num)+1);
-    });
-
-    if(nBadge.hasClass("hidden")){
-      nBadge.removeClass("hidden");
-    }
-
-    $('#notification').html(notification['html'])
-      .fadeIn(200)
-      .delay(8000)
-      .fadeOut(200, function(){
-        $(this).html("");
-      });
+    Diaspora.widgets.notifications.showNotification(notification);
   },
 
   processRetraction: function(post_id){
     $("*[data-guid='" + post_id + "']").fadeOut(400, function() {
       $(this).remove();
     });
-    if($("#main_stream")[0].childElementCount == 0) {
+    if($("#main_stream")[0].childElementCount === 0) {
       $("#no_posts").fadeIn(200);
     }
   },
 
   processComment: function(postId, commentId, html, opts) {
 
-    if( $(".comment[data-guid='"+commentId+"']").length == 0 ) {
+    if( $(".comment[data-guid='"+commentId+"']").length === 0 ) {
 
       var post = $("*[data-guid='"+postId+"']'"),
           prevComments = $('.comment.posted', post);
@@ -141,7 +132,7 @@ var WebSocketReceiver = {
   },
 
   addPostToStream: function(postId, html) {
-    if( $(".stream_element[data-guid='" + postId + "']").length == 0 ) {
+    if( $(".stream_element[data-guid='" + postId + "']").length === 0 ) {
       var streamElement = $(html);
 
       var showMessage = function() {
@@ -174,7 +165,7 @@ var WebSocketReceiver = {
       if(WebSocketReceiver.onStreamForAspect(value, streamIds)) {
         found = true;
         return false;
-      };
+      }
     });
     return found;
   },
@@ -185,7 +176,7 @@ var WebSocketReceiver = {
 
   onPageOne: function() {
       var c = document.location.search.charAt(document.location.search.length-1);
-      return ((c =='') || (c== '1'));
+      return ((c === '') || (c === '1'));
   },
   debug: function(str) {
     $("#debug").append("<p>" +  str);
diff --git a/public/javascripts/widgets/alert.js b/public/javascripts/widgets/alert.js
index eeb359a5f4ef36aed9dac4bf36a9aac7a6834b46..9dcf8ed4cfd6eb22eae21f79ac1c306503cf8505 100644
--- a/public/javascripts/widgets/alert.js
+++ b/public/javascripts/widgets/alert.js
@@ -29,6 +29,6 @@ Diaspora.widgets.add("alert", function() {
 
     $.facebox({
       div: "#diaspora_alert"
-    });
+    }, 'diaspora_alert');
   }
-});
\ No newline at end of file
+});
diff --git a/public/javascripts/widgets/directionDetector.js b/public/javascripts/widgets/directionDetector.js
index e6aeafee438a969d7a9c4bc9b90de2f789e6b53b..257b5cee78ddd6bd1da9023e66c40bbc6d8ab721 100644
--- a/public/javascripts/widgets/directionDetector.js
+++ b/public/javascripts/widgets/directionDetector.js
@@ -8,9 +8,10 @@ Diaspora.widgets.add("directionDetector", function() {
 
   this.start = function() {
     Diaspora.widgets.directionDetector.updateBinds();
-    InfiniteScroll.postScrollCallback = function() {
+    
+    Diaspora.widgets.subscribe("stream/scrolled", function() {
       Diaspora.widgets.directionDetector.updateBinds();
-    }
+    });
   };
 
   this.isRTL = function(str) {
@@ -41,7 +42,7 @@ Diaspora.widgets.add("directionDetector", function() {
   this.cleaner = new RegExp('@[^ ]+|^RT[: ]{1}| RT | RT: |[♺♻:]+', 'g');
 
   this.binds = [];
-  
+
   this.updateBinds = function() {
     $.each(Diaspora.widgets.directionDetector.binds, function(i, v) {v.unbind('keyup', Diaspora.widgets.directionDetector.updateDirection);});
     Diaspora.widgets.directionDetector.binds = [];
diff --git a/public/javascripts/widgets/embedder.js b/public/javascripts/widgets/embedder.js
index 99d1d84736798a7e63ddc0314a827bf057da5edb..1f2e4da506a0ac6acb909437f43b8357235d834f 100644
--- a/public/javascripts/widgets/embedder.js
+++ b/public/javascripts/widgets/embedder.js
@@ -52,7 +52,7 @@
   };
 
   Embedder.prototype.start = function() {
-    $(".stream").delegate("a.video-link", "click", this.onVideoLinkClicked);
+    $("#main_stream a.video-link").live("click", this.onVideoLinkClicked);
     this.registerServices();
 
     var $post = $("#main_stream").children(".stream_element:first"),
@@ -63,10 +63,10 @@
 
   Embedder.prototype.registerServices = function() {
     var watchVideoOn = Diaspora.widgets.i18n.t("videos.watch");
-    
+
     this.register("youtube.com",
-        '<a href="//www.youtube.com/watch?v={{video-id}}" target="_blank">' + $.mustache(watchVideoOn, { provider: "YouTube" }) + '</a><br />' +
-        '<iframe class="youtube-player" type="text/html" src="http://www.youtube.com/embed/{{video-id}}"></iframe>');
+        '<a href="//www.youtube.com/watch?v={{video-id}}{{anchor}}" target="_blank">' + $.mustache(watchVideoOn, { provider: "YouTube" }) + '</a><br />' +
+        '<iframe class="youtube-player" type="text/html" src="http://www.youtube.com/embed/{{video-id}}?wmode=opaque{{anchor}}"></iframe>');
 
     this.register("vimeo.com",
       '<a href="http://vimeo.com/{{video-id}}">' + $.mustache(watchVideoOn, { provider: "Vimeo" }) + '</a><br />' +
diff --git a/public/javascripts/widgets/i18n.js b/public/javascripts/widgets/i18n.js
index ade4fccbad6213d9226f7ab98ade0cdf0771c896..b3a259db536409b5451073e956b8589c5da3f067 100644
--- a/public/javascripts/widgets/i18n.js
+++ b/public/javascripts/widgets/i18n.js
@@ -1,15 +1,11 @@
-/**
- * Created by .
- * User: dan
- * Date: Jan 25, 2011
- * Time: 5:18:32 PM
- * To change this template use File | Settings | File Templates.
+/*   Copyright (c) 2010, Diaspora Inc.  This file is
+ *   licensed under the Affero General Public License version 3 or later.  See
+ *   the COPYRIGHT file.
  */
-Diaspora.widgets.add("i18n", function() {
-  this.start = $.noop;
 
+Diaspora.widgets.add("i18n", function() {
   this.language = "en";
-  this.locale = {};
+  this.locale = { };
 
   this.loadLocale = function(locale, language) {
     this.language = language;
@@ -33,4 +29,4 @@ Diaspora.widgets.add("i18n", function() {
     
     return ret;
   };
-});
\ No newline at end of file
+});
diff --git a/public/javascripts/widgets/infinite-scroll.js b/public/javascripts/widgets/infinite-scroll.js
new file mode 100644
index 0000000000000000000000000000000000000000..40cc149a9628c237b918d855b24b600ecaec4ebf
--- /dev/null
+++ b/public/javascripts/widgets/infinite-scroll.js
@@ -0,0 +1,49 @@
+/*   Copyright (c) 2010, Diaspora Inc.  This file is
+*   licensed under the Affero General Public License version 3 or later.  See
+*   the COPYRIGHT file.
+*/
+
+(function() {
+  var InfiniteScroll = function() { };
+  InfiniteScroll.prototype.options =
+    {
+      navSelector  : "#pagination",
+      nextSelector : ".paginate",
+      itemSelector : ".stream_element",
+      pathParse    : function( pathStr, nextPage ){
+        var newPath = pathStr.replace("?", "?only_posts=true&");
+        var last_time = $('#main_stream .stream_element').last().find('.time').attr('integer');
+        return newPath.replace( /max_time=\d+/, 'max_time=' + last_time);
+      },
+      bufferPx: 500,
+      debug: false,
+      donetext: Diaspora.widgets.i18n.t("infinite_scroll.no_more"),
+      loadingText: "",
+      loadingImg: '/images/ajax-loader.gif'
+    };
+
+  InfiniteScroll.prototype.reInitialize = function(){
+    this.clear();
+    this.initialize();
+  };
+
+  InfiniteScroll.prototype.initialize = function(){
+    if($('#main_stream').length !== 0){
+      $('#main_stream').infinitescroll(this.options, function() {
+        Diaspora.widgets.publish("stream/scrolled");
+      });
+    }
+  };
+
+  InfiniteScroll.prototype.start = function() {
+    Diaspora.widgets.subscribe("stream/reloaded", this.reInitialize, this);
+    this.initialize();
+  };
+
+  InfiniteScroll.prototype.clear = function() {
+    $('#main_stream').infinitescroll('destroy');
+  };
+
+  Diaspora.widgets.add("infinitescroll", InfiniteScroll);
+})();
+
diff --git a/public/javascripts/widgets/notifications.js b/public/javascripts/widgets/notifications.js
new file mode 100644
index 0000000000000000000000000000000000000000..0091720e363f8dab25de657d7b3807b512da8bbf
--- /dev/null
+++ b/public/javascripts/widgets/notifications.js
@@ -0,0 +1,69 @@
+/*   Copyright (c) 2010, Diaspora Inc.  This file is
+*   licensed under the Affero General Public License version 3 or later.  See
+*   the COPYRIGHT file.
+*/
+
+(function() {
+  var Notifications = function() {
+    this.start = function() {
+      var self = this;
+      this.badge = $("#notification_badge .badge_count, .notification_count");
+      this.notificationArea = $("#notifications");
+      this.count = parseInt(this.badge.html()) || 0;
+
+      $(".stream_element.unread").live("mousedown", function() {
+        self.decrementCount();
+
+        var notification = $(this);
+        notification.removeClass("unread");
+        
+        $.ajax({
+          url: "notifications/" + notification.data("guid"),
+          type: "PUT"
+        });
+      });
+
+      $("a.more").live("click", function(evt) {
+        evt.preventDefault();
+        $(this).hide()
+          .next(".hidden")
+          .removeClass("hidden");
+      });
+    };
+  };
+
+  Notifications.prototype.showNotification = function(notification) {    $(notification.html).prependTo(this.notificationArea)
+      .fadeIn(200)
+      .delay(8000)
+      .fadeOut(200, function() {
+        $(this).detach();
+      });
+
+    this.incrementCount();
+  };
+
+  Notifications.prototype.changeNotificationCount = function(change) {
+    this.count += change;
+
+    if(this.badge.text() !== "") {
+      this.badge.text(this.count);
+
+      if(this.count === 0) {
+        this.badge.addClass("hidden");
+      }
+      else if(this.count === 1) {
+        this.badge.removeClass("hidden");
+      }
+    }
+  };
+
+  Notifications.prototype.decrementCount = function() {
+    this.changeNotificationCount(-1);
+  };
+
+  Notifications.prototype.incrementCount = function() {
+    this.changeNotificationCount(1);
+  };
+
+  Diaspora.widgets.add("notifications", Notifications);
+})();
\ No newline at end of file
diff --git a/public/javascripts/widgets/timeago.js b/public/javascripts/widgets/timeago.js
index cd5ffca657243ec6a9d14eea6dc8222fb8c38981..c1647b9250a00b75130a9e798d55f77338c6de21 100644
--- a/public/javascripts/widgets/timeago.js
+++ b/public/javascripts/widgets/timeago.js
@@ -1,44 +1,22 @@
-/**
- * Created by .
- * User: dan
- * Date: Jan 25, 2011
- * Time: 8:49:02 PM
- * To change this template use File | Settings | File Templates.
+/*   Copyright (c) 2010, Diaspora Inc.  This file is
+ *   licensed under the Affero General Public License version 3 or later.  See
+ *   the COPYRIGHT file.
  */
+
 Diaspora.widgets.add("timeago", function() {
   this.selector = "abbr.timeago";
-
   this.start = function() {
-      InfiniteScroll.postScroll(function(){
-            Diaspora.widgets.timeago.updateTimeAgo();
-      });
-      if(Diaspora.widgets.i18n.language === "en") {
-        return;
-      }
-
-      jQuery.timeago.settings.strings = {
-        prefixAgo: Diaspora.widgets.i18n.t("timeago.prefixAgo"),
-        prefixFromNow: Diaspora.widgets.i18n.t("timeago.prefixFromNow"),
-        suffixAgo: Diaspora.widgets.i18n.t("timeago.suffixAgo"),
-        suffixFromNow: Diaspora.widgets.i18n.t("timeago.suffixFromNow"),
-        seconds: Diaspora.widgets.i18n.t("timeago.seconds"),
-        minute: Diaspora.widgets.i18n.t("timeago.minute"),
-        minutes: Diaspora.widgets.i18n.t("timeago.minutes"),
-        hour: Diaspora.widgets.i18n.t("timeago.hour"),
-        hours: Diaspora.widgets.i18n.t("timeago.hours"),
-        day: Diaspora.widgets.i18n.t("timeago.day"),
-        days: Diaspora.widgets.i18n.t("timeago.days"),
-        month: Diaspora.widgets.i18n.t("timeago.month"),
-        months: Diaspora.widgets.i18n.t("timeago.months"),
-        year: Diaspora.widgets.i18n.t("timeago.year"),
-        years: Diaspora.widgets.i18n.t("timeago.years")
-      };
-
-      Diaspora.widgets.timeago.updateTimeAgo("abbr");
+    Diaspora.widgets.subscribe("stream/scrolled", this.updateTimeAgo);
+    Diaspora.widgets.subscribe("stream/reloaded", this.updateTimeAgo);
 
+    if(Diaspora.widgets.i18n.language !== "en") {
+      $.each($.timeago.settings.strings, function(index, element) {
+        $.timeago.settings.strings[index] = Diaspora.widgets.i18n.t("timeago." + index);
+      });
+    }
   };
 
   this.updateTimeAgo = function(selector) {
-    $(selector || this.selector).timeago();
+    $((typeof selector === "string") ? selector : Diaspora.widgets.timeago.selector).timeago();
   };
 });
diff --git a/public/robots.txt b/public/robots.txt
index 8e1d4206363713cb3ed7028c0b299d58147852f4..7f28f424077cccae4b41e66a7dcabfa4b6e8c9a1 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -2,4 +2,4 @@
 #
 # To ban all spiders from the entire site uncomment the next two lines:
 User-Agent: *
-Disallow: /
+Disallow: /people/
diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass
index b60310af7fb9c3e59c16e2273b6334d8f3e052e6..789bb78cccdbb213817169822d88d430e2b63931 100644
--- a/public/stylesheets/sass/application.sass
+++ b/public/stylesheets/sass/application.sass
@@ -236,7 +236,10 @@ header
       :display block
 
 .unread
-  :background-color #eee
+  :font-weight bold
+  :color #333 !important
+  time
+    :color #333 !important
 
 .diaspora_header_logo
   :position relative
@@ -267,8 +270,6 @@ header
       :font
         :weight normal
         :size smaller
-      :position absolute
-      :right 20px
 
 .from
   a
@@ -779,7 +780,7 @@ textarea
   :height auto
 
 input[type='checkbox']
-  :width auto
+  :width auto !important
 
 input[type='hidden']
   :display none
@@ -1606,36 +1607,39 @@ ul.aspects
 h3 span.current_gs_step
   :color #22C910
 
-#notification
-  @include border-radius(5px)
-  @include box-shadow(0,2px,3px,#333)
-
+#notifications
   :z-index 10
-  :display none
   :position fixed
   :bottom 21px
   :right 12px
 
-  :background
-    :color rgb(30,30,30)
-    :color rgba(30,30,30,0.9)
+  .notification
+    @include border-radius(5px)
+    @include box-shadow(0,2px,3px,#333)
 
-  :min-width 200px
-  :padding 12px
-  :color #fff
+    :margin
+      :bottom 10px
 
-  :vertical
-    :align middle
+    :background
+      :color rgb(30,30,30)
+      :color rgba(30,30,30,0.9)
+
+    :min-width 200px
+    :padding 12px
+    :color #fff
 
-  .avatar
-    :display inline-block
-    :height 20px
-    :width 20px
-    :margin
-      :right 5px
     :vertical
       :align middle
 
+    .avatar
+      :display inline-block
+      :height 20px
+      :width 20px
+      :margin
+        :right 5px
+      :vertical
+        :align middle
+
 .bottom_notification
   :position fixed
   :bottom 0
@@ -1774,6 +1778,12 @@ ul#request_result
       :bottom 25px
     input.add
       :color green
+  .stream_element
+    .content
+      :display inline
+      :position relative
+      :bottom 2.5em
+      :padding 0
 
 .contact_list,
 .aspect_list
@@ -2252,6 +2262,14 @@ h3,h4
     :padding 0.2em 0.5em
     :width 500px
 
+.day_group
+  :min-height 100px
+  :margin
+    :bottom 10px
+  .stream_element
+    &:last-child
+      :border none
+
 .stream.notifications
   > li:hover
     :background none
@@ -2363,6 +2381,8 @@ div.dislikes
 #facebox
   .close
     :display none
+  .diaspora_alert~.close
+    :display block
 
 #aspect_edit_controls
   :margin
@@ -2814,3 +2834,48 @@ h1.tag
       :width 12px
       :height 12px
       :margin-left 0.5em
+
+#contacts_of_contact 
+  .section
+    :margin
+      :bottom 4px
+  .see_all
+    :text-align center
+
+.date
+  :background
+    :color #e6e6e6
+  :border-radius 8px
+  :padding 5px
+  :color #999
+
+  :text-align center
+  .day
+    :font-size 50px
+    :font-weight 200
+    :margin-bottom -15px
+    :margin-top -10px
+
+  .month
+    :font-size 14px
+
+.notification_count
+  :background
+    :color #f0f0f0
+  :color #999
+  :font
+    :weight normal
+
+  :padding 0 5px
+    :left 11px
+  :margin
+    :right 5px
+  :border
+    :radius 5px
+
+  &.unread
+    :background
+      :color lighten(#A40802, 5%)
+    :color #eee !important
+    :font
+      :weight bold
diff --git a/public/stylesheets/sass/mobile.sass b/public/stylesheets/sass/mobile.sass
old mode 100644
new mode 100755
index a02ac4b4e0f256059e32f386200e3521781cd843..9676302fb85f326eb9017e86c96001f6a7fcbaf7
--- a/public/stylesheets/sass/mobile.sass
+++ b/public/stylesheets/sass/mobile.sass
@@ -7,8 +7,7 @@
 
 $blue: #3F8FBA
 
-
-a:not([role='button'])
+a:not([role='button']):not(.arrow)
   :text
     :decoration none
   :font
@@ -174,6 +173,19 @@ a
     :background
       :color #000
 
+#photo_controls
+  :margin
+    :bottom -42px
+
+.arrow
+  :color white !important
+  :font
+    :size 26pt
+  :text
+    :shadow 0 1px 2px #333
+    :decoration none
+  :padding 0
+
 ul
   :margin 0
   :padding 0
@@ -346,4 +358,3 @@ ul
   :background
     :color #333
   :color #ccc
-
diff --git a/public/stylesheets/sass/ui.sass b/public/stylesheets/sass/ui.sass
index b80440e7d5b2edb51b5665ef256e1689df33d62a..31293f409bd81683adaa6d2546659c2dd12a4b0f 100644
--- a/public/stylesheets/sass/ui.sass
+++ b/public/stylesheets/sass/ui.sass
@@ -33,6 +33,8 @@
 
   :cursor pointer
 
+  :white-space nowrap
+
   :color #4a4a4a
   :text
     :shadow 0 1px 1px #eee
diff --git a/spec/controllers/conversations_controller_spec.rb b/spec/controllers/conversations_controller_spec.rb
index 31daa37dc73d21a58340dd8cf3ab65238d018e66..b4e6e0b7ca0bf4909f29e50be5e5925538859e1c 100644
--- a/spec/controllers/conversations_controller_spec.rb
+++ b/spec/controllers/conversations_controller_spec.rb
@@ -14,8 +14,8 @@ describe ConversationsController do
     it 'succeeds' do
       response.should be_success
     end
-    it "assigns a list of the user's contacts" do
-      assigns(:all_contacts_and_ids).should == alice.contacts.collect{|c| {"value" => c.id, "name" => c.person.name}}
+    it "assigns a json list of contacts" do
+      assigns(:contacts_json).should include(alice.contacts.first.person.name)
     end
     it "assigns a contact if passed a contact id" do
       get :new, :contact_id => alice.contacts.first.id
diff --git a/spec/controllers/people_controller_spec.rb b/spec/controllers/people_controller_spec.rb
index e923c8a1bfc2d33cd58e27eb834982c5d38fad36..046094236386c2b7e9d75b914cb3d23530a29743 100644
--- a/spec/controllers/people_controller_spec.rb
+++ b/spec/controllers/people_controller_spec.rb
@@ -154,16 +154,26 @@ describe PeopleController do
         response.should be_success
       end
 
-      it "assigns only public posts" do
-        public_posts = []
-        public_posts << bob.post(:status_message, :text => "first public ", :to => bob.aspects[0].id, :public => true)
-        bob.post(:status_message, :text => "to an aspect @user is not in", :to => bob.aspects[1].id)
-        bob.post(:status_message, :text => "to all aspects", :to => 'all')
-        public_posts << bob.post(:status_message, :text => "public", :to => 'all', :public => true)
+      context 'with posts' do
+        before do
+          @public_posts = []
+          @public_posts << bob.post(:status_message, :text => "first public ", :to => bob.aspects[0].id, :public => true)
+          bob.post(:status_message, :text => "to an aspect @user is not in", :to => bob.aspects[1].id)
+          bob.post(:status_message, :text => "to all aspects", :to => 'all')
+          @public_posts << bob.post(:status_message, :text => "public", :to => 'all', :public => true)
+          @public_posts.first.created_at -= 1000
+          @public_posts.first.save
+        end
 
-        get :show, :id => @person.id
+        it "assigns only public posts" do
+          get :show, :id => @person.id
+          assigns[:posts].models.should =~ @public_posts
+        end
 
-        assigns[:posts].models.should =~ public_posts
+        it 'is sorted by created_at desc' do
+          get :show, :id => @person.id
+          assigns[:posts].models.should == @public_posts.sort_by{|p| p.created_at}.reverse
+        end
       end
 
       it 'throws 404 if the person is remote' do
@@ -239,6 +249,14 @@ describe PeopleController do
       end
     end
   end
+  describe '#contacts' do
+    it 'assigns the contacts of a person' do
+      contact = alice.contact_for(bob.person)
+      contacts = contact.contacts
+      get :contacts, :person_id => bob.person.id
+      assigns(:contacts_of_contact).should == contacts
+    end
+  end
 
   describe '#webfinger' do
     it 'enqueues a webfinger job' do
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 74f1fdc6bb6e52eed0c797f1431553a64c2a5179..e7433a9e94239e58f1e11c448a957e18869a2949 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -101,6 +101,27 @@ describe ApplicationHelper do
           res.should =~ /data-video-id="#{video_id}"/
         end
 
+        it "keeps anchors" do
+          anchor = "#t=11m34"
+          video_id = "DHRoHuv3I8E"
+          url = "http://www.youtube.com/watch?v=" + video_id + anchor
+          res = markdownify(url)
+          res.should =~ /Youtube:/
+          res.should =~ /data-host="youtube.com"/
+          res.should =~ /data-video-id="#{video_id}"/
+          res.should =~ /data-anchor="#{anchor}"/
+        end
+        
+        it "has an empty data-anchor attribute if there is no anchor" do
+          video_id = "DHRoHuv3I8E"
+          url = "http://www.youtube.com/watch?v=" + video_id
+          res = markdownify(url)
+          res.should =~ /Youtube:/
+          res.should =~ /data-host="youtube.com"/
+          res.should =~ /data-video-id="#{video_id}"/
+          res.should =~ /data-anchor=""/
+        end
+
         it "leaves the links in the href of the #a tag" do
           video_id = "ABYnqp-bxvg"
           start_url ="http://www.youtube.com/watch?v=" + video_id
@@ -140,11 +161,21 @@ describe ApplicationHelper do
       end
     end
 
-    describe "hearts" do
+    describe "emoticons" do
       it "replaces &lt;3 with &hearts;" do
         message = "i <3 you"
         markdownify(message).should == "i &hearts; you"
       end
+      
+      it "replaces various things with (their) HTML entities" do
+        message = ":) :-) :( :-( ... -> <- (tm) (r) (c)"
+        markdownify(message).should == "&#9786; &#9786; &#9785; &#9785; &hellip; &rarr; &larr; &trade; &reg; &copy;"
+      end
+      
+      it "skips doing it if you say so" do
+        message = ":) :-) :( :-( ... -> <-"
+        markdownify(message, :emoticons => false).should == ":) :-) :( :-( ... -&gt; &lt;-"
+      end
     end
 
     describe "weak emphasis" do
diff --git a/spec/helpers/stream_helper_spec.rb b/spec/helpers/comments_helper_spec.rb
similarity index 95%
rename from spec/helpers/stream_helper_spec.rb
rename to spec/helpers/comments_helper_spec.rb
index 1b2d96b49a46e4c6d03b89bbe60d7feec6712dab..7880ab4df8209458a6ee8949b3c58d3bf5ccd9b5 100644
--- a/spec/helpers/stream_helper_spec.rb
+++ b/spec/helpers/comments_helper_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe StreamHelper do
+describe CommentsHelper do
   before do
     @user = alice
     @aspect = @user.aspects.first
diff --git a/spec/integration/receiving_spec.rb b/spec/integration/receiving_spec.rb
index bfc59e8235a8b5d6867d64102d153458a09373ab..2d96f12e838799d561a3a644163647b3810c19e7 100644
--- a/spec/integration/receiving_spec.rb
+++ b/spec/integration/receiving_spec.rb
@@ -61,7 +61,7 @@ describe 'a user receives a post' do
       bob.dispatch_post(sm, :to => bob.aspects.first)
     end
 
-    alice.raw_visible_posts.count.should == 1
+    alice.visible_posts.count.should == 1
   end
 
   context 'mentions' do
@@ -153,14 +153,14 @@ describe 'a user receives a post' do
     end
 
     it "adds a received post to the the contact" do
-      alice.raw_visible_posts.should include(@status_message)
+      alice.visible_posts.should include(@status_message)
       @contact.posts.should include(@status_message)
     end
 
     it 'removes posts upon forceful removal' do
       alice.remove_contact(@contact, :force => true)
       alice.reload
-      alice.raw_visible_posts.should_not include @status_message
+      alice.visible_posts.should_not include @status_message
     end
 
     context 'dependant delete' do
@@ -240,7 +240,7 @@ describe 'a user receives a post' do
       end
 
       it 'should correctly attach the user already on the pod' do
-        bob.reload.raw_visible_posts.size.should == 1
+        bob.reload.visible_posts.size.should == 1
         post_in_db = StatusMessage.find(@post.id)
         post_in_db.comments.should == []
         receive_with_zord(bob, alice.person, @xml)
@@ -267,7 +267,7 @@ describe 'a user receives a post' do
           end
         }
 
-        bob.reload.raw_visible_posts.size.should == 1
+        bob.reload.visible_posts.size.should == 1
         post_in_db = StatusMessage.find(@post.id)
         post_in_db.comments.should == []
 
@@ -339,7 +339,7 @@ describe 'a user receives a post' do
       zord = Postzord::Receiver.new(bob, :salmon_xml => salmon_xml)
       zord.perform
 
-      bob.raw_visible_posts.include?(post).should be_true
+      bob.visible_posts.include?(post).should be_true
     end
   end
 
diff --git a/spec/javascripts/aspect-filters-spec.js b/spec/javascripts/aspect-filters-spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f955e41a616f07722b07d65b07d381d17196813
--- /dev/null
+++ b/spec/javascripts/aspect-filters-spec.js
@@ -0,0 +1,13 @@
+/*   Copyright (c) 2010, Diaspora Inc.  This file is
+*   licensed under the Affero General Public License version 3 or later.  See
+*   the COPYRIGHT file.
+*/
+
+describe('AspectFilters', function(){
+  it('initializes selectedGUIDS', function(){
+    expect(AspectFilters.selectedGUIDS).toEqual([]);
+  });
+  it('initializes requests', function(){
+    expect(AspectFilters.requests).toEqual(0);
+  });
+});
diff --git a/spec/javascripts/diaspora-spec.js b/spec/javascripts/diaspora-spec.js
index d4f4978ea118f265cf37ed9acc737e23f51d25d4..ffbf289eb59b9f3e19757dd3c8811302854c701c 100644
--- a/spec/javascripts/diaspora-spec.js
+++ b/spec/javascripts/diaspora-spec.js
@@ -4,49 +4,84 @@
 */
 
 describe("Diaspora", function() {
-  describe("widgetCollection", function() {
+  describe("WidgetCollection", function() {
     describe("prototype", function() {
+      var widgets;
       beforeEach(function() {
-        window.widgets = new Diaspora.widgetCollection();
+        widgets = new Diaspora.WidgetCollection();
       });
 
       describe("add", function() {
         it("adds a widget to the collection", function() {
-          expect(window.widgets.collection["nameOfWidget"]).not.toBeDefined();
-          window.widgets.add("nameOfWidget", function() { });
-          expect(window.widgets.collection["nameOfWidget"]).toBeDefined();
+          expect(widgets.collection["nameOfWidget"]).not.toBeDefined();
+          widgets.add("nameOfWidget", function() { });
+          expect(widgets.collection["nameOfWidget"]).toBeDefined();
         });
 
         it("sets a shortcut by referencing the object on Diaspora.widgetCollection", function() {
-          expect(window.widgets.sup).toBeFalsy();
-          window.widgets.add("sup", function() { });
-          expect(window.widgets.sup).toEqual(window.widgets.collection.sup);
+          expect(widgets.sup).toBeFalsy();
+          widgets.add("sup", function() { });
+          expect(widgets.sup).toEqual(widgets.collection.sup);
         });
       });
 
       describe("remove", function() {
         it("removes a widget from the collection", function() {
-          window.widgets.add("nameOfWidget", function() { });
-          expect(window.widgets.collection["nameOfWidget"]).toBeDefined();
-          window.widgets.remove("nameOfWidget");
-          expect(window.widgets.collection["nameOfWidget"]).not.toBeDefined();
+          widgets.add("nameOfWidget", function() { });
+          expect(widgets.collection["nameOfWidget"]).toBeDefined();
+          widgets.remove("nameOfWidget");
+          expect(widgets.collection["nameOfWidget"]).not.toBeDefined();
         });
       });
 
       describe("init", function() {
         it("calls the start method on all of the widgets present", function() {
-          window.widgets.add("nameOfWidget", function() {
+          widgets.add("nameOfWidget", function() {
             this.start = function() { }
           });
 
-          spyOn(window.widgets.collection["nameOfWidget"], "start");
-          window.widgets.init();
-          expect(window.widgets.collection["nameOfWidget"].start).toHaveBeenCalled();
+          spyOn(widgets.collection["nameOfWidget"], "start");
+          widgets.init();
+          expect(widgets.collection["nameOfWidget"].start).toHaveBeenCalled();
         });
-        it("changes the ready property to true", function() {
-          expect(window.widgets.initialized).toBeFalsy();
-          window.widgets.init();
-          expect(window.widgets.initialized).toBeTruthy();
+
+        it("changes the initialized property to true", function() {
+          expect(widgets.initialized).toBeFalsy();
+          widgets.init();
+          expect(widgets.initialized).toBeTruthy();
+        });
+      });
+
+      describe("subscribe", function() {
+        it("subscribes to an event specified by an id", function() {
+          expect(widgets.eventsContainer.data("events")).not.toBeDefined();
+          widgets.subscribe("testing/event", function() { });
+          expect(widgets.eventsContainer.data("events")["testing/event"]).toBeDefined();
+        });
+
+        it("accepts a context in which the function will always be called", function() {
+           var foo = "bar";
+           widgets.subscribe("testing/context", function() { foo = this.foo; });
+           widgets.publish("testing/context");
+           expect(foo).toEqual(undefined);
+
+           widgets.subscribe("testing/context_", function() { foo = this.foo;  }, { foo: "hello" });
+           widgets.publish("testing/context_");
+           expect(foo).toEqual("hello");
+        });
+      });
+
+      describe("publish", function() {
+        it("triggers events that are related to the specified id", function() {
+          var called = false;
+
+          widgets.subscribe("testing/event", function() {
+            called = true;
+          });
+
+          widgets.publish("testing/event");
+
+          expect(called).toBeTruthy();
         });
       });
     });
diff --git a/spec/javascripts/embedder-spec.js b/spec/javascripts/embedder-spec.js
index c3414c063314a1c1f571e25bc0f4d0ecdcdc5de1..301b04405e9b50156c0f65709ede3ec0e2c5f4f6 100644
--- a/spec/javascripts/embedder-spec.js
+++ b/spec/javascripts/embedder-spec.js
@@ -2,6 +2,7 @@
  *   licensed under the Affero General Public License version 3 or later.  See
  *   the COPYRIGHT file.
  */
+
 describe("Diaspora", function() {
   describe("widgets", function() {
     describe("embedder", function() {
@@ -18,6 +19,9 @@ describe("Diaspora", function() {
         });
       });
       describe("render", function() {
+        beforeEach(function(){
+          Diaspora.widgets.embedder.registerServices();
+        });
         it("renders the specified mustache template", function() {
           var template = Diaspora.widgets.embedder.render("youtube.com", {"video-id": "asdf"});
           expect(template.length > 0).toBeTruthy();
@@ -31,7 +35,7 @@ describe("Diaspora", function() {
       describe("embed", function() {
         beforeEach(function() {
           $("#jasmine_content").html(
-              '<div class="stream">' +
+              '<div class="stream" id="main_stream">' +
                   '<a href="#video" class="video-link" data-host="youtube.com" data-video-id="asdf">' +
                   'spec video' +
                   '</a>' +
@@ -39,10 +43,11 @@ describe("Diaspora", function() {
               );
         });
 
-        it("delegates '.stream a.video-link'", function() {
-          spyOn($.fn, "delegate");
+        it("attackes onVideoLinkClicked to a.video-link'", function() {
+          spyOn(Diaspora.widgets.embedder, "onVideoLinkClicked");
           Diaspora.widgets.embedder.start();
-          expect($.fn.delegate).toHaveBeenCalledWith("a.video-link", "click", Diaspora.widgets.embedder.onVideoLinkClicked);
+          $("a.video-link:first").click();
+          expect(Diaspora.widgets.embedder.onVideoLinkClicked).toHaveBeenCalled();
         });
       });
 
@@ -52,7 +57,7 @@ describe("Diaspora", function() {
 
         var $post = $("#main_stream").children(".stream_element:first"),
           $contentParagraph = $post.children(".sm_body").children('.content').children("p");
-        
+
         expect($contentParagraph.length).toEqual(1);
       });
     });
diff --git a/spec/javascripts/stream-spec.js b/spec/javascripts/stream-spec.js
index 4d2bc64a960f7f5a3c5b676caf412fd111cc8313..19b6e71e6f992ff294e6ba5de028282d2c945783 100644
--- a/spec/javascripts/stream-spec.js
+++ b/spec/javascripts/stream-spec.js
@@ -4,59 +4,60 @@
  */
 
 describe("Stream", function() {
+  beforeEach(function() {
+    jasmine.Clock.useMock();
+    $('#jasmine_content').html(
+      '<div class="stream" id="main_stream">' +
+      '<li class="stream_element" data-guid="4ceef7ba2367bc2e4d0001e9">' +
+        '<div class="content">' +
+          '<div class="info">' +
+            '<a href="#" class="show_post_comments">show comments (0)</a>' +
+          '</div>' +
+          '<ul class="comments hidden" id="4ceef7ba2367bc2e4d0001e9">' +
+            '<li class="comment show">' +
+              '<form accept-charset="UTF-8" action="/comments" class="new_comment" data-remote="true" id="new_comment_on_4ceef7ba2367bc2e4d0001e9" method="post">' +
+                '<div style="margin:0;padding:0;display:inline">' +
+                  '<p>' +
+                    '<label for="comment_text_on_4ceef7ba2367bc2e4d0001e9">Comment</label>' +
+                    '<textarea class="comment_box" id="comment_text_on_4ceef7ba2367bc2e4d0001e9" name="text" rows="1"></textarea>' +
+                  '</p>' +
+                  '<input id="post_id_on_4ceef7ba2367bc2e4d0001e9" name="post_id" type="hidden" value="4ceef7ba2367bc2e4d0001e9">' +
+                  '<input class="comment_submit button" data-disable-with="Commenting..." id="comment_submit_4ceef7ba2367bc2e4d0001e9"  name="commit" type="submit" value="Comment">' +
+                '</div>' +
+              '</form>' +
+            '</li>' +
+          '</ul>' +
+        '</div>' +
+      '</li>' +
+      '</div>'
+    );
+  });
 
   describe("initialize", function() {
     it("attaches a click event to show_post_comments links", function() {
-      spyOn($.fn, "delegate");
+      spyOn(Stream, "toggleComments");
       Stream.initialize();
-      expect($.fn.delegate).toHaveBeenCalledWith(
-        "a.show_post_comments", "click", Stream.toggleComments);
+      $('.stream a.show_post_comments').click();
+      expect(Stream.toggleComments).toHaveBeenCalled();
     });
   });
 
   describe("toggleComments", function() {
-
-    beforeEach(function() {
-      jasmine.Clock.useMock();
-      $('#jasmine_content').html(
-        '<div class="stream">' +
-        '<li class="stream_element" data-guid="4ceef7ba2367bc2e4d0001e9">' +
-          '<div class="content">' +
-            '<div class="info">' +
-              '<a href="#" class="show_post_comments">show comments (0)</a>' +
-            '</div>' +
-            '<ul class="comments hidden" id="4ceef7ba2367bc2e4d0001e9">' +
-              '<li class="comment show">' +
-                '<form accept-charset="UTF-8" action="/comments" class="new_comment" data-remote="true" id="new_comment_on_4ceef7ba2367bc2e4d0001e9" method="post">' +
-                  '<div style="margin:0;padding:0;display:inline">' +
-                    '<p>' +
-                      '<label for="comment_text_on_4ceef7ba2367bc2e4d0001e9">Comment</label>' +
-                      '<textarea class="comment_box" id="comment_text_on_4ceef7ba2367bc2e4d0001e9" name="text" rows="1"></textarea>' +
-                    '</p>' +
-                    '<input id="post_id_on_4ceef7ba2367bc2e4d0001e9" name="post_id" type="hidden" value="4ceef7ba2367bc2e4d0001e9">' +
-                    '<input class="comment_submit button" data-disable-with="Commenting..." id="comment_submit_4ceef7ba2367bc2e4d0001e9"  name="commit" type="submit" value="Comment">' +
-                  '</div>' +
-                '</form>' +
-              '</li>' +
-            '</ul>' +
-          '</div>' +
-        '</li>' +
-        '</div>'
-      );
+    beforeEach(function(){
+      jQuery('#main_stream a.show_post_comments:not(.show)').die();
       Stream.initialize();
     });
-
     it("toggles class hidden on the comment block", function () {
-      expect($('ul.comments')).toHaveClass("hidden");
+      expect(jQuery('ul.comments')).toHaveClass("hidden");
       $("a.show_post_comments").click();
       jasmine.Clock.tick(200);
-      expect($('ul.comments')).not.toHaveClass("hidden");
+      expect(jQuery('ul.comments')).not.toHaveClass("hidden");
     });
 
     it("changes the text on the show comments link", function() {
       $("a.show_post_comments").click();
       jasmine.Clock.tick(200);
       expect($("a.show_post_comments").text()).toEqual("hide comments (0)");
-    })
+    });
   });
 });
diff --git a/spec/javascripts/support/jasmine.yml b/spec/javascripts/support/jasmine.yml
index 626edff19c1127f224481bd9dd5363f7757216a4..de698e936a7eb8aaee6df10fbdb261ca3eecce56 100644
--- a/spec/javascripts/support/jasmine.yml
+++ b/spec/javascripts/support/jasmine.yml
@@ -28,8 +28,9 @@ src_files:
   - public/javascripts/widgets/i18n.js
   - public/javascripts/widgets/timeago.js
   - public/javascripts/widgets/directionDetector.js
+  - public/javascripts/widgets/infinite-scroll.js
+  - public/javascripts/widgets/notifications.js
   - public/javascripts/mobile.js
-  - public/javascripts/infinite-scroll.js
   - public/javascripts/contact-list.js
   - public/javascripts/web-socket-receiver.js
   - public/javascripts/view.js
@@ -37,6 +38,7 @@ src_files:
   - public/javascripts/stream.js
   - public/javascripts/validation.js
   - public/javascripts/rails.js
+  - public/javascripts/aspect-filters.js
 # stylesheets
 #
 # Return an array of stylesheet filepaths relative to src_dir to include before jasmine specs.
diff --git a/spec/javascripts/validation-spec.js b/spec/javascripts/validation-spec.js
index 41eed51a6104546cd16c2f782ba5b5823ec9ab15..e15db117cfabd538b2c0b9d2af1f2dd229ab1d38 100644
--- a/spec/javascripts/validation-spec.js
+++ b/spec/javascripts/validation-spec.js
@@ -1,4 +1,9 @@
-describe("Validation", function() { 
+/*   Copyright (c) 2010, Diaspora Inc.  This file is
+*   licensed under the Affero General Public License version 3 or later.  See
+*   the COPYRIGHT file.
+*/
+
+describe("Validation", function() {
   describe("rules", function() {
     describe("username", function() {
       describe("characters", function() {
diff --git a/spec/javascripts/view-spec.js b/spec/javascripts/view-spec.js
index 1a8a853453efcf0be079efe2e8910d40f6edbfa7..ba3a3600fc37093429aa0bb263d2184cd79181c1 100644
--- a/spec/javascripts/view-spec.js
+++ b/spec/javascripts/view-spec.js
@@ -1,4 +1,9 @@
-describe("View", function() { 
+/*   Copyright (c) 2010, Diaspora Inc.  This file is
+*   licensed under the Affero General Public License version 3 or later.  See
+*   the COPYRIGHT file.
+*/
+
+describe("View", function() {
   it("is the object that helps the UI", function() { 
     expect(typeof View === "object").toBeTruthy();
   });
diff --git a/spec/javascripts/widget-i18n-spec.js b/spec/javascripts/widgets/i18n-spec.js
similarity index 90%
rename from spec/javascripts/widget-i18n-spec.js
rename to spec/javascripts/widgets/i18n-spec.js
index 6bf3ea38039b7eef19cc56913954985f7154f168..aecd5378bbab370fc5da510a436124852268a5d4 100644
--- a/spec/javascripts/widget-i18n-spec.js
+++ b/spec/javascripts/widgets/i18n-spec.js
@@ -1,10 +1,8 @@
-/**
- * Created by .
- * User: dan
- * Date: Jan 27, 2011
- * Time: 3:20:57 PM
- * To change this template use File | Settings | File Templates.
- */
+/*   Copyright (c) 2010, Diaspora Inc.  This file is
+*   licensed under the Affero General Public License version 3 or later.  See
+*   the COPYRIGHT file.
+*/
+
 describe("Diaspora", function() {
   describe("widgets", function() {
     describe("i18n", function() {
diff --git a/spec/javascripts/widgets/notifications-spec.js b/spec/javascripts/widgets/notifications-spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..aeedf1d5765ed3efa23075813730fdd915fb6287
--- /dev/null
+++ b/spec/javascripts/widgets/notifications-spec.js
@@ -0,0 +1,56 @@
+/*   Copyright (c) 2010, Diaspora Inc.  This file is
+*   licensed under the Affero General Public License version 3 or later.  See
+*   the COPYRIGHT file.
+*/
+describe("Diaspora", function() {
+  describe("widgets", function() {
+    describe("notifications", function() {
+      var changeNotificationCountSpy;
+
+      beforeEach(function() {
+         changeNotificationCountSpy = spyOn(Diaspora.widgets.notifications, "changeNotificationCount").andCallThrough();
+        $("#jasmine_content").html("<div id='notifications'></div>");
+        Diaspora.widgets.notifications.start();
+        changeNotificationCountSpy.reset();
+      });
+
+      describe("decrementCount", function() {
+        it("decrements Notifications.count", function() {
+          var originalCount = Diaspora.widgets.notifications.count;
+          Diaspora.widgets.notifications.decrementCount();
+          expect(Diaspora.widgets.notifications.count).toBeLessThan(originalCount);
+        });
+
+        it("calls Notifications.changeNotificationCount", function() {
+          Diaspora.widgets.notifications.decrementCount();
+          expect(Diaspora.widgets.notifications.changeNotificationCount).toHaveBeenCalled();
+        })
+      });
+
+      describe("incrementCount", function() {
+        it("increments Notifications.count", function() {
+          var originalCount = Diaspora.widgets.notifications.count;
+          Diaspora.widgets.notifications.incrementCount();
+          expect(Diaspora.widgets.notifications.count).toBeGreaterThan(originalCount);
+        });
+
+        it("calls Notifications.changeNotificationCount", function() {
+          Diaspora.widgets.notifications.incrementCount();
+          expect(Diaspora.widgets.notifications.changeNotificationCount).toHaveBeenCalled();
+        });
+      });
+
+      describe("showNotification", function() {
+        it("prepends a div to div#notifications", function() {
+          expect($("#notifications div").length).toEqual(0);
+
+          Diaspora.widgets.notifications.showNotification({
+            html: '<div class="notification"></div>'
+          });
+
+          expect($("#notifications div").length).toEqual(1);
+        });
+      });
+    });
+  });
+});
\ No newline at end of file
diff --git a/spec/lib/diaspora/exporter_spec.rb b/spec/lib/diaspora/exporter_spec.rb
index 8223bf68838dd1ebb23767273f63aa9835f3de9a..e31cd27e617ef73b4577c1213008d967aa2a51b9 100644
--- a/spec/lib/diaspora/exporter_spec.rb
+++ b/spec/lib/diaspora/exporter_spec.rb
@@ -96,7 +96,8 @@ describe Diaspora::Exporter do
 
     it 'should include post created at time' do
       doc = Nokogiri::XML::parse(posts_xml)
-      xml_time = Time.zone.parse(doc.xpath('//posts/status_message/created_at').first.text)
+      target_xml = doc.xpath('//posts/status_message').detect{|status| status.to_s.include?(@status_message1.text)}
+      xml_time = Time.zone.parse(target_xml.xpath('//status_message').text)
       xml_time.to_i.should == @status_message1.created_at.to_i
     end
   end
diff --git a/spec/misc_spec.rb b/spec/misc_spec.rb
index b089fc6030a8674bf439a3e591ee109ec1a928fb..5c1b3365a060c113b9e9db4ab82624d548c031d3 100644
--- a/spec/misc_spec.rb
+++ b/spec/misc_spec.rb
@@ -46,7 +46,7 @@ describe 'making sure the spec runner works' do
 
     it 'allows posting after running' do
       message = @user1.post(:status_message, :text => "Connection!", :to => @aspect1.id)
-      @user2.reload.raw_visible_posts.should include message
+      @user2.reload.visible_posts.should include message
     end
   end
 
diff --git a/spec/models/notification_spec.rb b/spec/models/notification_spec.rb
index e3a6df0c0899c1bb378fc2db63eaa891867913a4..fe50ec02610a569a807c56bab4cb9e588287dcc7 100644
--- a/spec/models/notification_spec.rb
+++ b/spec/models/notification_spec.rb
@@ -12,11 +12,12 @@ describe Notification do
     @user2 = eve
     @aspect  = @user.aspects.create(:name => "dudes")
     @opts = {:target_id => @sm.id,
-      :target_type => @sm.class.name,
+      :target_type => @sm.class.base_class.to_s,
       :type => 'Notifications::CommentOnPost',
       :actors => [@person],
       :recipient_id => @user.id}
     @note = Notification.new(@opts)
+    @note.type = 'Notifications::CommentOnPost'
     @note.actors =[ @person]
   end
 
@@ -39,6 +40,15 @@ describe Notification do
     end
   end
 
+  describe '.concatenate_or_create' do
+    it 'creates a new notificiation if the notification does not exist, or if it is unread' do
+      @note.unread = false
+      @note.save
+      Notification.count.should == 1
+      Notification.concatenate_or_create(@note.recipient, @note.target, @note.actors.first, Notifications::CommentOnPost)
+      Notification.count.should == 2
+    end
+  end
   describe '.notify' do
     it 'does not call Notification.create if the object does not have a notification_type' do
       Notification.should_not_receive(:make_notificatin)
@@ -100,15 +110,6 @@ describe Notification do
           Notification.where(:recipient_id => @user3.id, :target_type => @sm.class.base_class, :target_id => @sm.id).first.actors.count.should == 2
         end
 
-        it 'marks the notification as unread' do
-          note = Notification.where(:recipient_id => @user3.id,:target_type => @sm.class.base_class, :target_id => @sm.id).first
-          note.unread = false
-          note.save
-          lambda {
-            Postzord::Receiver.new(@user3, :person => @user2.person, :object => @user2.comment("hey", :on => @sm)).receive_object
-            note.reload
-          }.should change(note, :unread).from(false).to(true)
-        end
       end
     end
   end
diff --git a/spec/models/user/attack_vectors_spec.rb b/spec/models/user/attack_vectors_spec.rb
index b10d7ee1b033f1537a238f2c503a77c6e825a21b..f56b274d12c77c9fdfc04a31ef48a449e483655d 100644
--- a/spec/models/user/attack_vectors_spec.rb
+++ b/spec/models/user/attack_vectors_spec.rb
@@ -30,7 +30,7 @@ describe "attack vectors" do
       zord = Postzord::Receiver.new(user, :salmon_xml => salmon_xml)
       zord.perform
 
-      user.raw_visible_posts.include?(post_from_non_contact).should be_false
+      user.visible_posts.include?(post_from_non_contact).should be_false
       Post.count.should == post_count
     end
 
@@ -49,7 +49,7 @@ describe "attack vectors" do
     zord = Postzord::Receiver.new(user, :salmon_xml => salmon_xml)
     zord.perform
 
-    user3.reload.raw_visible_posts.should_not include(StatusMessage.find(original_message.id))
+    user3.reload.visible_posts.should_not include(StatusMessage.find(original_message.id))
   end
 
   context 'malicious contact attack vector' do
@@ -89,10 +89,10 @@ describe "attack vectors" do
           zord = Postzord::Receiver.new(user, :salmon_xml => salmon_xml)
           zord.perform
 
-        }.should_not change{user.reload.raw_visible_posts.count}
+        }.should_not change{user.reload.visible_posts.count}
 
         original_message.reload.text.should == "store this!"
-        user.raw_visible_posts.first.text.should == "store this!"
+        user.visible_posts.first.text.should == "store this!"
       end
     end
     it 'should not overwrite another persons profile profile' do
@@ -119,7 +119,7 @@ describe "attack vectors" do
       zord = Postzord::Receiver.new(user, :salmon_xml => salmon_xml)
       zord.perform
 
-      user.raw_visible_posts.count.should == 1
+      user.visible_posts.count.should == 1
       StatusMessage.count.should == 1
 
       ret = Retraction.new
@@ -132,7 +132,7 @@ describe "attack vectors" do
       zord.perform
 
       StatusMessage.count.should == 1
-      user.raw_visible_posts.count.should == 1
+      user.visible_posts.count.should == 1
     end
 
     it "disregards retractions for non-existent posts that are from someone other than the post's author" do
@@ -163,7 +163,7 @@ describe "attack vectors" do
       zord.perform
 
 
-      user.raw_visible_posts.count.should == 1
+      user.visible_posts.count.should == 1
 
       ret = Retraction.new
       ret.post_guid = original_message.guid
@@ -177,7 +177,7 @@ describe "attack vectors" do
         zord.perform
 
       }.should_not change(StatusMessage, :count)
-      user.reload.raw_visible_posts.count.should == 1
+      user.reload.visible_posts.count.should == 1
     end
 
     it 'it should not allow you to send retractions for other people' do
diff --git a/spec/models/user/posting_spec.rb b/spec/models/user/posting_spec.rb
index 5bafbb1b0c0793be317b0d489aa66413198972ff..029f1469ab373224d31aa5e296d886c131fa0a59 100644
--- a/spec/models/user/posting_spec.rb
+++ b/spec/models/user/posting_spec.rb
@@ -22,8 +22,8 @@ describe User do
     it 'saves post into visible post ids' do
       lambda {
         alice.add_to_streams(@post, @aspects)
-      }.should change{alice.raw_visible_posts(:by_members_of => @aspects).length}.by(1)
-      alice.raw_visible_posts(:by_members_of => @aspects).should include @post
+      }.should change{alice.visible_posts(:by_members_of => @aspects).length}.by(1)
+      alice.visible_posts(:by_members_of => @aspects).should include @post
     end
 
     it 'saves post into each aspect in aspect_ids' do
diff --git a/spec/models/user/querying_spec.rb b/spec/models/user/querying_spec.rb
index d66076adcda194e71c3401d9ea227a72c008fc56..9e1a6db644d8e258e87dd4ffdd272d544bf8b892 100644
--- a/spec/models/user/querying_spec.rb
+++ b/spec/models/user/querying_spec.rb
@@ -11,14 +11,14 @@ describe User do
     @eves_aspect = eve.aspects.first
   end
 
-  describe "#raw_visible_posts" do
+  describe "#visible_posts" do
     it "returns all the posts the user can see" do
       self_post = alice.post(:status_message, :text => "hi", :to => @alices_aspect.id)
       visible_post = bob.post(:status_message, :text => "hello", :to => bob.aspects.first.id)
       dogs = bob.aspects.create(:name => "dogs")
       invisible_post = bob.post(:status_message, :text => "foobar", :to => dogs.id)
 
-      stream = alice.raw_visible_posts
+      stream = alice.visible_posts
       stream.should include(self_post)
       stream.should include(visible_post)
       stream.should_not include(invisible_post)
@@ -30,27 +30,35 @@ describe User do
         (1..25).each do |n|
           [alice, bob, eve].each do |u|
             post = u.post :status_message, :text => "#{u.username} - #{n}", :to => u.aspects.first.id
-            post.created_at = post.created_at + time_interval
-            post.updated_at = post.updated_at + time_interval
+            post.created_at = post.created_at - time_interval
+            post.updated_at = post.updated_at - time_interval
             post.save
             time_interval += 1000
           end
         end
       end
       it 'works' do #This is in one spec to save time
-        bob.raw_visible_posts.length.should == 15
-        bob.raw_visible_posts.should == bob.raw_visible_posts(:by_members_of => bob.aspects.map{|a| a.id})
-        bob.raw_visible_posts.sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.raw_visible_posts.map{|p| p.id}.reverse
+        bob.visible_posts.length.should == 15 #it returns 15 by default
+        bob.visible_posts.should == bob.visible_posts(:by_members_of => bob.aspects.map{|a| a.id}) # it is the same when joining through aspects
+        bob.visible_posts.sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.visible_posts.map{|p| p.id}.reverse #it is sorted updated_at desc by default
 
         opts = {:limit => 40}
-        bob.raw_visible_posts(opts).length.should == 40
-        bob.raw_visible_posts(opts).should == bob.raw_visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id}))
-        bob.raw_visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.raw_visible_posts(opts).map{|p| p.id}.reverse
-
-        opts = {:page => 2}
-        bob.raw_visible_posts(opts).length.should == 15
-        bob.raw_visible_posts(opts).map{|p| p.id}.should == bob.raw_visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id})).map{|p| p.id}
-        bob.raw_visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.raw_visible_posts(opts).map{|p| p.id}.reverse
+        bob.visible_posts(opts).length.should == 40 #it takes a limit
+        bob.visible_posts(opts).should == bob.visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id}))
+        bob.visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.visible_posts(opts).map{|p| p.id}.reverse
+
+        last_time_of_last_page =  bob.visible_posts.last.updated_at
+        opts = {:max_time => last_time_of_last_page}
+        bob.visible_posts(opts).length.should == 15
+        bob.visible_posts(opts).map{|p| p.id}.should == bob.visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id})).map{|p| p.id}
+        bob.visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.visible_posts(opts).map{|p| p.id}.reverse
+        bob.visible_posts(opts).map{|p|p.id}.should == bob.visible_posts(:limit => 40)[15...30].map{|p|p.id} #pagination should return the right posts
+
+        opts = {:max_time => last_time_of_last_page.to_i}
+        bob.visible_posts(opts).length.should == 15
+        bob.visible_posts(opts).map{|p| p.id}.should == bob.visible_posts(opts.merge(:by_members_of => bob.aspects.map{|a| a.id})).map{|p| p.id}
+        bob.visible_posts(opts).sort_by{|p| p.updated_at}.map{|p| p.id}.should == bob.visible_posts(opts).map{|p| p.id}.reverse
+        bob.visible_posts(opts).map{|p|p.id}.should == bob.visible_posts(:limit => 40)[15...30].map{|p|p.id} #pagination should return the right posts
       end
     end
   end
@@ -70,7 +78,7 @@ describe User do
 
     describe "#visible_posts" do
       it "queries by person id" do
-        query = eve.raw_visible_posts.where(:author_id => eve.person.id)
+        query = eve.visible_posts.where(:author_id => eve.person.id)
         query.include?(@status_message1).should == true
         query.include?(@status_message2).should == true
         query.include?(@status_message3).should == false
@@ -79,7 +87,7 @@ describe User do
       end
 
       it "selects public posts" do
-        query = eve.raw_visible_posts.where(:public => true)
+        query = eve.visible_posts.where(:public => true)
         query.include?(@status_message1).should == false
         query.include?(@status_message2).should == true
         query.include?(@status_message3).should == true
@@ -88,7 +96,7 @@ describe User do
       end
 
       it "selects non public posts" do
-        query = eve.raw_visible_posts.where(:public => false)
+        query = eve.visible_posts.where(:public => false)
         query.include?(@status_message1).should == true
         query.include?(@status_message2).should == false
         query.include?(@status_message3).should == false
@@ -97,13 +105,13 @@ describe User do
       end
 
       it "selects by message contents" do
-        query = eve.raw_visible_posts.where(:text=> "hi")
+        query = eve.visible_posts.where(:text=> "hi")
         query.should == [@status_message1]
       end
 
       it "does not return pending posts" do
         @pending_status_message.pending.should be_true
-        eve.raw_visible_posts.should_not include @pending_status_message
+        eve.visible_posts.should_not include @pending_status_message
       end
 
       it '#find_visible_post_by_id' do
diff --git a/spec/shared_behaviors/taggable.rb b/spec/shared_behaviors/taggable.rb
index 4a783860189493df87f1b30d3b2df00d81fa9cd7..0b1bd95f0e76293c1f66783e6f9c19d8924302a7 100644
--- a/spec/shared_behaviors/taggable.rb
+++ b/spec/shared_behaviors/taggable.rb
@@ -39,8 +39,8 @@ describe Diaspora::Taggable do
     end
     describe '#tag_strings' do
       it 'returns a string for every #thing' do
-        str = '#what #hey #that"smybike. #@hey ##boo # #THATWASMYBIKE #vöglein #hey#there #135440we #abc/23 ###'
-        arr = ['what', 'hey', 'that', 'THATWASMYBIKE', 'vöglein', '135440we', 'abc']
+        str = '#what #hey #that"smybike. #@hey ##boo # #THATWASMYBIKE #vöglein #hey#there #135440we #abc/23 ### #h!gh #ok? #see: #re:publica'
+        arr = ['what', 'hey', 'that', 'THATWASMYBIKE', 'vöglein', '135440we', 'abc', 'h!gh', 'ok', 'see', 're:publica']
 
         @object.send(@object.class.field_with_tags_setter, str)
         @object.tag_strings.should =~ arr
diff --git a/spec/support/user_methods.rb b/spec/support/user_methods.rb
index 5ac07ec16572cebb6392bbc4bdd31a660bbb0706..6e43704b3b0ae64676fe8d20d1f50431aab5096a 100644
--- a/spec/support/user_methods.rb
+++ b/spec/support/user_methods.rb
@@ -17,6 +17,10 @@ class User
         add_to_streams(p, aspects)
         dispatch_post(p, :to => opts[:to])
       end
+      unless opts[:created_at]
+        p.created_at = Time.now - 1
+        p.save
+      end
       p
     end
   end
diff --git a/vendor/gems/jasmine/jasmine.gemspec b/vendor/gems/jasmine/jasmine.gemspec
index 5fad38a8a13811845b79ba41746de8b97903859e..1bd94cc1a66862dc20a1f37d42bc06884ea99f7e 100644
--- a/vendor/gems/jasmine/jasmine.gemspec
+++ b/vendor/gems/jasmine/jasmine.gemspec
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
   s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
   s.authors = ["Rajan Agaskar", "Christian Williams", "Davis Frank"]
   s.date = %q{2010-10-05}
-  s.default_executable = %q{jasmine}
+  #s.default_executable = %q{jasmine}
   s.description = %q{Javascript BDD test framework}
   s.email = %q{jasmine-js@googlegroups.com}
   s.executables = ["jasmine"]