diff --git a/cmd/geth/js.go b/cmd/geth/js.go
index 6e4e3e0c145e7dfd43fc5b5d735fc95180e2c3ee..761943b639c0bc5ce685d93de05cc723edd5c582 100644
--- a/cmd/geth/js.go
+++ b/cmd/geth/js.go
@@ -220,6 +220,25 @@ func (self *jsre) loadAutoCompletion() {
 	}
 }
 
+func (self *jsre) batch(statement string) {
+	val, err := self.re.Run(statement)
+
+	if err != nil {
+		fmt.Printf("error: %v", err)
+	} else if val.IsDefined() && val.IsObject() {
+		obj, _ := self.re.Get("ret_result")
+		fmt.Printf("%v", obj)
+	} else if val.IsDefined() {
+		fmt.Printf("%v", val)
+	}
+
+	if self.atexit != nil {
+		self.atexit()
+	}
+
+	self.re.Stop(false)
+}
+
 // show summary of current geth instance
 func (self *jsre) welcome() {
 	self.re.Eval(`console.log('instance: ' + web3.version.client);`)
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index f1e8ace3d156445119608cadab8f5d89ed2d46f7..e5c3614fc94eca98fabad1ae0911e6d00eb8becd 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -255,6 +255,7 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
 		utils.IPCDisabledFlag,
 		utils.IPCApiFlag,
 		utils.IPCPathFlag,
+		utils.ExecFlag,
 		utils.WhisperEnabledFlag,
 		utils.VMDebugFlag,
 		utils.ProtocolVersionFlag,
@@ -337,8 +338,12 @@ func attach(ctx *cli.Context) {
 		true,
 		nil)
 
-	repl.welcome()
-	repl.interactive()
+	if ctx.GlobalString(utils.ExecFlag.Name) != "" {
+		repl.batch(ctx.GlobalString(utils.ExecFlag.Name))
+	} else {
+		repl.welcome()
+		repl.interactive()
+	}
 }
 
 func console(ctx *cli.Context) {
@@ -368,8 +373,12 @@ func console(ctx *cli.Context) {
 		nil,
 	)
 
-	repl.welcome()
-	repl.interactive()
+	if ctx.GlobalString(utils.ExecFlag.Name) != "" {
+		repl.batch(ctx.GlobalString(utils.ExecFlag.Name))
+	} else {
+		repl.welcome()
+		repl.interactive()
+	}
 
 	ethereum.Stop()
 	ethereum.WaitForShutdown()
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 092bc55118cbebb2781c56eb7b6ae3f248b300ab..a9d449d1fb584f41f38ca1df959ceaf3b30699f0 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -227,6 +227,10 @@ var (
 		Usage: "Filename for IPC socket/pipe",
 		Value: DirectoryString{common.DefaultIpcPath()},
 	}
+	ExecFlag = cli.StringFlag{
+		Name:  "exec",
+		Usage: "Execute javascript statement (only in combination with console/attach)",
+	}
 	// Network Settings
 	MaxPeersFlag = cli.IntFlag{
 		Name:  "maxpeers",
diff --git a/rpc/api/api_test.go b/rpc/api/api_test.go
index 3e464c2811cecf58e5bfd78ac657f5c157445640..7e273ef28fd7fa87b17e0d35e2f712572f5d5e05 100644
--- a/rpc/api/api_test.go
+++ b/rpc/api/api_test.go
@@ -3,12 +3,13 @@ package api
 import (
 	"testing"
 
-	"github.com/ethereum/go-ethereum/rpc/codec"
 	"encoding/json"
 	"strconv"
+
 	"github.com/ethereum/go-ethereum/common/compiler"
-	"github.com/ethereum/go-ethereum/rpc/shared"
 	"github.com/ethereum/go-ethereum/eth"
+	"github.com/ethereum/go-ethereum/rpc/codec"
+	"github.com/ethereum/go-ethereum/rpc/shared"
 	"github.com/ethereum/go-ethereum/xeth"
 )
 
@@ -58,11 +59,11 @@ func TestCompileSolidity(t *testing.T) {
 		t.Skip("WARNING: skipping test because of solc different version (%v, test written for %v, may need to update)", solc.Version(), solcVersion)
 	}
 	source := `contract test {\n` +
-	"   /// @notice Will multiply `a` by 7." + `\n` +
-	`   function multiply(uint a) returns(uint d) {\n` +
-	`       return a * 7;\n` +
-	`   }\n` +
-	`}\n`
+		"   /// @notice Will multiply `a` by 7." + `\n` +
+		`   function multiply(uint a) returns(uint d) {\n` +
+		`       return a * 7;\n` +
+		`   }\n` +
+		`}\n`
 
 	jsonstr := `{"jsonrpc":"2.0","method":"eth_compileSolidity","params":["` + source + `"],"id":64}`
 
diff --git a/rpc/api/eth.go b/rpc/api/eth.go
index 91577c4d55c41a10a6868ec0a33b2c53156b7606..cafa05e34025515c3cb605ee841d128a59a19d7c 100644
--- a/rpc/api/eth.go
+++ b/rpc/api/eth.go
@@ -250,7 +250,6 @@ func (self *ethApi) Sign(req *shared.Request) (interface{}, error) {
 	return v, nil
 }
 
-
 func (self *ethApi) PushTx(req *shared.Request) (interface{}, error) {
 	args := new(NewDataArgs)
 	if err := self.codec.Decode(req.Params, &args); err != nil {
diff --git a/rpc/api/eth_args.go b/rpc/api/eth_args.go
index 54eb7201dc5d636c05ac9dce5ec642d06185a514..02f438f0c30dabb1190d423847fe80b39e8fe322 100644
--- a/rpc/api/eth_args.go
+++ b/rpc/api/eth_args.go
@@ -227,32 +227,32 @@ func (args *GetDataArgs) UnmarshalJSON(b []byte) (err error) {
 }
 
 type NewDataArgs struct {
-    Data string
+	Data string
 }
 
 func (args *NewDataArgs) UnmarshalJSON(b []byte) (err error) {
-    var obj []interface{}
+	var obj []interface{}
 
-    if err := json.Unmarshal(b, &obj); err != nil {
-        return shared.NewDecodeParamError(err.Error())
-    }
+	if err := json.Unmarshal(b, &obj); err != nil {
+		return shared.NewDecodeParamError(err.Error())
+	}
 
-    // Check for sufficient params
-    if len(obj) < 1 {
-        return shared.NewInsufficientParamsError(len(obj), 1)
-    }
+	// Check for sufficient params
+	if len(obj) < 1 {
+		return shared.NewInsufficientParamsError(len(obj), 1)
+	}
 
-    data, ok := obj[0].(string)
-    if !ok {
-        return shared.NewInvalidTypeError("data", "not a string")
-    }
-    args.Data = data
+	data, ok := obj[0].(string)
+	if !ok {
+		return shared.NewInvalidTypeError("data", "not a string")
+	}
+	args.Data = data
 
-    if len(args.Data) == 0 {
-        return shared.NewValidationError("data", "is required")
-    }
+	if len(args.Data) == 0 {
+		return shared.NewValidationError("data", "is required")
+	}
 
-    return nil
+	return nil
 }
 
 type NewSigArgs struct {