diff --git a/cmd/console/main.go b/cmd/console/main.go
index 9020a12fecf2b5cec2d3bc6769ef1053ef7ca104..365dbec56080027f9b70e876fe3d166a8d2b7fb8 100644
--- a/cmd/console/main.go
+++ b/cmd/console/main.go
@@ -93,7 +93,7 @@ func main() {
 
 func run(ctx *cli.Context) {
 	jspath := ctx.GlobalString(utils.JSpathFlag.Name)
-	ipcpath := ctx.GlobalString(utils.IPCPathFlag.Name)
+	ipcpath := utils.IpcSocketPath(ctx)
 
 	repl := newJSRE(jspath, ipcpath)
 	repl.welcome(ipcpath)
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index 11ea231651e01500fba84c2eaa35aae3cbf33ab3..0f2438cfd54be62313ff84f1e533bdcf964f04ce 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -308,7 +308,7 @@ func console(ctx *cli.Context) {
 		ethereum,
 		ctx.String(utils.JSpathFlag.Name),
 		ctx.GlobalString(utils.RPCCORSDomainFlag.Name),
-		filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), "geth.ipc"),
+		utils.IpcSocketPath(ctx),
 		true,
 		nil,
 	)
@@ -330,7 +330,7 @@ func execJSFiles(ctx *cli.Context) {
 		ethereum,
 		ctx.String(utils.JSpathFlag.Name),
 		ctx.GlobalString(utils.RPCCORSDomainFlag.Name),
-		ctx.GlobalString(utils.IPCPathFlag.Name),
+		utils.IpcSocketPath(ctx),
 		false,
 		nil,
 	)
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index 80f21d50a10df287d3b562414bfdff0943bbd837..3626c36f20d5f59e80b4052878e84c055c577a99 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -385,9 +385,29 @@ func MakeAccountManager(ctx *cli.Context) *accounts.Manager {
 	return accounts.NewManager(ks)
 }
 
+func IpcSocketPath(ctx *cli.Context) (ipcpath string) {
+
+	if common.IsWindows() {
+		ipcpath = common.DefaultIpcPath()
+		if ipcpath != ctx.GlobalString(IPCPathFlag.Name) {
+			ipcpath = ctx.GlobalString(IPCPathFlag.Name)
+		}
+	} else {
+		ipcpath = common.DefaultIpcPath()
+		if ctx.GlobalString(IPCPathFlag.Name) != common.DefaultIpcPath() {
+			ipcpath = ctx.GlobalString(IPCPathFlag.Name)
+		} else if ctx.GlobalString(DataDirFlag.Name) != "" &&
+		ctx.GlobalString(DataDirFlag.Name) != common.DefaultDataDir() {
+			ipcpath = filepath.Join(ctx.GlobalString(DataDirFlag.Name), "geth.ipc")
+		}
+	}
+
+	return
+}
+
 func StartIPC(eth *eth.Ethereum, ctx *cli.Context) error {
 	config := comms.IpcConfig{
-		Endpoint: filepath.Join(ctx.GlobalString(DataDirFlag.Name), "geth.ipc"),
+		Endpoint: IpcSocketPath(ctx),
 	}
 
 	xeth := xeth.New(eth, nil)
diff --git a/common/path.go b/common/path.go
index 63a23abcd1ee5f936f5092a2cb0e6032db42645d..6e32596560bfde09c28cdd8b279ca68c0571fbe5 100644
--- a/common/path.go
+++ b/common/path.go
@@ -95,6 +95,9 @@ func DefaultDataDir() string {
 }
 
 func DefaultIpcPath() string {
+	if runtime.GOOS == "windows" {
+		return `\\.\pipe\geth.ipc`
+	}
 	return filepath.Join(DefaultDataDir(), "geth.ipc")
 }