diff --git a/ethereal/assets/qml/wallet.qml b/ethereal/assets/qml/wallet.qml
index 628d9f96a6affe48a5828d4346a1450bca478826..4b252f200964e1049cb10756d26240290f81a187 100644
--- a/ethereal/assets/qml/wallet.qml
+++ b/ethereal/assets/qml/wallet.qml
@@ -248,9 +248,9 @@ ApplicationWindow {
 						text: "Client ID"
 					}
 					TextField {
-						text: eth.clientId()
+						text: eth.getCustomIdentifier()
 						onTextChanged: {
-							eth.changeClientId(text)
+							eth.setCustomIdentifier(text)
 						}
 					}
 				}
diff --git a/ethereal/gui.go b/ethereal/gui.go
index 1719d41b2a0996d4c9e54df831f77f4a2007af62..9f28045f86605a4be27c64a3a80a897048296ed0 100644
--- a/ethereal/gui.go
+++ b/ethereal/gui.go
@@ -9,6 +9,7 @@ import (
 	"github.com/ethereum/eth-go/ethlog"
 	"github.com/ethereum/eth-go/ethpub"
 	"github.com/ethereum/eth-go/ethutil"
+	"github.com/ethereum/eth-go/ethwire"
 	"github.com/ethereum/go-ethereum/utils"
 	"github.com/go-qml/qml"
 	"math/big"
@@ -36,11 +37,13 @@ type Gui struct {
 	logLevel ethlog.LogLevel
 	open     bool
 
-	Session string
+	Session        string
+	clientIdentity *ethwire.SimpleClientIdentity
+	config         *ethutil.ConfigManager
 }
 
 // Create GUI, but doesn't start it
-func NewWindow(ethereum *eth.Ethereum, session string, logLevel int) *Gui {
+func NewWindow(ethereum *eth.Ethereum, config *ethutil.ConfigManager, clientIdentity *ethwire.SimpleClientIdentity, session string, logLevel int) *Gui {
 	db, err := ethdb.NewLDBDatabase("tx_database")
 	if err != nil {
 		panic(err)
@@ -48,11 +51,10 @@ func NewWindow(ethereum *eth.Ethereum, session string, logLevel int) *Gui {
 
 	pub := ethpub.NewPEthereum(ethereum)
 
-	return &Gui{eth: ethereum, txDb: db, pub: pub, logLevel: ethlog.LogLevel(logLevel), Session: session, open: false}
+	return &Gui{eth: ethereum, txDb: db, pub: pub, logLevel: ethlog.LogLevel(logLevel), Session: session, open: false, clientIdentity: clientIdentity, config: config}
 }
 
 func (gui *Gui) Start(assetPath string) {
-	const version = "0.5.16"
 
 	defer gui.txDb.Close()
 
@@ -65,8 +67,6 @@ func (gui *Gui) Start(assetPath string) {
 		Init: func(p *ethpub.KeyVal, obj qml.Object) { p.Key = ""; p.Value = "" },
 	}})
 
-	ethutil.Config.SetClientString("Ethereal")
-
 	// Create a new QML engine
 	gui.engine = qml.NewEngine()
 	context := gui.engine.Context()
@@ -103,14 +103,14 @@ func (gui *Gui) Start(assetPath string) {
 		ethlog.AddLogSystem(gui)
 	}
 	win.Wait()
-	// need to silence gui logger after window closed otherwise logsystem hangs
-	gui.SetLogLevel(ethlog.Silence)
+	// need to silence gui logger after window closed otherwise logsystem hangs (but do not save loglevel)
+	gui.logLevel = ethlog.Silence
 	gui.open = false
 }
 
 func (gui *Gui) Stop() {
 	if gui.open {
-		gui.SetLogLevel(ethlog.Silence)
+		gui.logLevel = ethlog.Silence
 		gui.open = false
 		gui.win.Hide()
 	}
@@ -369,17 +369,19 @@ func (gui *Gui) Create(recipient, value, gas, gasPrice, data string) (*ethpub.PR
 	return gui.pub.Transact(gui.privateKey(), recipient, value, gas, gasPrice, data)
 }
 
-func (gui *Gui) ChangeClientId(id string) {
-	ethutil.Config.SetIdentifier(id)
+func (gui *Gui) SetCustomIdentifier(customIdentifier string) {
+	gui.clientIdentity.SetCustomIdentifier(customIdentifier)
+	gui.config.Save("id", customIdentifier)
 }
 
-func (gui *Gui) ClientId() string {
-	return ethutil.Config.Identifier
+func (gui *Gui) GetCustomIdentifier() string {
+	return gui.clientIdentity.GetCustomIdentifier()
 }
 
 // functions that allow Gui to implement interface ethlog.LogSystem
 func (gui *Gui) SetLogLevel(level ethlog.LogLevel) {
 	gui.logLevel = level
+	gui.config.Save("loglevel", level)
 }
 
 func (gui *Gui) GetLogLevel() ethlog.LogLevel {
diff --git a/ethereal/main.go b/ethereal/main.go
index f3f1d31400ed14a168694eb392958fe084583f10..645e8f2ce50153f76e5fa76bbf42593515461c56 100644
--- a/ethereal/main.go
+++ b/ethereal/main.go
@@ -8,6 +8,11 @@ import (
 	"runtime"
 )
 
+const (
+	ClientIdentifier = "Ethereal"
+	Version          = "0.5.16"
+)
+
 func main() {
 	// Leave QT on top at ALL times. Qt Needs to be initialized from the main thread
 	qml.Init(nil)
@@ -23,7 +28,8 @@ func main() {
 
 	// precedence: code-internal flag default < config file < environment variables < command line
 	Init() // parsing command line
-	utils.InitConfig(ConfigFile, Datadir, Identifier, "ETH")
+
+	config := utils.InitConfig(ConfigFile, Datadir, "ETH")
 
 	utils.InitDataDir(Datadir)
 
@@ -36,7 +42,9 @@ func main() {
 	// create, import, export keys
 	utils.KeyTasks(keyManager, KeyRing, GenAddr, SecretFile, ExportDir, NonInteractive)
 
-	ethereum := utils.NewEthereum(db, keyManager, UseUPnP, OutboundPort, MaxPeer)
+	clientIdentity := utils.NewClientIdentity(ClientIdentifier, Version, Identifier)
+
+	ethereum := utils.NewEthereum(db, clientIdentity, keyManager, UseUPnP, OutboundPort, MaxPeer)
 
 	if ShowGenesis {
 		utils.ShowGenesis(ethereum)
@@ -46,7 +54,7 @@ func main() {
 		utils.StartRpc(ethereum, RpcPort)
 	}
 
-	gui := NewWindow(ethereum, KeyRing, LogLevel)
+	gui := NewWindow(ethereum, config, clientIdentity, KeyRing, LogLevel)
 
 	utils.RegisterInterrupt(func(os.Signal) {
 		gui.Stop()
diff --git a/ethereum/main.go b/ethereum/main.go
index 1531871cb5874fc364f4ab1eff954db4e7331118..e4d73d49420ded3a1e8705b851b6546b00074536 100644
--- a/ethereum/main.go
+++ b/ethereum/main.go
@@ -6,6 +6,11 @@ import (
 	"runtime"
 )
 
+const (
+	ClientIdentifier = "Ethereum(G)"
+	Version          = "0.5.16"
+)
+
 var logger = ethlog.NewLogger("CLI")
 
 func main() {
@@ -15,7 +20,7 @@ func main() {
 
 	// precedence: code-internal flag default < config file < environment variables < command line
 	Init() // parsing command line
-	utils.InitConfig(ConfigFile, Datadir, Identifier, "ETH")
+	utils.InitConfig(ConfigFile, Datadir, "ETH")
 
 	utils.InitDataDir(Datadir)
 
@@ -28,7 +33,9 @@ func main() {
 	// create, import, export keys
 	utils.KeyTasks(keyManager, KeyRing, GenAddr, SecretFile, ExportDir, NonInteractive)
 
-	ethereum := utils.NewEthereum(db, keyManager, UseUPnP, OutboundPort, MaxPeer)
+	clientIdentity := utils.NewClientIdentity(ClientIdentifier, Version, Identifier)
+
+	ethereum := utils.NewEthereum(db, clientIdentity, keyManager, UseUPnP, OutboundPort, MaxPeer)
 
 	if ShowGenesis {
 		utils.ShowGenesis(ethereum)
diff --git a/utils/cmd.go b/utils/cmd.go
index e10addf6c0a670d9bdefe1527e8ae269478e1d70..889726b0493868d7fc358094157407a3d2266079 100644
--- a/utils/cmd.go
+++ b/utils/cmd.go
@@ -10,6 +10,7 @@ import (
 	"github.com/ethereum/eth-go/ethpub"
 	"github.com/ethereum/eth-go/ethrpc"
 	"github.com/ethereum/eth-go/ethutil"
+	"github.com/ethereum/eth-go/ethwire"
 	"io"
 	"log"
 	"os"
@@ -98,9 +99,9 @@ func InitLogging(Datadir string, LogFile string, LogLevel int, DebugFile string)
 	}
 }
 
-func InitConfig(ConfigFile string, Datadir string, Identifier string, EnvPrefix string) {
+func InitConfig(ConfigFile string, Datadir string, EnvPrefix string) *ethutil.ConfigManager {
 	InitDataDir(Datadir)
-	ethutil.ReadConfig(ConfigFile, Datadir, Identifier, EnvPrefix)
+	return ethutil.ReadConfig(ConfigFile, Datadir, EnvPrefix)
 }
 
 func exit(err error) {
@@ -122,8 +123,12 @@ func NewDatabase() ethutil.Database {
 	return db
 }
 
-func NewEthereum(db ethutil.Database, keyManager *ethcrypto.KeyManager, usePnp bool, OutboundPort string, MaxPeer int) *eth.Ethereum {
-	ethereum, err := eth.New(db, keyManager, eth.CapDefault, usePnp)
+func NewClientIdentity(clientIdentifier, version, customIdentifier string) *ethwire.SimpleClientIdentity {
+	return ethwire.NewSimpleClientIdentity(clientIdentifier, version, customIdentifier)
+}
+
+func NewEthereum(db ethutil.Database, clientIdentity ethwire.ClientIdentity, keyManager *ethcrypto.KeyManager, usePnp bool, OutboundPort string, MaxPeer int) *eth.Ethereum {
+	ethereum, err := eth.New(db, clientIdentity, keyManager, eth.CapDefault, usePnp)
 	if err != nil {
 		logger.Fatalln("eth start err:", err)
 	}
@@ -133,7 +138,7 @@ func NewEthereum(db ethutil.Database, keyManager *ethcrypto.KeyManager, usePnp b
 }
 
 func StartEthereum(ethereum *eth.Ethereum, UseSeed bool) {
-	logger.Infof("Starting Ethereum v%s", ethutil.Config.Ver)
+	logger.Infof("Starting %s", ethereum.ClientIdentity())
 	ethereum.Start(UseSeed)
 	RegisterInterrupt(func(sig os.Signal) {
 		ethereum.Stop()