diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index 411a41ccc2965909c5e19eb0c82d1a57bf5c9154..b837f006e62b2ed084a73c346182c0456dc601c9 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -18,6 +18,8 @@ class AccountsController < ApplicationController
       format.atom do
         @entries = @account.stream_entries.order('id desc').where(hidden: false).with_includes.paginate_by_max_id(20, params[:max_id], params[:since_id])
       end
+
+      format.activitystreams2
     end
   end
 
diff --git a/app/controllers/api/activitypub/accounts_controller.rb b/app/controllers/api/activitypub/accounts_controller.rb
deleted file mode 100644
index 82936f0621b6f02433cbaef95f60da05a781a7d2..0000000000000000000000000000000000000000
--- a/app/controllers/api/activitypub/accounts_controller.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-class Api::Activitypub::AccountsController < ApiController
-  before_action :set_account
-
-  respond_to :'application/activity+json'
-  respond_to :'application/ld+json; profile="https://www.w3.org/ns/activitystreams#"'
-
-  def show
-    render content_type: :'application/ld+json; profile="https://www.w3.org/ns/activitystreams#"'
-  end
-
-  private
-
-  def set_account
-    @account = Account.find(params[:id])
-  end
-end
diff --git a/app/views/accounts/show.html.haml b/app/views/accounts/show.html.haml
index cd5398908277c8e33d1d6c5d053f1993feafcc3e..c194ce33dd3a23e7949ae39ae213ec283237a159 100644
--- a/app/views/accounts/show.html.haml
+++ b/app/views/accounts/show.html.haml
@@ -4,7 +4,6 @@
 - content_for :header_tags do
   %link{ rel: 'salmon', href: api_salmon_url(@account.id) }/
   %link{ rel: 'alternate', type: 'application/atom+xml', href: account_url(@account, format: 'atom') }/
-  %link{ rel: 'alternate', type: 'application/ld+json; profile="https://www.w3.org/ns/activitystreams#"', href: "http://mastodon.dev/api/v1/activitypub/accounts/#{@account.username}" }/
 
   %meta{ property: 'og:site_name', content: 'Mastodon' }/
   %meta{ property: 'og:type', content: 'profile' }/
diff --git a/app/views/api/activitypub/accounts/show.rabl b/app/views/accounts/show.rabl
similarity index 68%
rename from app/views/api/activitypub/accounts/show.rabl
rename to app/views/accounts/show.rabl
index 806789d0037a4b243efa06ad526298403c319355..76aa4a80927e73a41cfa6a74287773a1a45fdc09 100644
--- a/app/views/api/activitypub/accounts/show.rabl
+++ b/app/views/accounts/show.rabl
@@ -1,8 +1,7 @@
+extends 'activitypub/types/person.rabl'
+
 object @account
 
-node(:'@context')         { 'https://www.w3.org/ns/activitystreams' }
-node(:type)               { 'Person' }
-node(:id)                 { request.original_url }
 node(:url)                { |account| TagManager.instance.url_for(account) }
 node(:name)               { |account| account.display_name }
 node(:preferredUsername)  { |account| account.username }
diff --git a/app/views/activitypub/base.rabl b/app/views/activitypub/base.rabl
new file mode 100644
index 0000000000000000000000000000000000000000..c5e94997a1b546101edb065a3cea8ac83522e56e
--- /dev/null
+++ b/app/views/activitypub/base.rabl
@@ -0,0 +1 @@
+node(:'@context') { 'https://www.w3.org/ns/activitystreams' }
diff --git a/app/views/activitypub/intransient.rabl b/app/views/activitypub/intransient.rabl
new file mode 100644
index 0000000000000000000000000000000000000000..21261f56d526ac1ffffd0a0af6c142e10c12ec80
--- /dev/null
+++ b/app/views/activitypub/intransient.rabl
@@ -0,0 +1,3 @@
+extends 'activitypub/base.rabl'
+
+node(:id) { request.original_url }
diff --git a/app/views/activitypub/types/person.rabl b/app/views/activitypub/types/person.rabl
new file mode 100644
index 0000000000000000000000000000000000000000..17c53bb7b25a13b24a1b3dde5f1d766ed9c65d1e
--- /dev/null
+++ b/app/views/activitypub/types/person.rabl
@@ -0,0 +1,3 @@
+extends 'activitypub/intransient.rabl'
+
+node(:type) { 'Person' }
\ No newline at end of file
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
index 5a16a14e8e4edf28a8bf64f2d3aeb5f656aba801..b1b73c846557ecbaa4d1f75d521aa2209f0ff52e 100644
--- a/config/initializers/mime_types.rb
+++ b/config/initializers/mime_types.rb
@@ -1,4 +1,5 @@
 # Be sure to restart your server when you modify this file.
 
-Mime::Type.register "application/json", :json, %w( text/x-json application/jsonrequest application/jrd+json )
-Mime::Type.register "text/xml",         :xml,  %w( application/xml application/atom+xml application/xrd+xml )
+Mime::Type.register "application/json",           :json, %w( text/x-json application/jsonrequest application/jrd+json )
+Mime::Type.register "text/xml",                   :xml,  %w( application/xml application/atom+xml application/xrd+xml )
+Mime::Type.register "application/activity+json",  :activitystreams2
diff --git a/config/routes.rb b/config/routes.rb
index 4d0138b825d447dd665783bcc375af3a3fe56a7a..699f56833de97b92ff032f2949aeeca8fd40e99e 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -153,10 +153,6 @@ Rails.application.routes.draw do
       end
     end
 
-    namespace :activitypub do
-      resources :accounts, only: [:show]
-    end
-
     namespace :web do
       resource :settings, only: [:update]
     end