diff --git a/engine/settings/src/directories.rs b/engine/settings/src/directories.rs
new file mode 100644
index 0000000..4a32128
--- /dev/null
+++ b/engine/settings/src/directories.rs
@@ -0,0 +1,26 @@
+use std::path::PathBuf;
+
+use crate::settings::UserSettings;
+
+pub struct Directories{
+	pub settings:PathBuf,
+	pub maps:PathBuf,
+	pub replays:PathBuf,
+}
+impl Directories{
+	pub fn user_settings(&self)->UserSettings{
+		crate::settings::read_user_settings(&self.settings)
+	}
+}
+impl Default for Directories{
+	fn default()->Self{
+		let dirs=directories::ProjectDirs::from("net.strafes","StrafesNET","Strafe Client").unwrap();
+		Self{
+			settings:dirs.config_dir().join("settings.conf"),
+			maps:dirs.cache_dir().join("maps"),
+			// separate directory for remote downloaded replays (cache)
+			// bots:dirs.cache_dir().join("bots"),
+			replays:dirs.data_local_dir().join("replays"),
+		}
+	}
+}
diff --git a/engine/settings/src/lib.rs b/engine/settings/src/lib.rs
index 6e98cef..a6db573 100644
--- a/engine/settings/src/lib.rs
+++ b/engine/settings/src/lib.rs
@@ -1 +1,2 @@
 pub mod settings;
+pub mod directories;
diff --git a/engine/settings/src/settings.rs b/engine/settings/src/settings.rs
index 942c99e..45acd22 100644
--- a/engine/settings/src/settings.rs
+++ b/engine/settings/src/settings.rs
@@ -74,9 +74,9 @@ sensitivity_y_from_x_ratio=1
 Sensitivity::DeriveY{x:0.0.001,y:DerivedSensitivity{ratio:1.0}}
 */
 
-pub fn read_user_settings()->UserSettings{
+pub fn read_user_settings(path:&std::path::Path)->UserSettings{
 	let mut cfg=configparser::ini::Ini::new();
-	if let Ok(_)=cfg.load("settings.conf"){
+	if let Ok(_)=cfg.load(path){
 		let (cfg_fov_x,cfg_fov_y)=(cfg.getfloat("camera","fov_x"),cfg.getfloat("camera","fov_y"));
 		let fov=match(cfg_fov_x,cfg_fov_y){
 			(Ok(Some(fov_x)),Ok(Some(fov_y)))=>Fov::Exactly {
@@ -136,4 +136,4 @@ pub fn read_user_settings()->UserSettings{
 	}else{
 		UserSettings::default()
 	}
-}
\ No newline at end of file
+}
diff --git a/strafe-client/src/window.rs b/strafe-client/src/window.rs
index 65097b4..df62246 100644
--- a/strafe-client/src/window.rs
+++ b/strafe-client/src/window.rs
@@ -4,7 +4,7 @@ use strafesnet_common::physics::{MiscInstruction,SetControlInstruction};
 use crate::file::LoadFormat;
 use crate::physics_worker::Instruction as PhysicsWorkerInstruction;
 use strafesnet_session::session::{self,SessionInputInstruction,SessionControlInstruction,SessionPlaybackInstruction};
-use strafesnet_settings::settings;
+use strafesnet_settings::directories;
 
 pub enum Instruction{
 	Resize(winit::dpi::PhysicalSize<u32>),
@@ -211,7 +211,7 @@ pub fn worker<'a>(
 	setup_context:crate::setup::SetupContext<'a>,
 )->crate::compat_worker::QNWorker<'a,TimedInstruction<Instruction,SessionTimeInner>>{
 	// WindowContextSetup::new
-	let user_settings=settings::read_user_settings();
+	let user_settings=directories::Directories::default().user_settings();
 
 	let mut graphics=strafesnet_graphics::graphics::GraphicsState::new(&setup_context.device,&setup_context.queue,&setup_context.config);
 	graphics.load_user_settings(&user_settings);