diff --git a/CHANGELOG.md b/CHANGELOG.md
index 92d8c3d8ee377ed5825e903df6fca792ce15db3c..0f34470699c9dd871c684b9e6c84404e438fa774 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -55,6 +55,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Added `:reject_deletes` group to SimplePolicy
 - MRF (`EmojiStealPolicy`): New MRF Policy which allows to automatically download emojis from remote instances
 - Support pagination in emoji packs API (for packs and for files in pack)
+- Support for viewing instances favicons next to posts and accounts
 
 <details>
   <summary>API Changes</summary>
@@ -65,6 +66,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Mastodon API: Add support for filtering replies in public and home timelines.
 - Mastodon API: Support for `bot` field in `/api/v1/accounts/update_credentials`.
 - Mastodon API: Support irreversible property for filters.
+- Mastodon API: Add pleroma.favicon field to accounts.
 - Admin API: endpoints for create/update/delete OAuth Apps.
 - Admin API: endpoint for status view.
 - OTP: Add command to reload emoji packs
diff --git a/config/config.exs b/config/config.exs
index 458d3a99ab0b90cd66e18bcf6d9fca5e65708eb8..3577cd10104de71b3a73c85c4057de37b5e34b93 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -706,6 +706,8 @@
 
 config :ex_aws, http_client: Pleroma.HTTP.ExAws
 
+config :pleroma, :instances_favicons, enabled: false
+
 # Import environment specific config. This must remain at the bottom
 # of this file so it overrides the configuration defined above.
 import_config "#{Mix.env()}.exs"
diff --git a/config/description.exs b/config/description.exs
index 705ba83d0d149f2ef6e332a58d072668f600e079..03b84bfc81f12889988e10b6b4847cd30122ea29 100644
--- a/config/description.exs
+++ b/config/description.exs
@@ -3448,5 +3448,18 @@
         suggestions: [false]
       }
     ]
+  },
+  %{
+    group: :pleroma,
+    key: :instances_favicons,
+    type: :group,
+    description: "Control favicons for instances",
+    children: [
+      %{
+        key: :enabled,
+        type: :boolean,
+        description: "Allow/disallow displaying and getting instances favicons"
+      }
+    ]
   }
 ]
diff --git a/config/test.exs b/config/test.exs
index e38b9967d67a387031ad58d0b50b22458d45fd54..e6596e0bcecd552f7d0939b06eeab113a6058950 100644
--- a/config/test.exs
+++ b/config/test.exs
@@ -111,6 +111,8 @@
 
 config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: true
 
+config :pleroma, :instances_favicons, enabled: true
+
 if File.exists?("./config/test.secret.exs") do
   import_config "test.secret.exs"
 else
diff --git a/docs/API/differences_in_mastoapi_responses.md b/docs/API/differences_in_mastoapi_responses.md
index 29141ed0c5df501eafd9d3a60331ae48e0043179..03c7f4608fd02fd202b99f4a1b7ebad55ae02a09 100644
--- a/docs/API/differences_in_mastoapi_responses.md
+++ b/docs/API/differences_in_mastoapi_responses.md
@@ -71,6 +71,7 @@ Has these additional fields under the `pleroma` object:
 - `unread_conversation_count`: The count of unread conversations. Only returned to the account owner.
 - `unread_notifications_count`: The count of unread notifications. Only returned to the account owner.
 - `notification_settings`: object, can be absent. See `/api/pleroma/notification_settings` for the parameters/keys returned.
+- `favicon`: nullable URL string, Favicon image of the user's instance
 
 ### Source
 
diff --git a/docs/configuration/cheatsheet.md b/docs/configuration/cheatsheet.md
index d0a57928ce3e68e8666ec39560a94a4b189ec23f..d775534b6c921e669a44b47c8338349061fd1b2c 100644
--- a/docs/configuration/cheatsheet.md
+++ b/docs/configuration/cheatsheet.md
@@ -988,3 +988,9 @@ Note: setting `restrict_unauthenticated/timelines/local` to `true` has no practi
 ## Pleroma.Web.ApiSpec.CastAndValidate
 
 * `:strict` a boolean, enables strict input validation (useful in development, not recommended in production). Defaults to `false`.
+
+## :instances_favicons
+
+Control favicons for instances.
+
+* `enabled`: Allow/disallow displaying and getting instances favicons
diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex
index 74458c09aa5043ed0e491fb51eb64101f106c95f..a1f935232e69642362be744881f1db6a311125fa 100644
--- a/lib/pleroma/instances/instance.ex
+++ b/lib/pleroma/instances/instance.ex
@@ -17,6 +17,8 @@ defmodule Pleroma.Instances.Instance do
   schema "instances" do
     field(:host, :string)
     field(:unreachable_since, :naive_datetime_usec)
+    field(:favicon, :string)
+    field(:favicon_updated_at, :naive_datetime)
 
     timestamps()
   end
@@ -25,7 +27,7 @@ defmodule Pleroma.Instances.Instance do
 
   def changeset(struct, params \\ %{}) do
     struct
-    |> cast(params, [:host, :unreachable_since])
+    |> cast(params, [:host, :unreachable_since, :favicon, :favicon_updated_at])
     |> validate_required([:host])
     |> unique_constraint(:host)
   end
@@ -120,4 +122,48 @@ defp parse_datetime(datetime) when is_binary(datetime) do
   end
 
   defp parse_datetime(datetime), do: datetime
+
+  def get_or_update_favicon(%URI{host: host} = instance_uri) do
+    existing_record = Repo.get_by(Instance, %{host: host})
+    now = NaiveDateTime.utc_now()
+
+    if existing_record && existing_record.favicon_updated_at &&
+         NaiveDateTime.diff(now, existing_record.favicon_updated_at) < 86_400 do
+      existing_record.favicon
+    else
+      favicon = scrape_favicon(instance_uri)
+
+      if existing_record do
+        existing_record
+        |> changeset(%{favicon: favicon, favicon_updated_at: now})
+        |> Repo.update()
+      else
+        %Instance{}
+        |> changeset(%{host: host, favicon: favicon, favicon_updated_at: now})
+        |> Repo.insert()
+      end
+
+      favicon
+    end
+  end
+
+  defp scrape_favicon(%URI{} = instance_uri) do
+    try do
+      with {:ok, %Tesla.Env{body: html}} <-
+             Pleroma.HTTP.get(to_string(instance_uri), [{:Accept, "text/html"}]),
+           favicon_rel <-
+             html
+             |> Floki.parse_document!()
+             |> Floki.attribute("link[rel=icon]", "href")
+             |> List.first(),
+           favicon <- URI.merge(instance_uri, favicon_rel) |> to_string(),
+           true <- is_binary(favicon) do
+        favicon
+      else
+        _ -> nil
+      end
+    rescue
+      _ -> nil
+    end
+  end
 end
diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex
index 84f18f1b683e7189a2dc099d7706f26da7317ddf..e6f163cb757153dd825dd3d9b545128699eb6d25 100644
--- a/lib/pleroma/web/api_spec/schemas/account.ex
+++ b/lib/pleroma/web/api_spec/schemas/account.ex
@@ -102,6 +102,12 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do
             type: :object,
             description:
               "A generic map of settings for frontends. Opaque to the backend. Only returned in `verify_credentials` and `update_credentials`"
+          },
+          favicon: %Schema{
+            type: :string,
+            format: :uri,
+            nullable: true,
+            description: "Favicon image of the user's instance"
           }
         }
       },
diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex
index a6e64b4ab77b620f1b97fd07aae00a0a6c815e67..2feba47782dbb553908a6601a329086a3b56c3bf 100644
--- a/lib/pleroma/web/mastodon_api/views/account_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/account_view.ex
@@ -204,6 +204,18 @@ defp do_render("show.json", %{user: user} = opts) do
         %{}
       end
 
+    favicon =
+      if Pleroma.Config.get([:instances_favicons, :enabled]) do
+        user
+        |> Map.get(:ap_id, "")
+        |> URI.parse()
+        |> URI.merge("/")
+        |> Pleroma.Instances.Instance.get_or_update_favicon()
+        |> MediaProxy.url()
+      else
+        nil
+      end
+
     %{
       id: to_string(user.id),
       username: username_from_nickname(user.nickname),
@@ -245,7 +257,8 @@ defp do_render("show.json", %{user: user} = opts) do
         hide_favorites: user.hide_favorites,
         relationship: relationship,
         skip_thread_containment: user.skip_thread_containment,
-        background_image: image_url(user.background) |> MediaProxy.url()
+        background_image: image_url(user.background) |> MediaProxy.url(),
+        favicon: favicon
       }
     }
     |> maybe_put_role(user, opts[:for])
diff --git a/priv/repo/migrations/20200707112859_instances_add_favicon.exs b/priv/repo/migrations/20200707112859_instances_add_favicon.exs
new file mode 100644
index 0000000000000000000000000000000000000000..5538749dca2192f0ca9d7c0492087dbe78fcd977
--- /dev/null
+++ b/priv/repo/migrations/20200707112859_instances_add_favicon.exs
@@ -0,0 +1,10 @@
+defmodule Pleroma.Repo.Migrations.InstancesAddFavicon do
+  use Ecto.Migration
+
+  def change do
+    alter table(:instances) do
+      add(:favicon, :string)
+      add(:favicon_updated_at, :naive_datetime)
+    end
+  end
+end
diff --git a/test/fixtures/tesla_mock/https___osada.macgirvin.com.html b/test/fixtures/tesla_mock/https___osada.macgirvin.com.html
new file mode 100644
index 0000000000000000000000000000000000000000..880273d74f878d71865d4712942367643ed33e62
--- /dev/null
+++ b/test/fixtures/tesla_mock/https___osada.macgirvin.com.html
@@ -0,0 +1,301 @@
+<!DOCTYPE html >
+<html prefix="og: http://ogp.me/ns#">
+<head>
+  <title>Osada</title>
+  <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
+<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=0"/>
+<meta property="generator" content="osada"/>
+<link rel="stylesheet" href="http://osada.macgirvin.com/library/fork-awesome/css/fork-awesome.min.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/vendor/twbs/bootstrap/dist/css/bootstrap.min.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/library/bootstrap-tagsinput/bootstrap-tagsinput.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/view/css/bootstrap-red.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/library/datetimepicker/jquery.datetimepicker.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/library/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/library/tiptip/tipTip.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/library/jgrowl/jquery.jgrowl.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/library/jRange/jquery.range.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/view/css/conversation.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/view/css/widgets.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/view/css/colorbox.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/library/justifiedGallery/justifiedGallery.min.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/view/css/default.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/view/css/mod_home.css?v=2.3" type="text/css" media="screen">
+<link rel="stylesheet" href="http://osada.macgirvin.com/view/theme/redbasic/php/style.pcss?v=2.3" type="text/css" media="screen">
+
+<script>
+
+	var aStr = {
+
+		'delitem'     : "Delete this item?",
+		'comment'     : "Comment",
+		'showmore'    : "<i class='fa fa-chevron-down'></i> show all",
+		'showfewer'   : "<i class='fa fa-chevron-up'></i> show less",
+		'divgrowmore' : "<i class='fa fa-chevron-down'></i> expand",
+		'divgrowless' : "<i class='fa fa-chevron-up'></i> collapse",
+		'pwshort'     : "Password too short",
+		'pwnomatch'   : "Passwords do not match",
+		'everybody'   : "everybody",
+		'passphrase'  : "Secret Passphrase",
+		'passhint'    : "Passphrase hint",
+		'permschange' : "Notice: Permissions have changed but have not yet been submitted.",
+		'closeAll'    : "close all",
+		'nothingnew'  : "Nothing new here",
+		'rating_desc' : "Rate This Channel (this is public)",
+		'rating_val'  : "Rating",
+		'rating_text' : "Describe (optional)",
+		'submit'      : "Submit",
+		'linkurl'     : "Please enter a link URL",
+		'leavethispage' : "Unsaved changes. Are you sure you wish to leave this page?",
+		'location'    : "Location",
+		'lovely'      : "lovely",
+		'wonderful'   : "wonderful",
+		'fantastic'   : "fantastic",
+		'great'       : "great",
+		'nick_invld1' : "Your chosen nickname was either already taken or not valid. Please use our suggestion (",
+		'nick_invld2' : ") or enter a new one.",
+		'nick_valid'  : "Thank you, this nickname is valid.",
+		'name_empty'  : "A channel name is required.",
+		'name_ok1'    : "This is a ",
+		'name_ok2'    : " channel name",
+
+
+
+		't01' : "",
+		't02' : "",
+		't03' : "ago",
+		't04' : "from now",
+		't05' : "less than a minute",
+		't06' : "about a minute",
+		't07' : "%d minutes",
+		't08' : "about an hour",
+		't09' : "about %d hours",
+		't10' : "a day",
+		't11' : "%d days",
+		't12' : "about a month",
+		't13' : "%d months",
+		't14' : "about a year",
+		't15' : "%d years",
+		't16' : " ",
+		't17' : "[]",
+
+		'monthNames' : [ "January","February","March","April","May","June","July","August","September","October","November","December" ],
+		'monthNamesShort' : [ "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" ],
+		'dayNames' : ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
+		'dayNamesShort' : ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],
+		'today' : "today",
+		'month' : "month",
+		'week' : "week",
+		'day' : "day",
+		'allday' : "All day"
+	};
+
+</script>
+		
+
+<script src="http://osada.macgirvin.com/view/js/jquery.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/justifiedGallery/jquery.justifiedGallery.min.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/sprintf.js/dist/sprintf.min.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/textcomplete/textcomplete.min.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/view/js/autocomplete.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/jquery.timeago.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/readmore.js/readmore.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/sticky-kit/sticky-kit.min.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/jgrowl/jquery.jgrowl_minimized.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/view/js/acl.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/view/js/webtoolkit.base64.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/jRange/jquery.range.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/colorbox/jquery.colorbox-min.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/jquery.AreYouSure/jquery.are-you-sure.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/tableofcontents/jquery.toc.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/imagesloaded/imagesloaded.pkgd.min.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/bootbox/bootbox.min.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/bootstrap-tagsinput/bootstrap-tagsinput.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/datetimepicker/jquery.datetimepicker.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/library/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js?v=2.3"></script>
+<script src="http://osada.macgirvin.com/view/theme/redbasic/js/redbasic.js?v=2.3"></script>
+
+
+
+<script>
+	var updateInterval = 80000;
+	var localUser = false;
+	var zid = null;
+	var justifiedGalleryActive = false;
+			var preloadImages = 0;
+</script>
+
+
+
+<script>$(document).ready(function() { $("#nav-search-text").search_autocomplete('https://osada.macgirvin.com/acl');});</script><script src="http://osada.macgirvin.com/view/js/main.js?v=2.3"></script>
+</head>
+<body>
+		<header></header>
+	<nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark"><div class="project-banner" title="Powered by Osada"><a href="https://osada.macgirvin.com/">&#x2638;</a></div>
+<div class="d-lg-none pt-1 pb-1">
+		<a class="btn btn-primary btn-sm text-white" href="#" title="Sign in" id="login_nav_btn_collapse" data-toggle="modal" data-target="#nav-login">
+		Login
+	</a>
+		</div>
+<div class="navbar-toggler-right">
+		<button id="expand-aside" type="button" class="d-lg-none navbar-toggler border-0" data-toggle="offcanvas" data-target="#region_1">
+		<i class="fa fa-arrow-circle-right" id="expand-aside-icon"></i>
+	</button>
+		<button id="menu-btn" class="navbar-toggler border-0" type="button" data-toggle="collapse" data-target="#navbar-collapse-2">
+		<i class="fa fa-bars"></i>
+	</button>
+</div>
+<div class="collapse navbar-collapse" id="navbar-collapse-1">
+	<ul class="navbar-nav mr-auto">
+				<li class="nav-item d-lg-flex">
+						<a class="nav-link" href="#" title="Sign in" id="login_nav_btn" data-toggle="modal" data-target="#nav-login">
+			Login
+			</a>
+					</li>
+							</ul>
+
+	<div id="banner" class="navbar-text"></div>
+
+	<ul id="nav-right" class="navbar-nav ml-auto">
+		<li class="nav-item collapse clearfix" id="nav-search">
+			<form class="form-inline" method="get" action="search" role="search">
+				<input class="form-control form-control-sm mt-1 mr-2" id="nav-search-text" type="text" value="" placeholder="@name, !forum, #tag, content" name="search" title="Search site @name, !forum, #tag, ?docs, content" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/>
+			</form>
+			<div id="nav-search-spinner" class="spinner-wrapper">
+				<div class="spinner s"></div>
+			</div>
+		</li>
+		<li class="nav-item" id="nav-search-btn">
+			<a class="nav-link" href="#nav-search" title="Search site @name, !forum, #tag, ?docs, content" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="fa fa-fw fa-search"></i></a>
+		</li>
+										<li class="nav-item dropdown" id="app-menu">
+			<a class="nav-link" href="#" data-toggle="dropdown"><i class="fa fa-fw fa-bars"></i></a>
+			<div id="dropdown-menu" class="dropdown-menu dropdown-menu-right">
+												<a class="dropdown-item" href="https://osada.macgirvin.com/directory"><i class="generic-icons-nav fa fa-fw fa-sitemap"></i>Directory</a>
+
+
+								<a class="dropdown-item" href="https://osada.macgirvin.com/lang"><i class="generic-icons-nav fa fa-fw fa-language"></i>Language</a>
+
+
+								<a class="dropdown-item" href="https://osada.macgirvin.com/search"><i class="generic-icons-nav fa fa-fw fa-search"></i>Search</a>
+
+
+															</div>
+		</li>
+	</ul>
+</div>
+<div class="collapse d-lg-none" id="navbar-collapse-2">
+	<div class="navbar-nav mr-auto">
+								<a class="nav-link" href="https://osada.macgirvin.com/directory"><i class="generic-icons-nav fa fa-fw fa-sitemap"></i>Directory</a>
+
+
+				<a class="nav-link" href="https://osada.macgirvin.com/lang"><i class="generic-icons-nav fa fa-fw fa-language"></i>Language</a>
+
+
+				<a class="nav-link" href="https://osada.macgirvin.com/search"><i class="generic-icons-nav fa fa-fw fa-search"></i>Search</a>
+
+
+							</div>
+</div>
+</nav>
+	<main>
+		<aside id="region_1"><div class="aside_spacer"><div id="left_aside_wrapper"></div></div></aside>
+		<section id="region_2"><h1 class="home-welcome">Welcome to Osada</h1><form action="https://osada.macgirvin.com/" id="main-login" method="post">
+	<input type="hidden" name="auth-params" value="login"/>
+	<div id="login-main">
+		<div id="login-input" class="form-group">
+				<div id="id_username_wrapper" class="form-group">
+		<label for="id_username" id="label_username">Login/Email</label>
+		<input class="form-control" name="username" id="id_username" type="text" value="">
+		<small id="help_username" class="form-text text-muted"></small>
+	</div>
+				<div class="form-group">
+		<label for="id_password">Password</label>
+		<input class="form-control" type="password" name="password" id="id_password" value="">		<small id="help_password" class="form-text text-muted"></small>
+	</div>
+				<div id="remember_container" class="clearfix form-group checkbox">
+		<label for="id_remember">Remember me</label>
+		<div class="float-right"><input type="checkbox" name="remember" id="id_remember" value="1"/><label class="switchlabel" for="id_remember"> <span class="onoffswitch-inner" data-on="Yes" data-off="No"></span><span class="onoffswitch-switch"></span></label></div>
+		<small class="form-text text-muted"></small>
+	</div>
+			<button type="submit" name="submit" class="btn btn-block btn-primary">Login</button>
+		</div>
+		<div id="login-extra-links">
+			<a href="https://osada.macgirvin.com/pubsites" title="Create an account to access services and applications" id="register-link" class="pull-right">Register</a>			<a href="lostpass" title="Forgot your password?" id="lost-password-link">Password Reset</a>
+		</div>
+		<hr>
+		<a href="rmagic" class="btn btn-block btn-outline-success rmagic-button">Remote Authentication</a>
+	</div>
+			<input type="hidden" name="0" value=""/>
+	</form>
+<script type="text/javascript"> $(document).ready(function() { $("#id_username").focus();} );</script>
+<div id="nav-login" class="modal" tabindex="-1" role="dialog">
+	<div class="modal-dialog" role="document">
+		<div class="modal-content">
+			<div class="modal-header">
+				<h4 class="modal-title">Login</h4>
+				<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+			</div>
+			<div class="modal-body">
+				<div class="form-group">
+					<form action="https://osada.macgirvin.com/" id="main-login" method="post">
+	<input type="hidden" name="auth-params" value="login"/>
+	<div id="login-main">
+		<div id="login-input" class="form-group">
+				<div id="id_username_wrapper" class="form-group">
+		<label for="id_username" id="label_username">Login/Email</label>
+		<input class="form-control" name="username" id="id_username" type="text" value="">
+		<small id="help_username" class="form-text text-muted"></small>
+	</div>
+				<div class="form-group">
+		<label for="id_password">Password</label>
+		<input class="form-control" type="password" name="password" id="id_password" value="">		<small id="help_password" class="form-text text-muted"></small>
+	</div>
+				<div id="remember_me_container" class="clearfix form-group checkbox">
+		<label for="id_remember_me">Remember me</label>
+		<div class="float-right"><input type="checkbox" name="remember_me" id="id_remember_me" value="1"/><label class="switchlabel" for="id_remember_me"> <span class="onoffswitch-inner" data-on="Yes" data-off="No"></span><span class="onoffswitch-switch"></span></label></div>
+		<small class="form-text text-muted"></small>
+	</div>
+			<button type="submit" name="submit" class="btn btn-block btn-primary">Login</button>
+		</div>
+		<div id="login-extra-links">
+			<a href="https://osada.macgirvin.com/pubsites" title="Create an account to access services and applications" id="register-link" class="pull-right">Register</a>			<a href="lostpass" title="Forgot your password?" id="lost-password-link">Password Reset</a>
+		</div>
+		<hr>
+		<a href="rmagic" class="btn btn-block btn-outline-success rmagic-button">Remote Authentication</a>
+	</div>
+			<input type="hidden" name="0" value=""/>
+	</form>
+
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+					<div id="page-footer"></div>
+			<div id="pause"></div>
+		</section>
+		<aside id="region_3" class="d-none d-xl-table-cell"><div class="aside_spacer"><div id="right_aside_wrapper"></div></div></aside>
+	</main>
+	<footer></footer>
+</body>
+</html>
+<!--
+     FILE ARCHIVED ON 11:49:38 Jan 26, 2019 AND RETRIEVED FROM THE
+     INTERNET ARCHIVE ON 04:27:56 Mar 02, 2020.
+
+     CONTENT MAY BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)).
+-->
+<!--
+playback timings (ms):
+  exclusion.robots: 0.217
+  CDXLines.iter: 14.7 (3)
+  LoadShardBlock: 165.298 (3)
+  esindex: 0.01
+  PetaboxLoader3.datanode: 72.599 (4)
+  exclusion.robots.policy: 0.208
+  RedisCDXSource: 16.804
+  PetaboxLoader3.resolve: 146.316 (4)
+  captures_list: 199.59
+  load_resource: 56.473
+-->
\ No newline at end of file
diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex
index da04ac6f1e6617981c48cde5eccd9902a3df6e3c..19a2026544963fa5eece3c5b35d69125efbfbda4 100644
--- a/test/support/http_request_mock.ex
+++ b/test/support/http_request_mock.ex
@@ -1342,6 +1342,18 @@ def get("https://relay.mastodon.host/actor", _, _, _) do
     {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/relay/relay.json")}}
   end
 
+  def get("http://localhost:4001/", _, "", Accept: "text/html") do
+    {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/7369654.html")}}
+  end
+
+  def get("https://osada.macgirvin.com/", _, "", Accept: "text/html") do
+    {:ok,
+     %Tesla.Env{
+       status: 200,
+       body: File.read!("test/fixtures/tesla_mock/https___osada.macgirvin.com.html")
+     }}
+  end
+
   def get(url, query, body, headers) do
     {:error,
      "Mock response not implemented for GET #{inspect(url)}, #{query}, #{inspect(body)}, #{
diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs
index 3e2e780e3067682e08e43e75c48e2a9472769ae0..f5bfc9c678c6aeb50af32d331ca0dea3d6bd443e 100644
--- a/test/web/mastodon_api/views/account_view_test.exs
+++ b/test/web/mastodon_api/views/account_view_test.exs
@@ -5,6 +5,7 @@
 defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
   use Pleroma.DataCase
 
+  alias Pleroma.Config
   alias Pleroma.User
   alias Pleroma.UserRelationship
   alias Pleroma.Web.CommonAPI
@@ -18,6 +19,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
     :ok
   end
 
+  setup do: clear_config([:instances_favicons, :enabled])
+
   test "Represent a user account" do
     background_image = %{
       "url" => [%{"href" => "https://example.com/images/asuka_hospital.png"}]
@@ -75,6 +78,8 @@ test "Represent a user account" do
       pleroma: %{
         ap_id: user.ap_id,
         background_image: "https://example.com/images/asuka_hospital.png",
+        favicon:
+          "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png",
         confirmation_pending: false,
         tags: [],
         is_admin: false,
@@ -92,6 +97,23 @@ test "Represent a user account" do
     assert expected == AccountView.render("show.json", %{user: user})
   end
 
+  test "Favicon is nil when :instances_favicons is disabled" do
+    user = insert(:user)
+
+    Config.put([:instances_favicons, :enabled], true)
+
+    assert %{
+             pleroma: %{
+               favicon:
+                 "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png"
+             }
+           } = AccountView.render("show.json", %{user: user})
+
+    Config.put([:instances_favicons, :enabled], false)
+
+    assert %{pleroma: %{favicon: nil}} = AccountView.render("show.json", %{user: user})
+  end
+
   test "Represent the user account for the account owner" do
     user = insert(:user)
 
@@ -152,6 +174,8 @@ test "Represent a Service(bot) account" do
       pleroma: %{
         ap_id: user.ap_id,
         background_image: nil,
+        favicon:
+          "https://shitposter.club/plugins/Qvitter/img/gnusocial-favicons/favicon-16x16.png",
         confirmation_pending: false,
         tags: [],
         is_admin: false,