diff --git a/app/assets/javascripts/app/views/photo_viewer.js b/app/assets/javascripts/app/views/photo_viewer.js
deleted file mode 100644
index d9a5874000826bf1cf37f2df020c14e9a1d57fee..0000000000000000000000000000000000000000
--- a/app/assets/javascripts/app/views/photo_viewer.js
+++ /dev/null
@@ -1,10 +0,0 @@
-// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
-
-app.views.PhotoViewer = app.views.Base.extend({
-  templateName : "photo-viewer",
-
-  presenter : function(){
-    return { photos : this.model.get("photos") }; //json array of attributes, not backbone models, yet.
-  }
-});
-// @license-end
diff --git a/app/assets/templates/activity-streams-photo_tpl.jst.hbs b/app/assets/templates/activity-streams-photo_tpl.jst.hbs
deleted file mode 100644
index 6908cb400b7cd153503276b62dec1c2b9e1ef0f1..0000000000000000000000000000000000000000
--- a/app/assets/templates/activity-streams-photo_tpl.jst.hbs
+++ /dev/null
@@ -1,3 +0,0 @@
-<a href="{{object_url}}" class="stream-photo-link">
-  <img src="{{image_url}}" data-small-photo="{{image_url}}" data-full-photo="{{image_url}}" class="stream-photo" />
-</a>
diff --git a/app/assets/templates/photo-viewer_tpl.jst.hbs b/app/assets/templates/photo-viewer_tpl.jst.hbs
deleted file mode 100644
index da353f40a17f0cd5d9931ca48a76bddc567c347b..0000000000000000000000000000000000000000
--- a/app/assets/templates/photo-viewer_tpl.jst.hbs
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="photo-set">
-    {{#each photos}}
-        <div class="img-bounding-box">
-            <img src="{{sizes.large}}"/>
-        </div>
-    {{/each}}
-</div>
\ No newline at end of file
diff --git a/app/assets/templates/stream-faces_tpl.jst.hbs b/app/assets/templates/stream-faces_tpl.jst.hbs
deleted file mode 100644
index 2e9898905ca1c1776d789132d91c7086439cda88..0000000000000000000000000000000000000000
--- a/app/assets/templates/stream-faces_tpl.jst.hbs
+++ /dev/null
@@ -1,5 +0,0 @@
-{{#people}}
-  {{#linkToAuthor this}}
-    {{{personImage this "small"}}}
-  {{/linkToAuthor}}
-{{/people}}
diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb
index a87150b8bb6ad8f40af56ef2e360cb4afaf080f2..90477fc496016361ef743ab4f53d6dd3c4bd4858 100644
--- a/app/controllers/people_controller.rb
+++ b/app/controllers/people_controller.rb
@@ -6,9 +6,8 @@ class PeopleController < ApplicationController
   before_action :authenticate_user!, except: %i(show stream hovercard)
   before_action :find_person, only: %i(show stream hovercard)
 
-  respond_to :html, :except => [:tag_index]
+  respond_to :html
   respond_to :json, :only => [:index, :show]
-  respond_to :js, :only => [:tag_index]
 
   rescue_from ActiveRecord::RecordNotFound do
     render :file => Rails.root.join('public', '404').to_s,
@@ -64,13 +63,6 @@ class PeopleController < ApplicationController
     render :json => { :search_count => @people.count, :search_html => @answer_html }.to_json
   end
 
-
-  def tag_index
-    profiles = Profile.tagged_with(params[:name]).where(:searchable => true).select('profiles.id, profiles.person_id')
-    @people = Person.where(:id => profiles.map{|p| p.person_id}).paginate(:page => params[:page], :per_page => 15)
-    respond_with @people
-  end
-
   # renders the persons user profile page
   def show
     mark_corresponding_notifications_read if user_signed_in?
diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb
index e648981f9ee6ea1ca8a51da99d28557fa6cf723c..52a9ef543b4963639d405194075c2578ee140a95 100644
--- a/app/controllers/photos_controller.rb
+++ b/app/controllers/photos_controller.rb
@@ -109,34 +109,6 @@ class PhotosController < ApplicationController
     end
   end
 
-  def edit
-    if @photo = current_user.photos.where(:id => params[:id]).first
-      respond_with @photo
-    else
-      redirect_to person_photos_path(current_user.person)
-    end
-  end
-
-  def update
-    photo = current_user.photos.where(:id => params[:id]).first
-    if photo
-      if current_user.update_post( photo, photo_params )
-        flash.now[:notice] = I18n.t 'photos.update.notice'
-        respond_to do |format|
-          format.js{ render :json => photo, :status => 200 }
-        end
-      else
-        flash.now[:error] = I18n.t 'photos.update.error'
-        respond_to do |format|
-          format.html{ redirect_to [:edit, photo] }
-          format.js{ render :status => 403 }
-        end
-      end
-    else
-      redirect_to person_photos_path(current_user.person)
-    end
-  end
-
   private
 
   def photo_params
diff --git a/app/views/aspects/_aspect_stream.haml b/app/views/aspects/_aspect_stream.haml
index 1673ce9e763d193099e8a0f1ca67482aba0bc345..69999e7013d08245501d6e880a2c1ac9af470fa1 100644
--- a/app/views/aspects/_aspect_stream.haml
+++ b/app/views/aspects/_aspect_stream.haml
@@ -7,7 +7,6 @@
     = stream.title
 
 = render 'publisher/publisher', publisher_aspects_for(stream)
-= render 'aspects/no_posts_message'
 
 #gs-shim{:title => popover_with_close_html("3. #{t('.stay_updated')}"), 'data-content' => t('.stay_updated_explanation')}
 
diff --git a/app/views/aspects/_no_posts_message.haml b/app/views/aspects/_no_posts_message.haml
deleted file mode 100644
index 7e0b41b378ea271060278c45daf85d4fe048340b..0000000000000000000000000000000000000000
--- a/app/views/aspects/_no_posts_message.haml
+++ /dev/null
@@ -1,6 +0,0 @@
--#   Copyright (c) 2010-2011, Diaspora Inc.  This file is
--#   licensed under the Affero General Public License version 3 or later.  See
--#   the COPYRIGHT file.
-
-#no_posts.hidden.empty_message
-  = t('.start_talking')
diff --git a/app/views/people/tag_index.js.erb b/app/views/people/tag_index.js.erb
deleted file mode 100644
index c30450e3ead782375f44f0e47f33b95f96720b48..0000000000000000000000000000000000000000
--- a/app/views/people/tag_index.js.erb
+++ /dev/null
@@ -1 +0,0 @@
-$("#people_stream").html("<%= escape_javascript(render("index", :people => @people)) %>");
diff --git a/app/views/photos/edit.html.haml b/app/views/photos/edit.html.haml
deleted file mode 100644
index 983a0be4a92097cc98cd74f8cf14ec419353ac4c..0000000000000000000000000000000000000000
--- a/app/views/photos/edit.html.haml
+++ /dev/null
@@ -1,15 +0,0 @@
--#   Copyright (c) 2010-2011, Diaspora Inc.  This file is
--#   licensed under the Affero General Public License version 3 or later.  See
--#   the COPYRIGHT file.
-
-%h2= "#{t('.editing')} #{@photo.processed_image}"
-
-%div{id: @photo.id}
-  #show_photo
-    = image_tag @photo.url(:scaled_full)
-
-  = form_for @photo do |photo|
-    = photo.label :text
-    = photo.text_field :text, value: @photo.text
-    = photo.submit
-
diff --git a/app/views/tags/update.js.erb b/app/views/tags/update.js.erb
deleted file mode 100644
index 16b65b62c6b8169a92dc6e4378abdf75be6d225e..0000000000000000000000000000000000000000
--- a/app/views/tags/update.js.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-var tagName = "<%= escape_javascript(@tag.name) %>"
-$("#followed_tags_listing").find("#tag-following-"+tagName).slideUp(100);
-app.flashMessages.success(Diaspora.I18n.t("tags.wasnt_that_interesting", {tagName: tagName}));
diff --git a/public/javascripts/custom-mobile-scripting.js b/public/javascripts/custom-mobile-scripting.js
deleted file mode 100644
index 900347dd608bb8bc2d49b460f79eed292c1c86f1..0000000000000000000000000000000000000000
--- a/public/javascripts/custom-mobile-scripting.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/*   Copyright (c) 2010-2011, Diaspora Inc.  This file is
-*   licensed under the Affero General Public License version 3 or later.  See
-*   the COPYRIGHT file.
-*/
-
-
-$(document).bind("mobileinit", function() {
-   $.extend($.mobile, {
-     ajaxLinksEnabled: false,
-     ajaxEnabled: false,
-     ajaxFormsEnabled: false
-
-   });
-	$.mobile.selectmenu.prototype.options.nativeMenu = false;
-});
-
-
-$(document).ready(function(){
-  $(".like_action.inactive").bind('tap', function(evt){
-    evt.preventDefault();
-    var target = $(this),
-        postId = target.data('post-id');
-
-    $.ajax({
-      url: '/posts/'+postId+'/likes.json',
-      type: 'POST',
-      complete: function(data){
-        target.addClass('inactive')
-              .removeClass('active')
-              .data('post-id', postId);
-      }
-    });
-  });
-
-  $(".like_action.active").bind('tap', function(evt){
-    evt.preventDefault();
-    var target = $(this),
-        postId = $(this).data('post-id'),
-        likeId = $(this).data('like-id');
-
-
-    $.ajax({
-      url: '/posts/'+postId+'/likes/'+likeId+'.json',
-      type: 'DELETE',
-      complete: function(data){
-        target.addClass('inactive')
-              .removeClass('active')
-              .data('like-id', '');
-      }
-    });
-  });
-});
diff --git a/spec/controllers/people_controller_spec.rb b/spec/controllers/people_controller_spec.rb
index b18751233ef76c9ceb3ea23712a76e8d8b41d68b..948a3fcf80ba427c1cb0e30c4f3324bffcaafcfe 100644
--- a/spec/controllers/people_controller_spec.rb
+++ b/spec/controllers/people_controller_spec.rb
@@ -116,21 +116,6 @@ describe PeopleController, :type => :controller do
     end
   end
 
-  describe '#tag_index' do
-    it 'works for js' do
-      xhr :get, :tag_index, :name => 'jellybeans', :format => :js
-      expect(response).to be_success
-    end
-
-    it 'returns awesome people who have that tag' do
-      f = FactoryGirl.create(:person)
-      f.profile.tag_string = "#seeded"
-      f.profile.save
-      xhr :get, :tag_index, :name => 'seeded', :format => :js
-      expect(assigns[:people].count).to eq(1)
-    end
-  end
-
   describe "#show performance", :performance => true do
     before do
       require 'benchmark'
diff --git a/spec/controllers/photos_controller_spec.rb b/spec/controllers/photos_controller_spec.rb
index 630735b674bf080fb0f010d11ce2b0e3594df97d..d6bd32843bcabe1a74bd859e9ebeb3179a1b27dc 100644
--- a/spec/controllers/photos_controller_spec.rb
+++ b/spec/controllers/photos_controller_spec.rb
@@ -175,18 +175,6 @@ describe PhotosController, :type => :controller do
     end
   end
 
-  describe '#edit' do
-    it "succeeds when user owns the photo" do
-      get :edit, :id => @alices_photo.id
-      expect(response).to be_success
-    end
-
-    it "redirects when the user does not own the photo" do
-      get :edit, :id => @bobs_photo.id
-      expect(response).to redirect_to(:action => :index, :person_id => alice.person.guid.to_s)
-    end
-  end
-
   describe '#destroy' do
     it 'let a user delete his message' do
       delete :destroy, :id => @alices_photo.id
@@ -217,33 +205,6 @@ describe PhotosController, :type => :controller do
     end
   end
 
-  describe "#update" do
-    it "updates the caption of a photo" do
-      put :update, :id => @alices_photo.id, :photo => { :text => "now with lasers!" }, :format => :js
-      expect(@alices_photo.reload.text).to eq("now with lasers!")
-    end
-
-    it "doesn't allow mass assignment of person" do
-      new_user = FactoryGirl.create(:user)
-      params = { :text => "now with lasers!", :author => new_user }
-      put :update, :id => @alices_photo.id, :photo => params, :format => :js
-      expect(@alices_photo.reload.author).to eq(alice.person)
-    end
-
-    it "doesn't allow mass assignment of person_id" do
-      new_user = FactoryGirl.create(:user)
-      params = { :text => "now with lasers!", :author_id => new_user.id }
-      put :update, :id => @alices_photo.id, :photo => params, :format => :js
-      expect(@alices_photo.reload.author_id).to eq(alice.person.id)
-    end
-
-    it 'redirects if you do not have access to the post' do
-      params = { :text => "now with lasers!" }
-      put :update, :id => @bobs_photo.id, :photo => params
-      expect(response).to redirect_to(:action => :index, :person_id => alice.person.guid.to_s)
-    end
-  end
-
   describe "#make_profile_photo" do
     it 'should return a 201 on a js success' do
       xhr :get, :make_profile_photo, :photo_id => @alices_photo.id, :format => 'js'
diff --git a/spec/javascripts/app/views/photo_viewer_spec.js b/spec/javascripts/app/views/photo_viewer_spec.js
deleted file mode 100644
index 645f50d2123026c736f6c6258b6a98e191d50047..0000000000000000000000000000000000000000
--- a/spec/javascripts/app/views/photo_viewer_spec.js
+++ /dev/null
@@ -1,19 +0,0 @@
-describe("app.views.PhotoViewer", function(){
-  beforeEach(function(){
-    this.model = factory.post({
-      photos : [
-        factory.photoAttrs({sizes : {large : "http://tieguy.org/me.jpg"}}),
-        factory.photoAttrs({sizes : {large : "http://whatthefuckiselizabethstarkupto.com/none_knows.gif"}}) //SIC
-      ]
-    });
-    this.view = new app.views.PhotoViewer({model : this.model});
-  });
-
-  describe("rendering", function(){
-    it("should have an image for each photoAttr on the model", function(){
-      this.view.render();
-      expect(this.view.$("img").length).toBe(2);
-      expect(this.view.$("img[src='http://tieguy.org/me.jpg']")).toExist();
-    });
-  });
-});