diff --git a/src/cmd/nncp/main.go b/src/cmd/nncp/main.go
index 3970de1..eb31443 100644
--- a/src/cmd/nncp/main.go
+++ b/src/cmd/nncp/main.go
@@ -5,85 +5,114 @@ import (
 	"fmt"
 	"os"
 	"path"
+	"strings"
 
 	"go.cypherpunks.su/nncp/v8"
 )
 
-const (
-	CmdNameACK      = "nncp-ack"
-	CmdNameBundle   = "nncp-bundle"
-	CmdNameCall     = "nncp-call"
-	CmdNameCaller   = "nncp-caller"
-	CmdNameCfgDir   = "nncp-cfgdir"
-	CmdNameCfgEnc   = "nncp-cfgenc"
-	CmdNameCfgMin   = "nncp-cfgmin"
-	CmdNameCfgNew   = "nncp-cfgnew"
-	CmdNameCheck    = "nncp-check"
-	CmdNameCronExpr = "nncp-cronexpr"
-	CmdNameDaemon   = "nncp-daemon"
-	CmdNameExec     = "nncp-exec"
-	CmdNameFile     = "nncp-file"
-	CmdNameFreq     = "nncp-freq"
-	CmdNameHash     = "nncp-hash"
-	CmdNameLog      = "nncp-log"
-	CmdNameMain     = "nncp-main"
-	CmdNamePkt      = "nncp-pkt"
-	CmdNameReass    = "nncp-reass"
-	CmdNameRm       = "nncp-rm"
-	CmdNameStat     = "nncp-stat"
-	CmdNameToss     = "nncp-toss"
-	CmdNameTrns     = "nncp-trns"
-	CmdNameXfer     = "nncp-xfer"
-)
+var CmdMap map[string]string
+var cmdCall string
 
 func main() {
+	CmdMap := map[string]string{
+		"CmdNameACK":      "ack",
+		"CmdNameBundle":   "bundle",
+		"CmdNameCall":     "call",
+		"CmdNameCaller":   "caller",
+		"CmdNameCfgDir":   "cfgdir",
+		"CmdNameCfgEnc":   "cfgenc",
+		"CmdNameCfgMin":   "cfgmin",
+		"CmdNameCfgNew":   "cfgnew",
+		"CmdNameCheck":    "check",
+		"CmdNameCronExpr": "cronexpr",
+		"CmdNameDaemon":   "daemon",
+		"CmdNameExec":     "exec",
+		"CmdNameFile":     "file",
+		"CmdNameFreq":     "freq",
+		"CmdNameHash":     "hash",
+		"CmdNameLog":      "log",
+		"CmdNameMain":     "main",
+		"CmdNamePkt":      "pkt",
+		"CmdNameReass":    "reass",
+		"CmdNameRm":       "rm",
+		"CmdNameStat":     "stat",
+		"CmdNameToss":     "toss",
+		"CmdNameTrns":     "trns",
+		"CmdNameXfer":     "xfer"}
 	cmdName := path.Base(os.Args[0])
-	switch cmdName {
-	case CmdNameACK:
+
+	switch {
+	case cmdName == "nncp":
+		if len(os.Args) > 1 {
+			CmdPresent := false
+			for _, CmdArg := range CmdMap {
+				if CmdArg == os.Args[1] {
+					CmdPresent = true
+				}
+			}
+
+			if CmdPresent {
+				cmdCall = os.Args[1]
+				os.Args = append(os.Args[:1], os.Args[2:]...)
+			} else {
+				cmdCall = ""
+			}
+		} else {
+			cmdCall = ""
+			os.Args = os.Args[:1]
+		}
+	case strings.HasPrefix(cmdName, "nncp-"):
+		cmdCall, _ = strings.CutPrefix(cmdName, "nncp-")
+	default:
+		cmdCall = ""
+	}
+
+	switch cmdCall {
+	case CmdMap["CmdNameACK"]:
 		mainACK()
-	case CmdNameBundle:
+	case CmdMap["CmdNameBundle"]:
 		mainBundle()
-	case CmdNameCall:
+	case CmdMap["CmdNameCall"]:
 		mainCall()
-	case CmdNameCaller:
+	case CmdMap["CmdNameCaller"]:
 		mainCaller()
-	case CmdNameCfgDir:
+	case CmdMap["CmdNameCfgDir"]:
 		mainCfgDir()
-	case CmdNameCfgEnc:
+	case CmdMap["CmdNameCfgEnc"]:
 		mainCfgEnc()
-	case CmdNameCfgMin:
+	case CmdMap["CmdNameCfgMin"]:
 		mainCfgMin()
-	case CmdNameCfgNew:
+	case CmdMap["CmdNameCfgNew"]:
 		mainCfgNew()
-	case CmdNameCheck:
+	case CmdMap["CmdNameCheck"]:
 		mainCheck()
-	case CmdNameCronExpr:
+	case CmdMap["CmdNameCronExpr"]:
 		mainCronExpr()
-	case CmdNameDaemon:
+	case CmdMap["CmdNameDaemon"]:
 		mainDaemon()
-	case CmdNameExec:
+	case CmdMap["CmdNameExec"]:
 		mainExec()
-	case CmdNameFile:
+	case CmdMap["CmdNameFile"]:
 		mainFile()
-	case CmdNameFreq:
+	case CmdMap["CmdNameFreq"]:
 		mainFreq()
-	case CmdNameHash:
+	case CmdMap["CmdNameHash"]:
 		mainHash()
-	case CmdNameLog:
+	case CmdMap["CmdNameLog"]:
 		mainLog()
-	case CmdNamePkt:
+	case CmdMap["CmdNamePkt"]:
 		mainPkt()
-	case CmdNameReass:
+	case CmdMap["CmdNameReass"]:
 		mainReass()
-	case CmdNameRm:
+	case CmdMap["CmdNameRm"]:
 		mainRm()
-	case CmdNameStat:
+	case CmdMap["CmdNameStat"]:
 		mainStat()
-	case CmdNameToss:
+	case CmdMap["CmdNameToss"]:
 		mainToss()
-	case CmdNameTrns:
+	case CmdMap["CmdNameTrns"]:
 		mainTrns()
-	case CmdNameXfer:
+	case CmdMap["CmdNameXfer"]:
 		mainXfer()
 	default:
 		version := flag.Bool("version", false, "Print version information")
