diff --git a/Cargo.lock b/Cargo.lock
index ac6b5418abaccc981ffa155e6f8c18765e065be1..d06439e277d07e6f3b5adfee2823ab1d3ea3c095 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -517,6 +517,7 @@ dependencies = [
 name = "cms_rust"
 version = "0.1.0"
 dependencies = [
+ "actix-files",
  "actix-web",
  "actix-web-lab",
  "dirs",
diff --git a/Cargo.toml b/Cargo.toml
index c86923c22830affbe358278e647674e322210d0f..5bebde7a43a8c83b7f20a8e74f6b37f5c955b497 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -17,3 +17,4 @@ dirs = "4.0"
 structopt = "0.3"
 env_logger = "0.9"
 actix-web-lab = "0.17.0"
+actix-files = "0.6.2"
diff --git a/default_static/favicon.ico b/default_static/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..6c215345b05c43669984f26ba69e8d1e708608e2
Binary files /dev/null and b/default_static/favicon.ico differ
diff --git a/src/app/config.rs b/src/app/config.rs
index 42ce77848de5707a0e0386bcb28a3281a5906607..97e519bbb7d41bc2c1b359209d8897cfd97647ca 100644
--- a/src/app/config.rs
+++ b/src/app/config.rs
@@ -1,6 +1,5 @@
 use crate::app::AppArgs;
 use std::path::PathBuf;
-use structopt::StructOpt;
 
 #[derive(Clone)]
 pub enum AppContext {
@@ -22,8 +21,7 @@ pub struct AppConfig {
 }
 
 impl AppConfig {
-    pub fn new() -> Self {
-        let app_args = AppArgs::from_args();
+    pub fn new(app_args: AppArgs) -> Self {
         let exec_path = std::env::current_exe().unwrap();
         let exec_name = exec_path
             .file_name()
diff --git a/src/app/state.rs b/src/app/state.rs
index 8d0dc75548ddbf3cc1fe0fed60a191b53af49768..eb498c1c1e2c549dc7374756b14067e0e8f71af1 100644
--- a/src/app/state.rs
+++ b/src/app/state.rs
@@ -1,4 +1,5 @@
-use crate::app::{AppConfig, AppPreferences};
+use crate::app::{AppArgs, AppConfig, AppPreferences};
+use structopt::StructOpt;
 
 #[derive(Clone)]
 pub struct AppState {
@@ -11,7 +12,7 @@ pub struct AppState {
 impl AppState {
     pub fn new() -> Self {
         AppState {
-            config: AppConfig::new(),
+            config: AppConfig::new(AppArgs::from_args()),
             preferences: AppPreferences {},
         }
     }
diff --git a/src/main.rs b/src/main.rs
index c996be1f4371e3176c8f9ae649df1fb4db869b53..ca8ab2a631980029f3ee26a7212cb4ecfaca45cd 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,6 +4,7 @@ mod static_files;
 mod testing;
 mod tls_config;
 mod website;
+use actix_files::Files;
 use actix_web::{App, HttpServer};
 use actix_web_lab::middleware::RedirectHttps;
 use app::AppState;
@@ -29,8 +30,8 @@ async fn main() -> std::io::Result<()> {
     let port_tls = app_state.config.port_tls;
 
     let srv_conf = tls_config(&app_state.config);
-
-    let static_files_manager =
+    let static_dir = static_files_manager.dir.clone();
+    let mut_static_files_manager =
         actix_web::web::Data::new(std::sync::Mutex::new(static_files_manager));
 
     let app_state = actix_web::web::Data::new(std::sync::Mutex::new(app_state));
@@ -41,8 +42,10 @@ async fn main() -> std::io::Result<()> {
             .wrap(actix_web::middleware::Compress::default())
             .wrap(RedirectHttps::default().to_port(port_tls))
             .app_data(actix_web::web::Data::clone(&app_state))
-            .app_data(actix_web::web::Data::clone(&static_files_manager))
+            .app_data(actix_web::web::Data::clone(&mut_static_files_manager))
             .app_data(actix_web::web::Data::new(website.clone()))
+            .service(Files::new("/static/", &static_dir))
+            .service(service::files::favicon)
             .service(service::page)
     })
     .bind(format!("{}:{}", host, port))?
diff --git a/src/service/files.rs b/src/service/files.rs
new file mode 100644
index 0000000000000000000000000000000000000000..4800bfdb6877c7765b7c6c20580946cffd7e56d8
--- /dev/null
+++ b/src/service/files.rs
@@ -0,0 +1,11 @@
+use crate::static_files::StaticFilesManager;
+use actix_files::NamedFile;
+use actix_web::{get, web, Responder};
+
+#[get("/favicon.ico")]
+pub async fn favicon(
+    static_files_manager: web::Data<std::sync::Mutex<StaticFilesManager>>,
+) -> impl Responder {
+    let static_files_manager = static_files_manager.lock().unwrap();
+    NamedFile::open(static_files_manager.dir.join("default").join("favicon.ico"))
+}
diff --git a/src/service/mod.rs b/src/service/mod.rs
index f5f67f8cfe1c46654785127e661a3e00c05afaab..b27ee732153f842b45a10dd99898468a3e696b8d 100644
--- a/src/service/mod.rs
+++ b/src/service/mod.rs
@@ -1,2 +1,3 @@
+pub mod files;
 mod page;
 pub use page::*;
diff --git a/src/static_files.rs b/src/static_files.rs
index 4da405f36f67b5cfbac8679c84163147fa28c859..7f33f484afd3cbf5ae06747aa4787278232ca2c9 100644
--- a/src/static_files.rs
+++ b/src/static_files.rs
@@ -1,9 +1,10 @@
 use crate::app::AppState;
 use std::path::{Path, PathBuf};
 
+#[derive(Clone)]
 pub struct StaticFilesManager {
-    dir: PathBuf,
-    index: Vec<String>,
+    pub dir: PathBuf,
+    pub index: Vec<String>,
 }
 
 impl StaticFilesManager {