diff --git a/cmd/geth/js.go b/cmd/geth/js.go
index a4b14d7b18c943ed648ccaa58dcc633f07883cdd..b01fd7e3602986c1c1a683badc1fde5b2b1f0e4b 100644
--- a/cmd/geth/js.go
+++ b/cmd/geth/js.go
@@ -27,6 +27,7 @@ import (
 	"sort"
 	"strings"
 
+	"github.com/codegangsta/cli"
 	"github.com/ethereum/go-ethereum/cmd/utils"
 	"github.com/ethereum/go-ethereum/common"
 	"github.com/ethereum/go-ethereum/common/registrar"
@@ -331,6 +332,23 @@ func (self *jsre) UnlockAccount(addr []byte) bool {
 	}
 }
 
+// preloadJSFiles loads JS files that the user has specified with ctx.PreLoadJSFlag into
+// the JSRE. If not all files could be loaded it will return an error describing the error.
+func (self *jsre) preloadJSFiles(ctx *cli.Context) error {
+	if ctx.GlobalString(utils.PreLoadJSFlag.Name) != "" {
+		assetPath := ctx.GlobalString(utils.JSpathFlag.Name)
+		jsFiles := strings.Split(ctx.GlobalString(utils.PreLoadJSFlag.Name), ",")
+		for _, file := range jsFiles {
+			filename := common.AbsolutePath(assetPath, strings.TrimSpace(file))
+			if err := self.re.Exec(filename); err != nil {
+				return fmt.Errorf("%s: %v", file, err)
+			}
+		}
+	}
+	return nil
+}
+
+// exec executes the JS file with the given filename and stops the JSRE
 func (self *jsre) exec(filename string) error {
 	if err := self.re.Exec(filename); err != nil {
 		self.re.Stop(false)
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index 645743c13ab6d650812f3f6968d30d50e3aaf08c..c0a7ba318f8144015dd6857749c07614112f805e 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -331,6 +331,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
 		utils.IPCApiFlag,
 		utils.IPCPathFlag,
 		utils.ExecFlag,
+		utils.PreLoadJSFlag,
 		utils.WhisperEnabledFlag,
 		utils.DevModeFlag,
 		utils.TestNetFlag,
@@ -427,6 +428,13 @@ func attach(ctx *cli.Context) {
 		true,
 	)
 
+	// preload user defined JS files into the console
+	err = repl.preloadJSFiles(ctx)
+	if err != nil {
+		utils.Fatalf("unable to preload JS file %v", err)
+	}
+
+	// in case the exec flag holds a JS statement execute it and return
 	if ctx.GlobalString(utils.ExecFlag.Name) != "" {
 		repl.batch(ctx.GlobalString(utils.ExecFlag.Name))
 	} else {
@@ -477,6 +485,13 @@ func console(ctx *cli.Context) {
 		ctx.GlobalString(utils.RPCCORSDomainFlag.Name),
 		client, true)
 
+	// preload user defined JS files into the console
+	err = repl.preloadJSFiles(ctx)
+	if err != nil {
+		utils.Fatalf("unable to preload JS file %v", err)
+	}
+
+	// in case the exec flag holds a JS statement execute it and return
 	if script := ctx.GlobalString(utils.ExecFlag.Name); script != "" {
 		repl.batch(script)
 	} else {
diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go
index e2adf730574a61470ade88dcf22e894aec54b168..5d36b5b1da55af65cfecd2bb01a29a13eb600efd 100644
--- a/cmd/geth/usage.go
+++ b/cmd/geth/usage.go
@@ -101,6 +101,7 @@ var AppHelpFlagGroups = []flagGroup{
 			utils.RPCCORSDomainFlag,
 			utils.JSpathFlag,
 			utils.ExecFlag,
+			utils.PreLoadJSFlag,
 		},
 	},
 	{
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 2f10938e3182dbe9cd56b774e83b426320497a20..4822a47f7929cb697c53781ab33d6422fa4715ed 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -296,6 +296,10 @@ var (
 		Name:  "exec",
 		Usage: "Execute JavaScript statement (only in combination with console/attach)",
 	}
+	PreLoadJSFlag = cli.StringFlag{
+		Name:  "preload",
+		Usage: "Comma separated list of JavaScript files to preload into the console",
+	}
 
 	// Network Settings
 	MaxPeersFlag = cli.IntFlag{