diff --git a/client/public/assets/apple-touch-icon-180x180.png b/client/public/assets/apple-touch-icon-180x180.png
new file mode 100644
index 00000000..ebc0be50
Binary files /dev/null and b/client/public/assets/apple-touch-icon-180x180.png differ
diff --git a/client/public/favicon.png b/client/public/assets/favicon.png
similarity index 100%
rename from client/public/favicon.png
rename to client/public/assets/favicon.png
diff --git a/client/public/assets/safari-pinned-tab.svg b/client/public/assets/safari-pinned-tab.svg
new file mode 100644
index 00000000..d2cd031d
--- /dev/null
+++ b/client/public/assets/safari-pinned-tab.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
+ width="144.000000pt" height="144.000000pt" viewBox="0 0 144.000000 144.000000"
+ preserveAspectRatio="xMidYMid meet">
+<metadata>
+Created by potrace 1.11, written by Peter Selinger 2001-2013
+</metadata>
+<g transform="translate(0.000000,144.000000) scale(0.100000,-0.100000)"
+fill="#000000" stroke="none">
+<path d="M485 1424 c-159 -24 -332 -74 -449 -130 l-39 -19 6 -130 c4 -71 13
+-166 21 -210 66 -364 268 -656 608 -883 89 -59 79 -59 176 4 336 218 540 516
+608 884 11 60 14 91 20 216 l6 120 -78 33 c-267 112 -604 156 -879 115z"/>
+</g>
+</svg>
diff --git a/client/public/index.html b/client/public/index.html
index 56d4bfda..ecf811ec 100644
--- a/client/public/index.html
+++ b/client/public/index.html
@@ -6,7 +6,9 @@
         <meta name="theme-color" content="#000000">
         <meta name="google" content="notranslate">
         <meta http-equiv="x-dns-prefetch-control" content="off">
-        <link rel="icon" type="image/png" href="favicon.png" sizes="48x48">
+        <link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon-180x180.png" />
+        <link rel="mask-icon" href="assets/safari-pinned-tab.svg" color="#5bbad5">
+        <link rel="icon" type="image/png" href="assets/favicon.png" sizes="48x48">
         <title>AdGuard Home</title>
     </head>
     <body>
diff --git a/client/public/install.html b/client/public/install.html
index 2fd3bb7d..3a09704c 100644
--- a/client/public/install.html
+++ b/client/public/install.html
@@ -5,7 +5,9 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
         <meta name="theme-color" content="#000000">
         <meta name="google" content="notranslate">
-        <link rel="icon" type="image/png" href="favicon.png" sizes="48x48">
+        <link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon-180x180.png" />
+        <link rel="mask-icon" href="assets/safari-pinned-tab.svg" color="#5bbad5">
+        <link rel="icon" type="image/png" href="assets/favicon.png" sizes="48x48">
         <title>Setup AdGuard Home</title>
     </head>
     <body>
diff --git a/client/public/login.html b/client/public/login.html
index 03179b42..9f06fc03 100644
--- a/client/public/login.html
+++ b/client/public/login.html
@@ -5,7 +5,9 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
         <meta name="theme-color" content="#000000">
         <meta name="google" content="notranslate">
-        <link rel="icon" type="image/png" href="favicon.png" sizes="48x48">
+        <link rel="apple-touch-icon" sizes="180x180" href="assets/apple-touch-icon-180x180.png" />
+        <link rel="mask-icon" href="assets/safari-pinned-tab.svg" color="#5bbad5">
+        <link rel="icon" type="image/png" href="assets/favicon.png" sizes="48x48">
         <title>Login</title>
     </head>
     <body>
diff --git a/client/webpack.common.js b/client/webpack.common.js
index 99b6dbae..f4f0bae4 100644
--- a/client/webpack.common.js
+++ b/client/webpack.common.js
@@ -14,9 +14,10 @@ const ENTRY_LOGIN = path.resolve(RESOURCES_PATH, 'src/login/index.js');
 const HTML_PATH = path.resolve(RESOURCES_PATH, 'public/index.html');
 const HTML_INSTALL_PATH = path.resolve(RESOURCES_PATH, 'public/install.html');
 const HTML_LOGIN_PATH = path.resolve(RESOURCES_PATH, 'public/login.html');
-const FAVICON_PATH = path.resolve(RESOURCES_PATH, 'public/favicon.png');
+const ASSETS_PATH = path.resolve(RESOURCES_PATH, 'public/assets');
 
 const PUBLIC_PATH = path.resolve(__dirname, '../build/static');
+const PUBLIC_ASSETS_PATH = path.resolve(PUBLIC_PATH, 'assets');
 
 const config = {
     target: 'web',
@@ -134,7 +135,7 @@ const config = {
             filename: '[name].[contenthash].css',
         }),
         new CopyPlugin([
-            { from: FAVICON_PATH, to: PUBLIC_PATH },
+            { from: ASSETS_PATH, to: PUBLIC_ASSETS_PATH },
         ]),
     ],
 };
diff --git a/home/auth.go b/home/auth.go
index c72ca546..a2d6d5f2 100644
--- a/home/auth.go
+++ b/home/auth.go
@@ -380,11 +380,10 @@ func optionalAuth(handler func(http.ResponseWriter, *http.Request)) func(http.Re
 				}
 			}
 
-		} else if r.URL.Path == "/favicon.png" ||
-			strings.HasPrefix(r.URL.Path, "/login.") ||
-			strings.HasPrefix(r.URL.Path, "/__locales/") {
+		} else if strings.HasPrefix(r.URL.Path, "/assets/") ||
+			strings.HasPrefix(r.URL.Path, "/login.") {
 			// process as usual
-
+			// no additional auth requirements
 		} else if Context.auth != nil && Context.auth.AuthRequired() {
 			// redirect to login page if not authenticated
 			ok := false
diff --git a/home/control.go b/home/control.go
index 310b9f20..744fc327 100644
--- a/home/control.go
+++ b/home/control.go
@@ -188,7 +188,7 @@ func postInstall(handler func(http.ResponseWriter, *http.Request)) func(http.Res
 
 		if Context.firstRun &&
 			!strings.HasPrefix(r.URL.Path, "/install.") &&
-			r.URL.Path != "/favicon.png" {
+			!strings.HasPrefix(r.URL.Path, "/assets/") {
 			http.Redirect(w, r, "/install.html", http.StatusFound)
 			return
 		}