diff --git a/cmd/ethereum/flags.go b/cmd/ethereum/flags.go
index 783944cf25d381a185069ff1c08ef8c3d6a389ac..0bea7379495ea2e2c177e279437251a42dbe2297 100644
--- a/cmd/ethereum/flags.go
+++ b/cmd/ethereum/flags.go
@@ -38,7 +38,8 @@ var (
 	StartRpc        bool
 	StartWebSockets bool
 	RpcPort         int
-	UseUPnP         bool
+	NatType         string
+	PMPGateway      string
 	OutboundPort    string
 	ShowGenesis     bool
 	AddPeer         string
@@ -84,7 +85,8 @@ func Init() {
 	flag.StringVar(&KeyRing, "keyring", "", "identifier for keyring to use")
 	flag.StringVar(&KeyStore, "keystore", "db", "system to store keyrings: db|file (db)")
 	flag.StringVar(&OutboundPort, "port", "30303", "listening port")
-	flag.BoolVar(&UseUPnP, "upnp", false, "enable UPnP support")
+	flag.StringVar(&NatType, "nat", "", "nat support (UPNP|PMP)")
+	flag.StringVar(&PMPGateway, "gateway", "", "PMP gateway IP")
 	flag.IntVar(&MaxPeer, "maxpeer", 10, "maximum desired peers")
 	flag.IntVar(&RpcPort, "rpcport", 8080, "port to start json-rpc server on")
 	flag.BoolVar(&StartRpc, "rpc", false, "start rpc server")
diff --git a/cmd/ethereum/main.go b/cmd/ethereum/main.go
index 43551fb3a5dd0e94ac2d0e744e24ee45006fd212..4f87ef17b19193360c31be461a39896aa78bc69c 100644
--- a/cmd/ethereum/main.go
+++ b/cmd/ethereum/main.go
@@ -69,9 +69,9 @@ func main() {
 	// create, import, export keys
 	utils.KeyTasks(keyManager, KeyRing, GenAddr, SecretFile, ExportDir, NonInteractive)
 
-	clientIdentity := utils.NewClientIdentity(ClientIdentifier, Version, Identifier)
+	clientIdentity := utils.NewClientIdentity(ClientIdentifier, Version, Identifier, string(keyManager.PublicKey()))
 
-	ethereum := utils.NewEthereum(db, clientIdentity, keyManager, UseUPnP, OutboundPort, MaxPeer)
+	ethereum := utils.NewEthereum(db, clientIdentity, keyManager, utils.NatType(NatType, PMPGateway), OutboundPort, MaxPeer)
 
 	if Dump {
 		var block *types.Block