diff --git a/xmrstak/cli/cli-miner.cpp b/xmrstak/cli/cli-miner.cpp
index 3c3303eba50b9d7ba44b4f2b33cc76e488a68df3..639a28ef25bba3718613b00819785512e95770bb 100644
--- a/xmrstak/cli/cli-miner.cpp
+++ b/xmrstak/cli/cli-miner.cpp
@@ -85,7 +85,8 @@ void help()
 	cout<<"  --nvidia FILE         NVIDIA backend miner config file"<<endl;
 #endif
 	cout<<" "<<endl;
-	cout<<"The Following options temporary overwrites the config entries of \nthe pool with the highest weight:"<<endl;
+	cout<<"The following options can be used for automatic start without a guided config,"<<endl;
+	cout<<"If config exists then this pool will be top priority."<<endl;
 	cout<<"  -o, --url URL         pool url and port, e.g. pool.usxmrpool.com:3333"<<endl;
 	cout<<"  -O, --tls-url URL     TLS pool url and port, e.g. pool.usxmrpool.com:10443"<<endl;
 	cout<<"  -u, --user USERNAME   pool user name or wallet address"<<endl;
@@ -172,7 +173,7 @@ inline void prompt_once(bool& prompted)
 	}
 }
 
-void do_guided_config(bool userSetPasswd)
+void do_guided_config()
 {
 	using namespace xmrstak;
 
@@ -229,7 +230,7 @@ void do_guided_config(bool userSetPasswd)
 	}
 
 	auto& passwd = params::inst().poolPasswd;
-	if(passwd.empty() && (!userSetPasswd))
+	if(passwd.empty() && !params::inst().userSetPwd)
 	{
 		prompt_once(prompted);
 
@@ -373,7 +374,6 @@ int main(int argc, char *argv[])
 		params::inst().executablePrefix += seperator;
 	}
 
-	bool userSetPasswd = false;
 	bool uacDialog = true;
 	for(int i = 1; i < argc; ++i)
 	{
@@ -496,7 +496,7 @@ int main(int argc, char *argv[])
 				win_exit();
 				return 1;
 			}
-			userSetPasswd = true;
+			params::inst().userSetPwd = true;
 			params::inst().poolPasswd = argv[i];
 		}
 		else if(opName.compare("-c") == 0 || opName.compare("--config") == 0)
@@ -538,7 +538,7 @@ int main(int argc, char *argv[])
 	
 	// check if we need a guided start
 	if(!configEditor::file_exist(params::inst().configFile))
-		do_guided_config(userSetPasswd);
+		do_guided_config();
 
 	if(!jconf::inst()->parse_config(params::inst().configFile.c_str()))
 	{
diff --git a/xmrstak/jconf.cpp b/xmrstak/jconf.cpp
index 34bde6ce5fb9850ec009e2e56cc33fe78bdb96cc..f279f5242e4facb02554fff93425662a7e56dbf6 100644
--- a/xmrstak/jconf.cpp
+++ b/xmrstak/jconf.cpp
@@ -152,8 +152,8 @@ bool jconf::GetPoolConfig(size_t id, pool_cfg& cfg)
 	size_t dlt = wt_max - wt_min;
 	if(dlt != 0)
 	{
-		/* Normalise weights between 0 and 9.9 */
-		cfg.weight = double(cfg.raw_weight - wt_min) * 9.9;
+		/* Normalise weights between 0 and 9.8 */
+		cfg.weight = double(cfg.raw_weight - wt_min) * 9.8;
 		cfg.weight /= dlt;
 	}
 	else /* Special case - user selected same weights for everything */
diff --git a/xmrstak/misc/executor.cpp b/xmrstak/misc/executor.cpp
index 6f34d80a8216d38592bb23572180174f8994ee72..abeb3e2d8556e5d4a8db61bb90ed53d13ae6a964 100644
--- a/xmrstak/misc/executor.cpp
+++ b/xmrstak/misc/executor.cpp
@@ -497,8 +497,10 @@ void executor::ex_main()
 
 	set_timestamp();
 	size_t pc = jconf::inst()->GetPoolCount();
-	bool tls = true;
-	for(size_t i=0; i < pc; i++)
+	bool dev_tls = true;
+	bool already_have_cli_pool = false;
+	size_t i=0;
+	for(; i < pc; i++)
 	{
 		jconf::pool_cfg cfg;
  		jconf::inst()->GetPoolConfig(i, cfg);
@@ -509,49 +511,43 @@ void executor::ex_main()
 			win_exit();
 		}
 #endif
-		if(!cfg.tls) tls = false;
-		pools.emplace_back(i+1, cfg.sPoolAddr, cfg.sWalletAddr, cfg.sPasswd, cfg.weight, false, cfg.tls, cfg.tls_fingerprint, cfg.nicehash);
+		if(!cfg.tls) dev_tls = false;
+
+		if(!xmrstak::params::inst().poolURL.empty() && xmrstak::params::inst().poolURL == cfg.sPoolAddr)
+		{
+			auto& params = xmrstak::params::inst();
+			already_have_cli_pool = true;
+			
+			const char* wallet = params.poolUsername.empty() ? cfg.sWalletAddr : params.poolUsername.c_str();
+			const char* pwd = params.userSetPwd ? params.poolPasswd.c_str() : cfg.sPasswd;
+			
+			pools.emplace_back(i+1, cfg.sPoolAddr, wallet, pwd, 9.9, false, params.poolUseTls, cfg.tls_fingerprint, cfg.nicehash);
+		}
+		else
+			pools.emplace_back(i+1, cfg.sPoolAddr, cfg.sWalletAddr, cfg.sPasswd, cfg.weight, false, cfg.tls, cfg.tls_fingerprint, cfg.nicehash);
+	}
+
+	if(!xmrstak::params::inst().poolURL.empty() && !already_have_cli_pool)
+	{
+		auto& params = xmrstak::params::inst();
+		pools.emplace_front(i+1, params.poolURL.c_str(), params.poolUsername.c_str(), params.poolPasswd.c_str(), 9.9, false, params.poolUseTls, "", false);
 	}
 
 	if(jconf::inst()->IsCurrencyMonero())
 	{
-		if(tls)
+		if(dev_tls)
 			pools.emplace_front(0, "donate.xmr-stak.net:6666", "", "", 0.0, true, true, "", false);
 		else
 			pools.emplace_front(0, "donate.xmr-stak.net:3333", "", "", 0.0, true, false, "", false);
 	}
 	else
 	{
-		if(tls)
+		if(dev_tls)
 			pools.emplace_front(0, "donate.xmr-stak.net:7777", "", "", 0.0, true, true, "", true);
 		else
 			pools.emplace_front(0, "donate.xmr-stak.net:4444", "", "", 0.0, true, false, "", true);
 	}
 
-	/* find the pool with the highest weighting to allow overwriting of the
-	 * pool settings via command line options.
-	 */
-	std::vector<jpsock*> sorted_pools;
-	sorted_pools.reserve(pools.size());
-	for(jpsock& pool : pools)
-		sorted_pools.emplace_back(&pool);
-	std::sort(sorted_pools.begin(), sorted_pools.end(), [](jpsock* a, jpsock* b) { return b->get_pool_weight(true) < a->get_pool_weight(true); });
-
- 	// overwrite pool address if cli option is used
-	auto& poolURL = xmrstak::params::inst().poolURL;	
-	if(!poolURL.empty())
-	{
-		sorted_pools[0]->set_pool_addr(poolURL.c_str());
-	}
-	// overwrite user pool login name if cli option is used
-	auto& poolUsername = xmrstak::params::inst().poolUsername;
-	if(!poolUsername.empty())
-		sorted_pools[0]->set_user_login(poolUsername.c_str());
-	// overwrite user pool login password if cli option is used
-	auto& poolPasswd = xmrstak::params::inst().poolPasswd;
-	if(!poolPasswd.empty())
-		sorted_pools[0]->set_user_passwd(poolPasswd.c_str());
-
 	ex_event ev;
 	std::thread clock_thd(&executor::ex_clock_thd, this);
 
@@ -565,7 +561,7 @@ void executor::ex_main()
 	if(jconf::inst()->GetVerboseLevel() >= 4)
 		push_timed_event(ex_event(EV_HASHRATE_LOOP), jconf::inst()->GetAutohashTime());
 
-	size_t cnt = 0, i;
+	size_t cnt = 0;
 	while (true)
 	{
 		ev = oEventQ.pop();
diff --git a/xmrstak/net/jpsock.hpp b/xmrstak/net/jpsock.hpp
index ba5d1c8f4b1c5efdb7a702dd7562fb37b45fd06a..9d276b7240b04ef559ef9830fb760f8f273b113d 100644
--- a/xmrstak/net/jpsock.hpp
+++ b/xmrstak/net/jpsock.hpp
@@ -59,10 +59,6 @@ public:
 	inline const char* get_tls_fp() { return tls_fp.c_str(); }
 	inline bool is_nicehash() { return nicehash; }
 
-	inline void set_pool_addr(const char* sAddr) { net_addr = sAddr; }
-	inline void set_user_login(const char* sLogin) { usr_login = sLogin; }
-	inline void set_user_passwd(const char* sPassword) { usr_pass = sPassword; }
-
 	bool get_pool_motd(std::string& strin);
 
 	std::string&& get_call_error();
diff --git a/xmrstak/params.hpp b/xmrstak/params.hpp
index 8f1056c160df813f65c8ae2059f5e2036e4b3a6f..371a4fdeb297b72b6e8788c5e416d3c88cf63509 100644
--- a/xmrstak/params.hpp
+++ b/xmrstak/params.hpp
@@ -24,8 +24,9 @@ struct params
 	bool useNVIDIA;
 	bool useCPU;
 
-	bool poolUseTls;
+	bool poolUseTls = false;
 	std::string poolURL;
+	bool userSetPwd = false;
 	std::string poolPasswd;
 	std::string poolUsername;