diff --git a/ethereal/config.go b/ethereal/config.go
index a534bb182ae607864b6d25ee8286640229b86506..ac4484d0bd2291dd97bd87b5f566c49f05a8898f 100644
--- a/ethereal/config.go
+++ b/ethereal/config.go
@@ -16,6 +16,7 @@ var UseSeed bool
 var ImportKey string
 var ExportKey bool
 var DataDir string
+var AssetPath string
 
 func Init() {
 	flag.BoolVar(&StartConsole, "c", false, "debug and testing console")
@@ -29,6 +30,7 @@ func Init() {
 	flag.StringVar(&DataDir, "dir", ".ethereal", "ethereum data directory")
 	flag.StringVar(&ImportKey, "import", "", "imports the given private key (hex)")
 	flag.IntVar(&MaxPeer, "x", 5, "maximum desired peers")
+	flag.StringVar(&AssetPath, "asset_path", "", "absolute path to GUI assets directory")
 
 	flag.Parse()
 }
diff --git a/ethereal/ethereum.go b/ethereal/ethereum.go
index 618d2b00f74e7f9af2b3e24b60d208f900ba277f..99f3b0b5250e1cea617a15bdc860358c836556da 100644
--- a/ethereal/ethereum.go
+++ b/ethereal/ethereum.go
@@ -100,11 +100,11 @@ func main() {
 		os.Exit(0)
 	}
 
-	log.Printf("Starting Ethereum v%s\n", ethutil.Config.Ver)
+	log.Printf("Starting Ethereum GUI v%s\n", ethutil.Config.Ver)
 
 	// Set the max peers
 	ethereum.MaxPeers = MaxPeer
 
 	gui := ethui.New(ethereum)
-	gui.Start()
+	gui.Start(AssetPath)
 }
diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go
index c8f4bedabf4702af5d5e479fe739bc2ce0de0c76..89736ac29c27b0da075d53d298c3336f6fa08f1d 100644
--- a/ethereal/ui/gui.go
+++ b/ethereal/ui/gui.go
@@ -53,6 +53,7 @@ type Gui struct {
 	txDb *ethdb.LDBDatabase
 
 	addr []byte
+
 }
 
 // Create GUI, but doesn't start it
@@ -71,7 +72,7 @@ func New(ethereum *eth.Ethereum) *Gui {
 	return &Gui{eth: ethereum, lib: lib, txDb: db, addr: addr}
 }
 
-func (ui *Gui) Start() {
+func (ui *Gui) Start(assetPath string) {
 	defer ui.txDb.Close()
 
 	// Register ethereum functions
@@ -89,14 +90,16 @@ func (ui *Gui) Start() {
 
 	// Expose the eth library and the ui library to QML
 	context.SetVar("eth", ui.lib)
-	context.SetVar("ui", &UiLib{engine: ui.engine, eth: ui.eth})
+	uiLib := NewUiLib(ui.engine, ui.eth, assetPath)
+	context.SetVar("ui", uiLib)
 
 	// Load the main QML interface
-	component, err := ui.engine.LoadFile(AssetPath("qml/wallet.qml"))
+	component, err := ui.engine.LoadFile(uiLib.AssetPath("qml/wallet.qml"))
 	if err != nil {
+   	ethutil.Config.Log.Infoln("FATAL: asset not found: you can set an alternative asset path on on the command line using option 'asset_path'")
 		panic(err)
 	}
-	ui.engine.LoadFile(AssetPath("qml/transactions.qml"))
+	ui.engine.LoadFile(uiLib.AssetPath("qml/transactions.qml"))
 
 	ui.win = component.CreateWindow(nil)
 
diff --git a/ethereal/ui/ui_lib.go b/ethereal/ui/ui_lib.go
index 3997191fa4bab2c24c9a5bb2c935721024f9bcbe..4441a723897a79039a03bc1637d7249b12e236a7 100644
--- a/ethereal/ui/ui_lib.go
+++ b/ethereal/ui/ui_lib.go
@@ -16,6 +16,14 @@ type UiLib struct {
 	engine    *qml.Engine
 	eth       *eth.Ethereum
 	connected bool
+	assetPath string
+}
+
+func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib {
+	if assetPath == "" {
+		assetPath = DefaultAssetPath()
+	}
+	return &UiLib{engine: engine, eth: eth, assetPath: assetPath}
 }
 
 // Opens a QML file (external application)
@@ -45,10 +53,10 @@ func (ui *UiLib) ConnectToPeer(addr string) {
 }
 
 func (ui *UiLib) AssetPath(p string) string {
-	return AssetPath(p)
+	return path.Join(ui.assetPath, p)
 }
 
-func AssetPath(p string) string {
+func DefaultAssetPath() string {
 	var base string
 
 	// If the current working directory is the go-ethereum dir
@@ -72,5 +80,5 @@ func AssetPath(p string) string {
 		}
 	}
 
-	return path.Join(base, p)
+	return base
 }