diff --git a/cmd/podmanV2/Makefile b/cmd/podmanV2/Makefile
index c951cbdd94..8a924670a2 100644
--- a/cmd/podmanV2/Makefile
+++ b/cmd/podmanV2/Makefile
@@ -1,7 +1,9 @@
 all: podman podman-remote
 
+BUILD_TAGS='ABISupport systemd varlink seccomp selinux exclude_graphdriver_devicemapper'
+
 podman:
-	CGO_ENABLED=1 GO111MODULE=off go build -tags 'ABISupport systemd varlink seccomp selinux'
+	CGO_ENABLED=1 GO111MODULE=off go build -tags $(BUILD_TAGS)
 
 podman-remote:
 	CGO_ENABLED=1 GO111MODULE=off go build -tags '!ABISupport systemd seccomp selinux' -o podmanV2-remote
diff --git a/cmd/podmanV2/common/create.go b/cmd/podmanV2/common/create.go
index ecaaf38fbf..0b2f4532cb 100644
--- a/cmd/podmanV2/common/create.go
+++ b/cmd/podmanV2/common/create.go
@@ -2,30 +2,15 @@ package common
 
 import (
 	"fmt"
-	"os"
 
 	buildahcli "github.com/containers/buildah/pkg/cli"
-	"github.com/containers/common/pkg/config"
-	"github.com/sirupsen/logrus"
+	"github.com/containers/libpod/cmd/podmanV2/registry"
 	"github.com/spf13/pflag"
 )
 
-const (
-	sizeWithUnitFormat = "(format: `<number>[<unit>]`, where unit = b (bytes), k (kilobytes), m (megabytes), or g (gigabytes))"
-)
+const sizeWithUnitFormat = "(format: `<number>[<unit>]`, where unit = b (bytes), k (kilobytes), m (megabytes), or g (gigabytes))"
 
-var (
-	defaultContainerConfig = getDefaultContainerConfig()
-)
-
-func getDefaultContainerConfig() *config.Config {
-	defaultContainerConfig, err := config.Default()
-	if err != nil {
-		logrus.Error(err)
-		os.Exit(1)
-	}
-	return defaultContainerConfig
-}
+var containerConfig = registry.NewPodmanConfig()
 
 func GetCreateFlags(cf *ContainerCLIOpts) *pflag.FlagSet {
 	createFlags := pflag.FlagSet{}
@@ -337,13 +322,13 @@ func GetCreateFlags(cf *ContainerCLIOpts) *pflag.FlagSet {
 		"override-arch", "",
 		"use `ARCH` instead of the architecture of the machine for choosing images",
 	)
-	//markFlagHidden(createFlags, "override-arch")
+	// markFlagHidden(createFlags, "override-arch")
 	createFlags.StringVar(
 		&cf.OverrideOS,
 		"override-os", "",
 		"use `OS` instead of the running OS for choosing images",
 	)
-	//markFlagHidden(createFlags, "override-os")
+	// markFlagHidden(createFlags, "override-os")
 	createFlags.StringVar(
 		&cf.PID,
 		"pid", getDefaultPidNS(),
@@ -407,7 +392,7 @@ func GetCreateFlags(cf *ContainerCLIOpts) *pflag.FlagSet {
 	createFlags.StringArrayVar(
 		&cf.SecurityOpt,
 		"security-opt", getDefaultSecurityOptions(),
-		fmt.Sprintf("Security Options"),
+		"Security Options",
 	)
 	createFlags.StringVar(
 		&cf.ShmSize,
@@ -421,7 +406,7 @@ func GetCreateFlags(cf *ContainerCLIOpts) *pflag.FlagSet {
 	)
 	createFlags.UintVar(
 		&cf.StopTimeout,
-		"stop-timeout", defaultContainerConfig.Engine.StopTimeout,
+		"stop-timeout", containerConfig.Engine.StopTimeout,
 		"Timeout (in seconds) to stop a container. Default is 10",
 	)
 	createFlags.StringSliceVar(
@@ -513,7 +498,7 @@ func GetCreateFlags(cf *ContainerCLIOpts) *pflag.FlagSet {
 	return &createFlags
 }
 
-func AliasFlags(f *pflag.FlagSet, name string) pflag.NormalizedName {
+func AliasFlags(_ *pflag.FlagSet, name string) pflag.NormalizedName {
 	switch name {
 	case "healthcheck-command":
 		name = "health-cmd"
diff --git a/cmd/podmanV2/common/default.go b/cmd/podmanV2/common/default.go
index bd793f168c..853f87ab66 100644
--- a/cmd/podmanV2/common/default.go
+++ b/cmd/podmanV2/common/default.go
@@ -8,6 +8,7 @@ import (
 	"github.com/containers/libpod/pkg/apparmor"
 	"github.com/containers/libpod/pkg/cgroups"
 	"github.com/containers/libpod/pkg/rootless"
+	"github.com/containers/libpod/pkg/specgen"
 	"github.com/containers/libpod/pkg/sysinfo"
 	"github.com/opencontainers/selinux/go-selinux"
 )
@@ -31,13 +32,13 @@ var (
 // once we are "on" the host system.
 func getDefaultSecurityOptions() []string {
 	securityOpts := []string{}
-	if defaultContainerConfig.Containers.SeccompProfile != "" && defaultContainerConfig.Containers.SeccompProfile != parse.SeccompDefaultPath {
-		securityOpts = append(securityOpts, fmt.Sprintf("seccomp=%s", defaultContainerConfig.Containers.SeccompProfile))
+	if containerConfig.Containers.SeccompProfile != "" && containerConfig.Containers.SeccompProfile != parse.SeccompDefaultPath {
+		securityOpts = append(securityOpts, fmt.Sprintf("seccomp=%s", containerConfig.Containers.SeccompProfile))
 	}
-	if apparmor.IsEnabled() && defaultContainerConfig.Containers.ApparmorProfile != "" {
-		securityOpts = append(securityOpts, fmt.Sprintf("apparmor=%s", defaultContainerConfig.Containers.ApparmorProfile))
+	if apparmor.IsEnabled() && containerConfig.Containers.ApparmorProfile != "" {
+		securityOpts = append(securityOpts, fmt.Sprintf("apparmor=%s", containerConfig.Containers.ApparmorProfile))
 	}
-	if selinux.GetEnabled() && !defaultContainerConfig.Containers.EnableLabeling {
+	if selinux.GetEnabled() && !containerConfig.Containers.EnableLabeling {
 		securityOpts = append(securityOpts, fmt.Sprintf("label=%s", selinux.DisableSecOpt()[0]))
 	}
 	return securityOpts
@@ -45,66 +46,66 @@ func getDefaultSecurityOptions() []string {
 
 // getDefaultSysctls
 func getDefaultSysctls() []string {
-	return defaultContainerConfig.Containers.DefaultSysctls
+	return containerConfig.Containers.DefaultSysctls
 }
 
 func getDefaultVolumes() []string {
-	return defaultContainerConfig.Containers.Volumes
+	return containerConfig.Containers.Volumes
 }
 
 func getDefaultDevices() []string {
-	return defaultContainerConfig.Containers.Devices
+	return containerConfig.Containers.Devices
 }
 
 func getDefaultDNSServers() []string { //nolint
-	return defaultContainerConfig.Containers.DNSServers
+	return containerConfig.Containers.DNSServers
 }
 
 func getDefaultDNSSearches() []string { //nolint
-	return defaultContainerConfig.Containers.DNSSearches
+	return containerConfig.Containers.DNSSearches
 }
 
 func getDefaultDNSOptions() []string { //nolint
-	return defaultContainerConfig.Containers.DNSOptions
+	return containerConfig.Containers.DNSOptions
 }
 
 func getDefaultEnv() []string {
-	return defaultContainerConfig.Containers.Env
+	return containerConfig.Containers.Env
 }
 
 func getDefaultInitPath() string {
-	return defaultContainerConfig.Containers.InitPath
+	return containerConfig.Containers.InitPath
 }
 
 func getDefaultIPCNS() string {
-	return defaultContainerConfig.Containers.IPCNS
+	return containerConfig.Containers.IPCNS
 }
 
 func getDefaultPidNS() string {
-	return defaultContainerConfig.Containers.PidNS
+	return containerConfig.Containers.PidNS
 }
 
 func getDefaultNetNS() string { //nolint
-	if defaultContainerConfig.Containers.NetNS == "private" && rootless.IsRootless() {
-		return "slirp4netns"
+	if containerConfig.Containers.NetNS == string(specgen.Private) && rootless.IsRootless() {
+		return string(specgen.Slirp)
 	}
-	return defaultContainerConfig.Containers.NetNS
+	return containerConfig.Containers.NetNS
 }
 
 func getDefaultCgroupNS() string {
-	return defaultContainerConfig.Containers.CgroupNS
+	return containerConfig.Containers.CgroupNS
 }
 
 func getDefaultUTSNS() string {
-	return defaultContainerConfig.Containers.UTSNS
+	return containerConfig.Containers.UTSNS
 }
 
 func getDefaultShmSize() string {
-	return defaultContainerConfig.Containers.ShmSize
+	return containerConfig.Containers.ShmSize
 }
 
 func getDefaultUlimits() []string {
-	return defaultContainerConfig.Containers.DefaultUlimits
+	return containerConfig.Containers.DefaultUlimits
 }
 
 func getDefaultUserNS() string {
@@ -112,14 +113,14 @@ func getDefaultUserNS() string {
 	if userns != "" {
 		return userns
 	}
-	return defaultContainerConfig.Containers.UserNS
+	return containerConfig.Containers.UserNS
 }
 
 func getDefaultPidsLimit() int64 {
 	if rootless.IsRootless() {
 		cgroup2, _ := cgroups.IsCgroup2UnifiedMode()
 		if cgroup2 {
-			return defaultContainerConfig.Containers.PidsLimit
+			return containerConfig.Containers.PidsLimit
 		}
 	}
 	return sysinfo.GetDefaultPidsLimit()
@@ -130,5 +131,5 @@ func getDefaultPidsDescription() string {
 }
 
 func GetDefaultDetachKeys() string {
-	return defaultContainerConfig.Engine.DetachKeys
+	return containerConfig.Engine.DetachKeys
 }
diff --git a/cmd/podmanV2/common/netflags.go b/cmd/podmanV2/common/netflags.go
index 758f155c88..41eed2988d 100644
--- a/cmd/podmanV2/common/netflags.go
+++ b/cmd/podmanV2/common/netflags.go
@@ -4,18 +4,10 @@ import (
 	"net"
 
 	"github.com/containers/libpod/pkg/domain/entities"
-	"github.com/containers/libpod/pkg/rootless"
 	"github.com/spf13/cobra"
 	"github.com/spf13/pflag"
 )
 
-func getDefaultNetwork() string {
-	if rootless.IsRootless() {
-		return "slirp4netns"
-	}
-	return "bridge"
-}
-
 func GetNetFlags() *pflag.FlagSet {
 	netFlags := pflag.FlagSet{}
 	netFlags.StringSlice(
@@ -23,15 +15,15 @@ func GetNetFlags() *pflag.FlagSet {
 		"Add a custom host-to-IP mapping (host:ip) (default [])",
 	)
 	netFlags.StringSlice(
-		"dns", []string{},
+		"dns", getDefaultDNSServers(),
 		"Set custom DNS servers",
 	)
 	netFlags.StringSlice(
-		"dns-opt", []string{},
+		"dns-opt", getDefaultDNSOptions(),
 		"Set custom DNS options",
 	)
 	netFlags.StringSlice(
-		"dns-search", []string{},
+		"dns-search", getDefaultDNSSearches(),
 		"Set custom DNS search domains",
 	)
 	netFlags.String(
@@ -43,7 +35,7 @@ func GetNetFlags() *pflag.FlagSet {
 		"Container MAC address (e.g. 92:d0:c6:0a:29:33)",
 	)
 	netFlags.String(
-		"network", getDefaultNetwork(),
+		"network", getDefaultNetNS(),
 		"Connect a container to a network",
 	)
 	netFlags.StringSliceP(
diff --git a/cmd/podmanV2/containers/attach.go b/cmd/podmanV2/containers/attach.go
index d62dcff86d..9b6de00511 100644
--- a/cmd/podmanV2/containers/attach.go
+++ b/cmd/podmanV2/containers/attach.go
@@ -23,7 +23,6 @@ var (
 			}
 			return nil
 		},
-		PreRunE: preRunE,
 		Example: `podman attach ctrID
   podman attach 1234
   podman attach --no-stdin foobar`,
diff --git a/cmd/podmanV2/containers/commit.go b/cmd/podmanV2/containers/commit.go
index 28eb42f334..083fcbc6c1 100644
--- a/cmd/podmanV2/containers/commit.go
+++ b/cmd/podmanV2/containers/commit.go
@@ -17,12 +17,11 @@ var (
 	commitDescription = `Create an image from a container's changes. Optionally tag the image created, set the author with the --author flag, set the commit message with the --message flag, and make changes to the instructions with the --change flag.`
 
 	commitCommand = &cobra.Command{
-		Use:     "commit [flags] CONTAINER [IMAGE]",
-		Short:   "Create new image based on the changed container",
-		Long:    commitDescription,
-		RunE:    commit,
-		PreRunE: preRunE,
-		Args:    cobra.MinimumNArgs(1),
+		Use:   "commit [flags] CONTAINER [IMAGE]",
+		Short: "Create new image based on the changed container",
+		Long:  commitDescription,
+		RunE:  commit,
+		Args:  cobra.MinimumNArgs(1),
 		Example: `podman commit -q --message "committing container to image" reverent_golick image-committed
   podman commit -q --author "firstName lastName" reverent_golick image-committed
   podman commit -q --pause=false containerID image-committed
diff --git a/cmd/podmanV2/containers/container.go b/cmd/podmanV2/containers/container.go
index b922eea05b..30829991df 100644
--- a/cmd/podmanV2/containers/container.go
+++ b/cmd/podmanV2/containers/container.go
@@ -13,12 +13,11 @@ import (
 var (
 	// Command: podman _container_
 	containerCmd = &cobra.Command{
-		Use:               "container",
-		Short:             "Manage containers",
-		Long:              "Manage containers",
-		TraverseChildren:  true,
-		PersistentPreRunE: preRunE,
-		RunE:              registry.SubCommandExists,
+		Use:              "container",
+		Short:            "Manage containers",
+		Long:             "Manage containers",
+		TraverseChildren: true,
+		RunE:             registry.SubCommandExists,
 	}
 
 	defaultContainerConfig = getDefaultContainerConfig()
@@ -29,13 +28,6 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: containerCmd,
 	})
-	containerCmd.SetHelpTemplate(registry.HelpTemplate())
-	containerCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
-	_, err := registry.NewContainerEngine(cmd, args)
-	return err
 }
 
 func getDefaultContainerConfig() *config.Config {
diff --git a/cmd/podmanV2/containers/create.go b/cmd/podmanV2/containers/create.go
index 63daf17028..8cfb745396 100644
--- a/cmd/podmanV2/containers/create.go
+++ b/cmd/podmanV2/containers/create.go
@@ -17,12 +17,11 @@ var (
 
   The container ID is then printed to stdout. You can then start it at any time with the podman start <container_id> command. The container will be created with the initial state 'created'.`
 	createCommand = &cobra.Command{
-		Use:               "create [flags] IMAGE [COMMAND [ARG...]]",
-		Short:             "Create but do not start a container",
-		Long:              createDescription,
-		RunE:              create,
-		PersistentPreRunE: preRunE,
-		Args:              cobra.MinimumNArgs(1),
+		Use:   "create [flags] IMAGE [COMMAND [ARG...]]",
+		Short: "Create but do not start a container",
+		Long:  createDescription,
+		RunE:  create,
+		Args:  cobra.MinimumNArgs(1),
 		Example: `podman create alpine ls
   podman create --annotation HELLO=WORLD alpine ls
   podman create -t -i --name myctr alpine ls`,
diff --git a/cmd/podmanV2/containers/diff.go b/cmd/podmanV2/containers/diff.go
index 3009cdfad5..eb76858f37 100644
--- a/cmd/podmanV2/containers/diff.go
+++ b/cmd/podmanV2/containers/diff.go
@@ -11,12 +11,11 @@ import (
 var (
 	// podman container _diff_
 	diffCmd = &cobra.Command{
-		Use:     "diff [flags] CONTAINER",
-		Args:    registry.IdOrLatestArgs,
-		Short:   "Inspect changes on container's file systems",
-		Long:    `Displays changes on a container filesystem.  The container will be compared to its parent layer.`,
-		PreRunE: preRunE,
-		RunE:    diff,
+		Use:   "diff [flags] CONTAINER",
+		Args:  registry.IdOrLatestArgs,
+		Short: "Inspect changes on container's file systems",
+		Long:  `Displays changes on a container filesystem.  The container will be compared to its parent layer.`,
+		RunE:  diff,
 		Example: `podman container diff myCtr
   podman container diff -l --format json myCtr`,
 	}
diff --git a/cmd/podmanV2/containers/exec.go b/cmd/podmanV2/containers/exec.go
index 4bff57dbb9..b4583909e6 100644
--- a/cmd/podmanV2/containers/exec.go
+++ b/cmd/podmanV2/containers/exec.go
@@ -16,11 +16,10 @@ var (
 	execDescription = `Execute the specified command inside a running container.
 `
 	execCommand = &cobra.Command{
-		Use:     "exec [flags] CONTAINER [COMMAND [ARG...]]",
-		Short:   "Run a process in a running container",
-		Long:    execDescription,
-		PreRunE: preRunE,
-		RunE:    exec,
+		Use:   "exec [flags] CONTAINER [COMMAND [ARG...]]",
+		Short: "Run a process in a running container",
+		Long:  execDescription,
+		RunE:  exec,
 		Example: `podman exec -it ctrID ls
   podman exec -it -w /tmp myCtr pwd
   podman exec --user root ctrID ls`,
diff --git a/cmd/podmanV2/containers/export.go b/cmd/podmanV2/containers/export.go
index b93b60878e..a7befdae93 100644
--- a/cmd/podmanV2/containers/export.go
+++ b/cmd/podmanV2/containers/export.go
@@ -17,12 +17,11 @@ var (
 		" and saves it on the local machine."
 
 	exportCommand = &cobra.Command{
-		Use:               "export [flags] CONTAINER",
-		Short:             "Export container's filesystem contents as a tar archive",
-		Long:              exportDescription,
-		PersistentPreRunE: preRunE,
-		RunE:              export,
-		Args:              cobra.ExactArgs(1),
+		Use:   "export [flags] CONTAINER",
+		Short: "Export container's filesystem contents as a tar archive",
+		Long:  exportDescription,
+		RunE:  export,
+		Args:  cobra.ExactArgs(1),
 		Example: `podman export ctrID > myCtr.tar
   podman export --output="myCtr.tar" ctrID`,
 	}
@@ -37,8 +36,6 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: exportCommand,
 	})
-	exportCommand.SetHelpTemplate(registry.HelpTemplate())
-	exportCommand.SetUsageTemplate(registry.UsageTemplate())
 	flags := exportCommand.Flags()
 	flags.StringVarP(&exportOpts.Output, "output", "o", "", "Write to a specified file (default: stdout, which must be redirected)")
 }
diff --git a/cmd/podmanV2/containers/init.go b/cmd/podmanV2/containers/init.go
index dd1e1d21b5..0060c8f093 100644
--- a/cmd/podmanV2/containers/init.go
+++ b/cmd/podmanV2/containers/init.go
@@ -14,11 +14,10 @@ var (
 	initDescription = `Initialize one or more containers, creating the OCI spec and mounts for inspection. Container names or IDs can be used.`
 
 	initCommand = &cobra.Command{
-		Use:     "init [flags] CONTAINER [CONTAINER...]",
-		Short:   "Initialize one or more containers",
-		Long:    initDescription,
-		PreRunE: preRunE,
-		RunE:    initContainer,
+		Use:   "init [flags] CONTAINER [CONTAINER...]",
+		Short: "Initialize one or more containers",
+		Long:  initDescription,
+		RunE:  initContainer,
 		Args: func(cmd *cobra.Command, args []string) error {
 			return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
 		},
diff --git a/cmd/podmanV2/containers/inspect.go b/cmd/podmanV2/containers/inspect.go
index 3147426cb4..e6d4cb6bcb 100644
--- a/cmd/podmanV2/containers/inspect.go
+++ b/cmd/podmanV2/containers/inspect.go
@@ -18,11 +18,10 @@ import (
 var (
 	// podman container _inspect_
 	inspectCmd = &cobra.Command{
-		Use:     "inspect [flags] CONTAINER",
-		Short:   "Display the configuration of a container",
-		Long:    `Displays the low-level information on a container identified by name or ID.`,
-		PreRunE: preRunE,
-		RunE:    inspect,
+		Use:   "inspect [flags] CONTAINER",
+		Short: "Display the configuration of a container",
+		Long:  `Displays the low-level information on a container identified by name or ID.`,
+		RunE:  inspect,
 		Example: `podman container inspect myCtr
   podman container inspect -l --format '{{.Id}} {{.Config.Labels}}'`,
 	}
diff --git a/cmd/podmanV2/containers/kill.go b/cmd/podmanV2/containers/kill.go
index 3155d1f34f..e145fbc3f0 100644
--- a/cmd/podmanV2/containers/kill.go
+++ b/cmd/podmanV2/containers/kill.go
@@ -16,11 +16,10 @@ import (
 var (
 	killDescription = "The main process inside each container specified will be sent SIGKILL, or any signal specified with option --signal."
 	killCommand     = &cobra.Command{
-		Use:               "kill [flags] CONTAINER [CONTAINER...]",
-		Short:             "Kill one or more running containers with a specific signal",
-		Long:              killDescription,
-		RunE:              kill,
-		PersistentPreRunE: preRunE,
+		Use:   "kill [flags] CONTAINER [CONTAINER...]",
+		Short: "Kill one or more running containers with a specific signal",
+		Long:  killDescription,
+		RunE:  kill,
 		Args: func(cmd *cobra.Command, args []string) error {
 			return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
 		},
diff --git a/cmd/podmanV2/containers/logs.go b/cmd/podmanV2/containers/logs.go
index d1a179495f..db549c03bd 100644
--- a/cmd/podmanV2/containers/logs.go
+++ b/cmd/podmanV2/containers/logs.go
@@ -26,11 +26,10 @@ var (
   This does not guarantee execution order when combined with podman run (i.e., your run may not have generated any logs at the time you execute podman logs).
 `
 	logsCommand = &cobra.Command{
-		Use:     "logs [flags] CONTAINER [CONTAINER...]",
-		Short:   "Fetch the logs of one or more container",
-		Long:    logsDescription,
-		RunE:    logs,
-		PreRunE: preRunE,
+		Use:   "logs [flags] CONTAINER [CONTAINER...]",
+		Short: "Fetch the logs of one or more container",
+		Long:  logsDescription,
+		RunE:  logs,
 		Example: `podman logs ctrID
   podman logs --names ctrID1 ctrID2
   podman logs --tail 2 mywebserver
@@ -39,11 +38,10 @@ var (
 	}
 
 	containerLogsCommand = &cobra.Command{
-		Use:     logsCommand.Use,
-		Short:   logsCommand.Short,
-		Long:    logsCommand.Long,
-		PreRunE: logsCommand.PreRunE,
-		RunE:    logsCommand.RunE,
+		Use:   logsCommand.Use,
+		Short: logsCommand.Short,
+		Long:  logsCommand.Long,
+		RunE:  logsCommand.RunE,
 		Example: `podman container logs ctrID
 		podman container logs --names ctrID1 ctrID2
 		podman container logs --tail 2 mywebserver
@@ -59,9 +57,6 @@ func init() {
 		Command: logsCommand,
 	})
 
-	logsCommand.SetHelpTemplate(registry.HelpTemplate())
-	logsCommand.SetUsageTemplate(registry.UsageTemplate())
-
 	flags := logsCommand.Flags()
 	logsFlags(flags)
 
diff --git a/cmd/podmanV2/containers/mount.go b/cmd/podmanV2/containers/mount.go
index 4f7b95d981..dbd83de576 100644
--- a/cmd/podmanV2/containers/mount.go
+++ b/cmd/podmanV2/containers/mount.go
@@ -23,16 +23,15 @@ var (
 `
 
 	mountCommand = &cobra.Command{
-		Use:     "mount [flags] [CONTAINER]",
-		Short:   "Mount a working container's root filesystem",
-		Long:    mountDescription,
-		PreRunE: preRunE,
-		RunE:    mount,
+		Use:   "mount [flags] [CONTAINER]",
+		Short: "Mount a working container's root filesystem",
+		Long:  mountDescription,
+		RunE:  mount,
 		Args: func(cmd *cobra.Command, args []string) error {
 			return parse.CheckAllLatestAndCIDFile(cmd, args, true, false)
 		},
 		Annotations: map[string]string{
-			registry.RootRequired: "true",
+			registry.ParentNSRequired: "",
 		},
 	}
 )
diff --git a/cmd/podmanV2/containers/pause.go b/cmd/podmanV2/containers/pause.go
index a9b91b68f5..d5493167cd 100644
--- a/cmd/podmanV2/containers/pause.go
+++ b/cmd/podmanV2/containers/pause.go
@@ -15,11 +15,10 @@ import (
 var (
 	pauseDescription = `Pauses one or more running containers.  The container name or ID can be used.`
 	pauseCommand     = &cobra.Command{
-		Use:               "pause [flags] CONTAINER [CONTAINER...]",
-		Short:             "Pause all the processes in one or more containers",
-		Long:              pauseDescription,
-		RunE:              pause,
-		PersistentPreRunE: preRunE,
+		Use:   "pause [flags] CONTAINER [CONTAINER...]",
+		Short: "Pause all the processes in one or more containers",
+		Long:  pauseDescription,
+		RunE:  pause,
 		Example: `podman pause mywebserver
   podman pause 860a4b23
   podman pause -a`,
@@ -35,8 +34,6 @@ func init() {
 	})
 	flags := pauseCommand.Flags()
 	flags.BoolVarP(&pauseOpts.All, "all", "a", false, "Pause all running containers")
-	pauseCommand.SetHelpTemplate(registry.HelpTemplate())
-	pauseCommand.SetUsageTemplate(registry.UsageTemplate())
 }
 
 func pause(cmd *cobra.Command, args []string) error {
diff --git a/cmd/podmanV2/containers/ps.go b/cmd/podmanV2/containers/ps.go
index 8ebbf6ebf5..355b1b4be6 100644
--- a/cmd/podmanV2/containers/ps.go
+++ b/cmd/podmanV2/containers/ps.go
@@ -24,12 +24,11 @@ import (
 var (
 	psDescription = "Prints out information about the containers"
 	psCommand     = &cobra.Command{
-		Use:     "ps",
-		Args:    checkFlags,
-		Short:   "List containers",
-		Long:    psDescription,
-		RunE:    ps,
-		PreRunE: preRunE,
+		Use:   "ps",
+		Args:  checkFlags,
+		Short: "List containers",
+		Long:  psDescription,
+		RunE:  ps,
 		Example: `podman ps -a
   podman ps -a --format "{{.ID}}  {{.Image}}  {{.Labels}}  {{.Mounts}}"
   podman ps --size --sort names`,
diff --git a/cmd/podmanV2/containers/restart.go b/cmd/podmanV2/containers/restart.go
index 5f1d3fe51b..becc566160 100644
--- a/cmd/podmanV2/containers/restart.go
+++ b/cmd/podmanV2/containers/restart.go
@@ -19,11 +19,10 @@ var (
   A timeout before forcibly stopping can be set, but defaults to %d seconds.`, defaultContainerConfig.Engine.StopTimeout)
 
 	restartCommand = &cobra.Command{
-		Use:               "restart [flags] CONTAINER [CONTAINER...]",
-		Short:             "Restart one or more containers",
-		Long:              restartDescription,
-		RunE:              restart,
-		PersistentPreRunE: preRunE,
+		Use:   "restart [flags] CONTAINER [CONTAINER...]",
+		Short: "Restart one or more containers",
+		Long:  restartDescription,
+		RunE:  restart,
 		Args: func(cmd *cobra.Command, args []string) error {
 			return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
 		},
diff --git a/cmd/podmanV2/containers/rm.go b/cmd/podmanV2/containers/rm.go
index 75655e4cd7..916dd2577b 100644
--- a/cmd/podmanV2/containers/rm.go
+++ b/cmd/podmanV2/containers/rm.go
@@ -19,11 +19,10 @@ var (
 
   Command does not remove images. Running or unusable containers will not be removed without the -f option.`
 	rmCommand = &cobra.Command{
-		Use:               "rm [flags] CONTAINER [CONTAINER...]",
-		Short:             "Remove one or more containers",
-		Long:              rmDescription,
-		RunE:              rm,
-		PersistentPreRunE: preRunE,
+		Use:   "rm [flags] CONTAINER [CONTAINER...]",
+		Short: "Remove one or more containers",
+		Long:  rmDescription,
+		RunE:  rm,
 		Args: func(cmd *cobra.Command, args []string) error {
 			return parse.CheckAllLatestAndCIDFile(cmd, args, false, true)
 		},
diff --git a/cmd/podmanV2/containers/run.go b/cmd/podmanV2/containers/run.go
index 0bf0f90f87..ca9db88f8e 100644
--- a/cmd/podmanV2/containers/run.go
+++ b/cmd/podmanV2/containers/run.go
@@ -19,11 +19,10 @@ import (
 var (
 	runDescription = "Runs a command in a new container from the given image"
 	runCommand     = &cobra.Command{
-		Use:     "run [flags] IMAGE [COMMAND [ARG...]]",
-		Short:   "Run a command in a new container",
-		Long:    runDescription,
-		PreRunE: preRunE,
-		RunE:    run,
+		Use:   "run [flags] IMAGE [COMMAND [ARG...]]",
+		Short: "Run a command in a new container",
+		Long:  runDescription,
+		RunE:  run,
 		Example: `podman run imageID ls -alF /etc
   podman run --network=host imageID dnf -y install java
   podman run --volume /var/hostdir:/var/ctrdir -i -t fedora /bin/bash`,
@@ -57,13 +56,12 @@ func init() {
 }
 
 func run(cmd *cobra.Command, args []string) error {
-	var (
-		err error
-	)
+	var err error
 	cliVals.Net, err = common.NetFlagsToNetOptions(cmd)
 	if err != nil {
 		return err
 	}
+
 	if af := cliVals.Authfile; len(af) > 0 {
 		if _, err := os.Stat(af); err != nil {
 			return errors.Wrapf(err, "error checking authfile path %s", af)
@@ -74,11 +72,7 @@ func run(cmd *cobra.Command, args []string) error {
 		return err
 	}
 
-	ie, err := registry.NewImageEngine(cmd, args)
-	if err != nil {
-		return err
-	}
-	br, err := ie.Exists(registry.GetContext(), args[0])
+	br, err := registry.ImageEngine().Exists(registry.GetContext(), args[0])
 	if err != nil {
 		return err
 	}
@@ -90,7 +84,7 @@ func run(cmd *cobra.Command, args []string) error {
 		if pullPolicy == config.PullImageNever {
 			return errors.New("unable to find a name and tag match for busybox in repotags: no such image")
 		}
-		_, pullErr := ie.Pull(registry.GetContext(), args[0], entities.ImagePullOptions{
+		_, pullErr := registry.ImageEngine().Pull(registry.GetContext(), args[0], entities.ImagePullOptions{
 			Authfile: cliVals.Authfile,
 			Quiet:    cliVals.Quiet,
 		})
@@ -131,6 +125,7 @@ func run(cmd *cobra.Command, args []string) error {
 		return err
 	}
 	runOpts.Spec = s
+
 	report, err := registry.ContainerEngine().ContainerRun(registry.GetContext(), runOpts)
 	// report.ExitCode is set by ContainerRun even it it returns an error
 	if report != nil {
diff --git a/cmd/podmanV2/containers/start.go b/cmd/podmanV2/containers/start.go
index 0ae2f6d502..b5ed6d6f66 100644
--- a/cmd/podmanV2/containers/start.go
+++ b/cmd/podmanV2/containers/start.go
@@ -16,12 +16,11 @@ import (
 var (
 	startDescription = `Starts one or more containers.  The container name or ID can be used.`
 	startCommand     = &cobra.Command{
-		Use:     "start [flags] CONTAINER [CONTAINER...]",
-		Short:   "Start one or more containers",
-		Long:    startDescription,
-		RunE:    start,
-		PreRunE: preRunE,
-		Args:    cobra.MinimumNArgs(1),
+		Use:   "start [flags] CONTAINER [CONTAINER...]",
+		Short: "Start one or more containers",
+		Long:  startDescription,
+		RunE:  start,
+		Args:  cobra.MinimumNArgs(1),
 		Example: `podman start --latest
   podman start 860a4b231279 5421ab43b45
   podman start --interactive --attach imageID`,
diff --git a/cmd/podmanV2/containers/stop.go b/cmd/podmanV2/containers/stop.go
index 53ec2934d4..d94df69be6 100644
--- a/cmd/podmanV2/containers/stop.go
+++ b/cmd/podmanV2/containers/stop.go
@@ -16,11 +16,10 @@ var (
 
   A timeout to forcibly stop the container can also be set but defaults to %d seconds otherwise.`, defaultContainerConfig.Engine.StopTimeout)
 	stopCommand = &cobra.Command{
-		Use:               "stop [flags] CONTAINER [CONTAINER...]",
-		Short:             "Stop one or more containers",
-		Long:              stopDescription,
-		RunE:              stop,
-		PersistentPreRunE: preRunE,
+		Use:   "stop [flags] CONTAINER [CONTAINER...]",
+		Short: "Stop one or more containers",
+		Long:  stopDescription,
+		RunE:  stop,
 		Args: func(cmd *cobra.Command, args []string) error {
 			return parse.CheckAllLatestAndCIDFile(cmd, args, false, true)
 		},
@@ -63,11 +62,6 @@ func stop(cmd *cobra.Command, args []string) error {
 		stopOptions.Timeout = stopTimeout
 	}
 
-	// TODO How do we access global attributes?
-	//if c.Bool("trace") {
-	//	span, _ := opentracing.StartSpanFromContext(Ctx, "stopCmd")
-	//	defer span.Finish()
-	//}
 	responses, err := registry.ContainerEngine().ContainerStop(context.Background(), args, stopOptions)
 	if err != nil {
 		return err
diff --git a/cmd/podmanV2/containers/top.go b/cmd/podmanV2/containers/top.go
index a86c12e2a2..233085e75e 100644
--- a/cmd/podmanV2/containers/top.go
+++ b/cmd/podmanV2/containers/top.go
@@ -26,12 +26,11 @@ var (
 	topOptions = entities.TopOptions{}
 
 	topCommand = &cobra.Command{
-		Use:               "top [flags] CONTAINER [FORMAT-DESCRIPTORS|ARGS]",
-		Short:             "Display the running processes of a container",
-		Long:              topDescription,
-		PersistentPreRunE: preRunE,
-		RunE:              top,
-		Args:              cobra.ArbitraryArgs,
+		Use:   "top [flags] CONTAINER [FORMAT-DESCRIPTORS|ARGS]",
+		Short: "Display the running processes of a container",
+		Long:  topDescription,
+		RunE:  top,
+		Args:  cobra.ArbitraryArgs,
 		Example: `podman top ctrID
 podman top --latest
 podman top ctrID pid seccomp args %C
@@ -45,9 +44,6 @@ func init() {
 		Command: topCommand,
 	})
 
-	topCommand.SetHelpTemplate(registry.HelpTemplate())
-	topCommand.SetUsageTemplate(registry.UsageTemplate())
-
 	flags := topCommand.Flags()
 	flags.SetInterspersed(false)
 	flags.BoolVar(&topOptions.ListDescriptors, "list-descriptors", false, "")
diff --git a/cmd/podmanV2/containers/unmount.go b/cmd/podmanV2/containers/unmount.go
index 2a6ef14b05..ef6add950a 100644
--- a/cmd/podmanV2/containers/unmount.go
+++ b/cmd/podmanV2/containers/unmount.go
@@ -23,7 +23,6 @@ var (
 		Short:   "Unmounts working container's root filesystem",
 		Long:    description,
 		RunE:    unmount,
-		PreRunE: preRunE,
 		Args: func(cmd *cobra.Command, args []string) error {
 			return parse.CheckAllLatestAndCIDFile(cmd, args, false, false)
 		},
diff --git a/cmd/podmanV2/containers/unpause.go b/cmd/podmanV2/containers/unpause.go
index 6a3179f10a..8b8cde9b28 100644
--- a/cmd/podmanV2/containers/unpause.go
+++ b/cmd/podmanV2/containers/unpause.go
@@ -15,11 +15,10 @@ import (
 var (
 	unpauseDescription = `Unpauses one or more previously paused containers.  The container name or ID can be used.`
 	unpauseCommand     = &cobra.Command{
-		Use:               "unpause [flags] CONTAINER [CONTAINER...]",
-		Short:             "Unpause the processes in one or more containers",
-		Long:              unpauseDescription,
-		RunE:              unpause,
-		PersistentPreRunE: preRunE,
+		Use:   "unpause [flags] CONTAINER [CONTAINER...]",
+		Short: "Unpause the processes in one or more containers",
+		Long:  unpauseDescription,
+		RunE:  unpause,
 		Example: `podman unpause ctrID
   podman unpause --all`,
 	}
diff --git a/cmd/podmanV2/containers/wait.go b/cmd/podmanV2/containers/wait.go
index 3d11c581ec..0a165317b9 100644
--- a/cmd/podmanV2/containers/wait.go
+++ b/cmd/podmanV2/containers/wait.go
@@ -17,12 +17,11 @@ var (
 	waitDescription = `Block until one or more containers stop and then print their exit codes.
 `
 	waitCommand = &cobra.Command{
-		Use:               "wait [flags] CONTAINER [CONTAINER...]",
-		Short:             "Block on one or more containers",
-		Long:              waitDescription,
-		RunE:              wait,
-		PersistentPreRunE: preRunE,
-		Args:              registry.IdOrLatestArgs,
+		Use:   "wait [flags] CONTAINER [CONTAINER...]",
+		Short: "Block on one or more containers",
+		Long:  waitDescription,
+		RunE:  wait,
+		Args:  registry.IdOrLatestArgs,
 		Example: `podman wait --latest
   podman wait --interval 5000 ctrID
   podman wait ctrID1 ctrID2`,
diff --git a/cmd/podmanV2/diff.go b/cmd/podmanV2/diff.go
index 6e42633700..73f4661db5 100644
--- a/cmd/podmanV2/diff.go
+++ b/cmd/podmanV2/diff.go
@@ -35,9 +35,6 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: diffCmd,
 	})
-	diffCmd.SetHelpTemplate(registry.HelpTemplate())
-	diffCmd.SetUsageTemplate(registry.UsageTemplate())
-
 	flags := diffCmd.Flags()
 	flags.BoolVar(&diffOpts.Archive, "archive", true, "Save the diff as a tar archive")
 	_ = flags.MarkHidden("archive")
@@ -49,23 +46,13 @@ func init() {
 }
 
 func diff(cmd *cobra.Command, args []string) error {
-	ie, err := registry.NewImageEngine(cmd, args)
-	if err != nil {
-		return err
-	}
-
-	if found, err := ie.Exists(registry.GetContext(), args[0]); err != nil {
+	if found, err := registry.ImageEngine().Exists(registry.GetContext(), args[0]); err != nil {
 		return err
 	} else if found.Value {
 		return images.Diff(cmd, args, diffOpts)
 	}
 
-	ce, err := registry.NewContainerEngine(cmd, args)
-	if err != nil {
-		return err
-	}
-
-	if found, err := ce.ContainerExists(registry.GetContext(), args[0]); err != nil {
+	if found, err := registry.ContainerEngine().ContainerExists(registry.GetContext(), args[0]); err != nil {
 		return err
 	} else if found.Value {
 		return containers.Diff(cmd, args, diffOpts)
diff --git a/cmd/podmanV2/healthcheck/healthcheck.go b/cmd/podmanV2/healthcheck/healthcheck.go
index 2af398ff05..e859f94630 100644
--- a/cmd/podmanV2/healthcheck/healthcheck.go
+++ b/cmd/podmanV2/healthcheck/healthcheck.go
@@ -9,12 +9,11 @@ import (
 var (
 	// Command: healthcheck
 	healthCmd = &cobra.Command{
-		Use:               "healthcheck",
-		Short:             "Manage Healthcheck",
-		Long:              "Manage Healthcheck",
-		TraverseChildren:  true,
-		PersistentPreRunE: preRunE,
-		RunE:              registry.SubCommandExists,
+		Use:              "healthcheck",
+		Short:            "Manage Healthcheck",
+		Long:             "Manage Healthcheck",
+		TraverseChildren: true,
+		RunE:             registry.SubCommandExists,
 	}
 )
 
@@ -23,11 +22,4 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: healthCmd,
 	})
-	healthCmd.SetHelpTemplate(registry.HelpTemplate())
-	healthCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
-	_, err := registry.NewContainerEngine(cmd, args)
-	return err
 }
diff --git a/cmd/podmanV2/images/diff.go b/cmd/podmanV2/images/diff.go
index e913a603a8..b54cb39a82 100644
--- a/cmd/podmanV2/images/diff.go
+++ b/cmd/podmanV2/images/diff.go
@@ -11,12 +11,11 @@ import (
 var (
 	// podman container _inspect_
 	diffCmd = &cobra.Command{
-		Use:     "diff [flags] CONTAINER",
-		Args:    registry.IdOrLatestArgs,
-		Short:   "Inspect changes on image's file systems",
-		Long:    `Displays changes on a image's filesystem.  The image will be compared to its parent layer.`,
-		PreRunE: preRunE,
-		RunE:    diff,
+		Use:   "diff [flags] CONTAINER",
+		Args:  registry.IdOrLatestArgs,
+		Short: "Inspect changes on image's file systems",
+		Long:  `Displays changes on a image's filesystem.  The image will be compared to its parent layer.`,
+		RunE:  diff,
 		Example: `podman image diff myImage
   podman image diff --format json redis:alpine`,
 	}
diff --git a/cmd/podmanV2/images/history.go b/cmd/podmanV2/images/history.go
index e3bb7a0515..d2e880ef76 100644
--- a/cmd/podmanV2/images/history.go
+++ b/cmd/podmanV2/images/history.go
@@ -25,13 +25,12 @@ var (
 
 	// podman _history_
 	historyCmd = &cobra.Command{
-		Use:               "history [flags] IMAGE",
-		Short:             "Show history of a specified image",
-		Long:              long,
-		Example:           "podman history quay.io/fedora/fedora",
-		Args:              cobra.ExactArgs(1),
-		PersistentPreRunE: preRunE,
-		RunE:              history,
+		Use:     "history [flags] IMAGE",
+		Short:   "Show history of a specified image",
+		Long:    long,
+		Example: "podman history quay.io/fedora/fedora",
+		Args:    cobra.ExactArgs(1),
+		RunE:    history,
 	}
 
 	opts = struct {
@@ -48,9 +47,6 @@ func init() {
 		Command: historyCmd,
 	})
 
-	historyCmd.SetHelpTemplate(registry.HelpTemplate())
-	historyCmd.SetUsageTemplate(registry.UsageTemplate())
-
 	flags := historyCmd.Flags()
 	flags.StringVar(&opts.format, "format", "", "Change the output to JSON or a Go template")
 	flags.BoolVarP(&opts.human, "human", "H", true, "Display sizes and dates in human readable format")
diff --git a/cmd/podmanV2/images/image.go b/cmd/podmanV2/images/image.go
index 9fc7b21d19..7b469bc591 100644
--- a/cmd/podmanV2/images/image.go
+++ b/cmd/podmanV2/images/image.go
@@ -9,12 +9,11 @@ import (
 var (
 	// Command: podman _image_
 	imageCmd = &cobra.Command{
-		Use:               "image",
-		Short:             "Manage images",
-		Long:              "Manage images",
-		TraverseChildren:  true,
-		PersistentPreRunE: preRunE,
-		RunE:              registry.SubCommandExists,
+		Use:              "image",
+		Short:            "Manage images",
+		Long:             "Manage images",
+		TraverseChildren: true,
+		RunE:             registry.SubCommandExists,
 	}
 )
 
@@ -23,13 +22,4 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: imageCmd,
 	})
-	imageCmd.SetHelpTemplate(registry.HelpTemplate())
-	imageCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
-	if _, err := registry.NewImageEngine(cmd, args); err != nil {
-		return err
-	}
-	return nil
 }
diff --git a/cmd/podmanV2/images/images.go b/cmd/podmanV2/images/images.go
index d00f0996ed..588369a7ef 100644
--- a/cmd/podmanV2/images/images.go
+++ b/cmd/podmanV2/images/images.go
@@ -15,7 +15,6 @@ var (
 		Args:    listCmd.Args,
 		Short:   listCmd.Short,
 		Long:    listCmd.Long,
-		PreRunE: preRunE,
 		RunE:    listCmd.RunE,
 		Example: strings.Replace(listCmd.Example, "podman image list", "podman images", -1),
 	}
@@ -26,8 +25,6 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: imagesCmd,
 	})
-	imagesCmd.SetHelpTemplate(registry.HelpTemplate())
-	imagesCmd.SetUsageTemplate(registry.UsageTemplate())
 
 	imageListFlagSet(imagesCmd.Flags())
 }
diff --git a/cmd/podmanV2/images/import.go b/cmd/podmanV2/images/import.go
index 09a15585f5..c86db34bff 100644
--- a/cmd/podmanV2/images/import.go
+++ b/cmd/podmanV2/images/import.go
@@ -18,11 +18,10 @@ var (
   Note remote tar balls can be specified, via web address.
   Optionally tag the image. You can specify the instructions using the --change option.`
 	importCommand = &cobra.Command{
-		Use:               "import [flags] PATH [REFERENCE]",
-		Short:             "Import a tarball to create a filesystem image",
-		Long:              importDescription,
-		RunE:              importCon,
-		PersistentPreRunE: preRunE,
+		Use:   "import [flags] PATH [REFERENCE]",
+		Short: "Import a tarball to create a filesystem image",
+		Long:  importDescription,
+		RunE:  importCon,
 		Example: `podman import http://example.com/ctr.tar url-image
   cat ctr.tar | podman -q import --message "importing the ctr.tar tarball" - image-imported
   cat ctr.tar | podman import -`,
@@ -39,8 +38,6 @@ func init() {
 		Command: importCommand,
 	})
 
-	importCommand.SetHelpTemplate(registry.HelpTemplate())
-	importCommand.SetUsageTemplate(registry.UsageTemplate())
 	flags := importCommand.Flags()
 	flags.StringArrayVarP(&importOpts.Changes, "change", "c", []string{}, "Apply the following possible instructions to the created image (default []): CMD | ENTRYPOINT | ENV | EXPOSE | LABEL | STOPSIGNAL | USER | VOLUME | WORKDIR")
 	flags.StringVarP(&importOpts.Message, "message", "m", "", "Set commit message for imported image")
diff --git a/cmd/podmanV2/images/load.go b/cmd/podmanV2/images/load.go
index 315dbed3ab..004daa2882 100644
--- a/cmd/podmanV2/images/load.go
+++ b/cmd/podmanV2/images/load.go
@@ -20,12 +20,11 @@ import (
 var (
 	loadDescription = "Loads an image from a locally stored archive (tar file) into container storage."
 	loadCommand     = &cobra.Command{
-		Use:               "load [flags] [NAME[:TAG]]",
-		Short:             "Load an image from container archive",
-		Long:              loadDescription,
-		RunE:              load,
-		Args:              cobra.MaximumNArgs(1),
-		PersistentPreRunE: preRunE,
+		Use:   "load [flags] [NAME[:TAG]]",
+		Short: "Load an image from container archive",
+		Long:  loadDescription,
+		RunE:  load,
+		Args:  cobra.MaximumNArgs(1),
 	}
 )
 
@@ -39,8 +38,6 @@ func init() {
 		Command: loadCommand,
 	})
 
-	loadCommand.SetHelpTemplate(registry.HelpTemplate())
-	loadCommand.SetUsageTemplate(registry.UsageTemplate())
 	flags := loadCommand.Flags()
 	flags.StringVarP(&loadOpts.Input, "input", "i", "", "Read from specified archive file (default: stdin)")
 	flags.BoolVarP(&loadOpts.Quiet, "quiet", "q", false, "Suppress the output")
diff --git a/cmd/podmanV2/images/pull.go b/cmd/podmanV2/images/pull.go
index c7e3254094..74090dee46 100644
--- a/cmd/podmanV2/images/pull.go
+++ b/cmd/podmanV2/images/pull.go
@@ -7,8 +7,6 @@ import (
 	"github.com/containers/image/v5/types"
 	"github.com/containers/libpod/cmd/podmanV2/registry"
 	"github.com/containers/libpod/pkg/domain/entities"
-	"github.com/opentracing/opentracing-go"
-	"github.com/pkg/errors"
 	"github.com/spf13/cobra"
 	"github.com/spf13/pflag"
 )
@@ -28,11 +26,11 @@ var (
 
 	// Command: podman pull
 	pullCmd = &cobra.Command{
-		Use:     "pull [flags] IMAGE",
-		Short:   "Pull an image from a registry",
-		Long:    pullDescription,
-		PreRunE: preRunE,
-		RunE:    imagePull,
+		Use:   "pull [flags] IMAGE",
+		Args:  cobra.ExactArgs(1),
+		Short: "Pull an image from a registry",
+		Long:  pullDescription,
+		RunE:  imagePull,
 		Example: `podman pull imageName
   podman pull fedora:latest`,
 	}
@@ -41,11 +39,10 @@ var (
 	// It's basically a clone of `pullCmd` with the exception of being a
 	// child of the images command.
 	imagesPullCmd = &cobra.Command{
-		Use:     pullCmd.Use,
-		Short:   pullCmd.Short,
-		Long:    pullCmd.Long,
-		PreRunE: pullCmd.PreRunE,
-		RunE:    pullCmd.RunE,
+		Use:   pullCmd.Use,
+		Short: pullCmd.Short,
+		Long:  pullCmd.Long,
+		RunE:  pullCmd.RunE,
 		Example: `podman image pull imageName
   podman image pull fedora:latest`,
 	}
@@ -58,9 +55,6 @@ func init() {
 		Command: pullCmd,
 	})
 
-	pullCmd.SetHelpTemplate(registry.HelpTemplate())
-	pullCmd.SetUsageTemplate(registry.UsageTemplate())
-
 	flags := pullCmd.Flags()
 	pullFlags(flags)
 
@@ -71,8 +65,6 @@ func init() {
 		Parent:  imageCmd,
 	})
 
-	imagesPullCmd.SetHelpTemplate(registry.HelpTemplate())
-	imagesPullCmd.SetUsageTemplate(registry.UsageTemplate())
 	imagesPullFlags := imagesPullCmd.Flags()
 	pullFlags(imagesPullFlags)
 }
@@ -99,20 +91,6 @@ func pullFlags(flags *pflag.FlagSet) {
 
 // imagePull is implement the command for pulling images.
 func imagePull(cmd *cobra.Command, args []string) error {
-	// Sanity check input.
-	if len(args) == 0 {
-		return errors.Errorf("an image name must be specified")
-	}
-	if len(args) > 1 {
-		return errors.Errorf("too many arguments. Requires exactly 1")
-	}
-
-	// Start tracing if requested.
-	if cmd.Flags().Changed("trace") {
-		span, _ := opentracing.StartSpanFromContext(registry.GetContext(), "pullCmd")
-		defer span.Finish()
-	}
-
 	pullOptsAPI := pullOptions.ImagePullOptions
 	// TLS verification in c/image is controlled via a `types.OptionalBool`
 	// which allows for distinguishing among set-true, set-false, unspecified
diff --git a/cmd/podmanV2/images/push.go b/cmd/podmanV2/images/push.go
index 82cc0c486a..51a60664b1 100644
--- a/cmd/podmanV2/images/push.go
+++ b/cmd/podmanV2/images/push.go
@@ -25,11 +25,10 @@ var (
 
 	// Command: podman push
 	pushCmd = &cobra.Command{
-		Use:     "push [flags] SOURCE DESTINATION",
-		Short:   "Push an image to a specified destination",
-		Long:    pushDescription,
-		PreRunE: preRunE,
-		RunE:    imagePush,
+		Use:   "push [flags] SOURCE DESTINATION",
+		Short: "Push an image to a specified destination",
+		Long:  pushDescription,
+		RunE:  imagePush,
 		Example: `podman push imageID docker://registry.example.com/repository:tag
 		podman push imageID oci-archive:/path/to/layout:image:tag`,
 	}
@@ -38,11 +37,10 @@ var (
 	// It's basically a clone of `pushCmd` with the exception of being a
 	// child of the images command.
 	imagePushCmd = &cobra.Command{
-		Use:     pushCmd.Use,
-		Short:   pushCmd.Short,
-		Long:    pushCmd.Long,
-		PreRunE: pushCmd.PreRunE,
-		RunE:    pushCmd.RunE,
+		Use:   pushCmd.Use,
+		Short: pushCmd.Short,
+		Long:  pushCmd.Long,
+		RunE:  pushCmd.RunE,
 		Example: `podman image push imageID docker://registry.example.com/repository:tag
 		podman image push imageID oci-archive:/path/to/layout:image:tag`,
 	}
@@ -55,9 +53,6 @@ func init() {
 		Command: pushCmd,
 	})
 
-	pushCmd.SetHelpTemplate(registry.HelpTemplate())
-	pushCmd.SetUsageTemplate(registry.UsageTemplate())
-
 	flags := pushCmd.Flags()
 	pushFlags(flags)
 
@@ -68,8 +63,6 @@ func init() {
 		Parent:  imageCmd,
 	})
 
-	imagePushCmd.SetHelpTemplate(registry.HelpTemplate())
-	imagePushCmd.SetUsageTemplate(registry.UsageTemplate())
 	pushFlags(imagePushCmd.Flags())
 }
 
diff --git a/cmd/podmanV2/images/rm.go b/cmd/podmanV2/images/rm.go
index 6784182d92..f93d6ed50b 100644
--- a/cmd/podmanV2/images/rm.go
+++ b/cmd/podmanV2/images/rm.go
@@ -14,11 +14,10 @@ import (
 var (
 	rmDescription = "Removes one or more previously pulled or locally created images."
 	rmCmd         = &cobra.Command{
-		Use:     "rm [flags] IMAGE [IMAGE...]",
-		Short:   "Removes one or more images from local storage",
-		Long:    rmDescription,
-		PreRunE: preRunE,
-		RunE:    rm,
+		Use:   "rm [flags] IMAGE [IMAGE...]",
+		Short: "Removes one or more images from local storage",
+		Long:  rmDescription,
+		RunE:  rm,
 		Example: `podman image rm imageID
   podman image rm --force alpine
   podman image rm c4dfb1609ee2 93fd78260bd1 c0ed59d05ff7`,
diff --git a/cmd/podmanV2/images/rmi.go b/cmd/podmanV2/images/rmi.go
index 973763966b..ae199b7897 100644
--- a/cmd/podmanV2/images/rmi.go
+++ b/cmd/podmanV2/images/rmi.go
@@ -14,7 +14,6 @@ var (
 		Args:    rmCmd.Args,
 		Short:   rmCmd.Short,
 		Long:    rmCmd.Long,
-		PreRunE: rmCmd.PreRunE,
 		RunE:    rmCmd.RunE,
 		Example: strings.Replace(rmCmd.Example, "podman image rm", "podman rmi", -1),
 	}
@@ -25,7 +24,5 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: rmiCmd,
 	})
-	rmiCmd.SetHelpTemplate(registry.HelpTemplate())
-	rmiCmd.SetUsageTemplate(registry.UsageTemplate())
 	imageRemoveFlagSet(rmiCmd.Flags())
 }
diff --git a/cmd/podmanV2/images/save.go b/cmd/podmanV2/images/save.go
index ae39b7bce3..29ee79392e 100644
--- a/cmd/podmanV2/images/save.go
+++ b/cmd/podmanV2/images/save.go
@@ -22,11 +22,10 @@ var (
 	saveDescription = `Save an image to docker-archive or oci-archive on the local machine. Default is docker-archive.`
 
 	saveCommand = &cobra.Command{
-		Use:               "save [flags] IMAGE",
-		Short:             "Save image to an archive",
-		Long:              saveDescription,
-		PersistentPreRunE: preRunE,
-		RunE:              save,
+		Use:   "save [flags] IMAGE",
+		Short: "Save image to an archive",
+		Long:  saveDescription,
+		RunE:  save,
 		Args: func(cmd *cobra.Command, args []string) error {
 			if len(args) == 0 {
 				return errors.Errorf("need at least 1 argument")
diff --git a/cmd/podmanV2/images/search.go b/cmd/podmanV2/images/search.go
index 2ab9735ec2..17c72784ca 100644
--- a/cmd/podmanV2/images/search.go
+++ b/cmd/podmanV2/images/search.go
@@ -32,12 +32,14 @@ var (
 
 	// Command: podman search
 	searchCmd = &cobra.Command{
-		Use:     "search [flags] TERM",
-		Short:   "Search registry for image",
-		Long:    searchDescription,
-		PreRunE: preRunE,
-		RunE:    imageSearch,
-		Args:    cobra.ExactArgs(1),
+		Use:   "search [flags] TERM",
+		Short: "Search registry for image",
+		Long:  searchDescription,
+		RunE:  imageSearch,
+		Args:  cobra.ExactArgs(1),
+		Annotations: map[string]string{
+			registry.ParentNSRequired: "",
+		},
 		Example: `podman search --filter=is-official --limit 3 alpine
   podman search registry.fedoraproject.org/  # only works with v2 registries
   podman search --format "table {{.Index}} {{.Name}}" registry.fedoraproject.org/fedora`,
@@ -45,12 +47,11 @@ var (
 
 	// Command: podman image search
 	imageSearchCmd = &cobra.Command{
-		Use:     searchCmd.Use,
-		Short:   searchCmd.Short,
-		Long:    searchCmd.Long,
-		PreRunE: searchCmd.PreRunE,
-		RunE:    searchCmd.RunE,
-		Args:    searchCmd.Args,
+		Use:   searchCmd.Use,
+		Short: searchCmd.Short,
+		Long:  searchCmd.Long,
+		RunE:  searchCmd.RunE,
+		Args:  searchCmd.Args,
 		Example: `podman image search --filter=is-official --limit 3 alpine
 		podman image search registry.fedoraproject.org/  # only works with v2 registries
 		podman image search --format "table {{.Index}} {{.Name}}" registry.fedoraproject.org/fedora`,
@@ -64,8 +65,6 @@ func init() {
 		Command: searchCmd,
 	})
 
-	searchCmd.SetHelpTemplate(registry.HelpTemplate())
-	searchCmd.SetUsageTemplate(registry.UsageTemplate())
 	flags := searchCmd.Flags()
 	searchFlags(flags)
 
diff --git a/cmd/podmanV2/images/tag.go b/cmd/podmanV2/images/tag.go
index f8799d4a76..bf3cf0de64 100644
--- a/cmd/podmanV2/images/tag.go
+++ b/cmd/podmanV2/images/tag.go
@@ -9,12 +9,11 @@ import (
 var (
 	tagDescription = "Adds one or more additional names to locally-stored image."
 	tagCommand     = &cobra.Command{
-		Use:     "tag [flags] IMAGE TARGET_NAME [TARGET_NAME...]",
-		Short:   "Add an additional name to a local image",
-		Long:    tagDescription,
-		RunE:    tag,
-		PreRunE: preRunE,
-		Args:    cobra.MinimumNArgs(2),
+		Use:   "tag [flags] IMAGE TARGET_NAME [TARGET_NAME...]",
+		Short: "Add an additional name to a local image",
+		Long:  tagDescription,
+		RunE:  tag,
+		Args:  cobra.MinimumNArgs(2),
 		Example: `podman tag 0e3bbc2 fedora:latest
   podman tag imageID:latest myNewImage:newTag
   podman tag httpd myregistryhost:5000/fedora/httpd:v2`,
@@ -26,8 +25,6 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: tagCommand,
 	})
-	tagCommand.SetHelpTemplate(registry.HelpTemplate())
-	tagCommand.SetUsageTemplate(registry.UsageTemplate())
 }
 
 func tag(cmd *cobra.Command, args []string) error {
diff --git a/cmd/podmanV2/images/untag.go b/cmd/podmanV2/images/untag.go
index c84827bb39..5eca1cb78f 100644
--- a/cmd/podmanV2/images/untag.go
+++ b/cmd/podmanV2/images/untag.go
@@ -24,8 +24,6 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: untagCommand,
 	})
-	untagCommand.SetHelpTemplate(registry.HelpTemplate())
-	untagCommand.SetUsageTemplate(registry.UsageTemplate())
 }
 
 func untag(cmd *cobra.Command, args []string) error {
diff --git a/cmd/podmanV2/inspect.go b/cmd/podmanV2/inspect.go
index 15d7579ea9..25024d6f8d 100644
--- a/cmd/podmanV2/inspect.go
+++ b/cmd/podmanV2/inspect.go
@@ -37,23 +37,13 @@ func init() {
 }
 
 func inspect(cmd *cobra.Command, args []string) error {
-	ie, err := registry.NewImageEngine(cmd, args)
-	if err != nil {
-		return err
-	}
-
-	if found, err := ie.Exists(context.Background(), args[0]); err != nil {
+	if found, err := registry.ImageEngine().Exists(context.Background(), args[0]); err != nil {
 		return err
 	} else if found.Value {
 		return images.Inspect(cmd, args, inspectOpts)
 	}
 
-	ce, err := registry.NewContainerEngine(cmd, args)
-	if err != nil {
-		return err
-	}
-
-	if found, err := ce.ContainerExists(context.Background(), args[0]); err != nil {
+	if found, err := registry.ContainerEngine().ContainerExists(context.Background(), args[0]); err != nil {
 		return err
 	} else if found.Value {
 		return containers.Inspect(cmd, args, inspectOpts)
diff --git a/cmd/podmanV2/main.go b/cmd/podmanV2/main.go
index cfe20d1c1d..de5308121e 100644
--- a/cmd/podmanV2/main.go
+++ b/cmd/podmanV2/main.go
@@ -2,7 +2,6 @@ package main
 
 import (
 	"os"
-	"reflect"
 
 	_ "github.com/containers/libpod/cmd/podmanV2/containers"
 	_ "github.com/containers/libpod/cmd/podmanV2/healthcheck"
@@ -27,36 +26,25 @@ func main() {
 		// had a specific job to do as a subprocess, and it's done.
 		return
 	}
+
 	for _, c := range registry.Commands {
-		if Contains(registry.PodmanOptions.EngineMode, c.Mode) {
-			parent := rootCmd
-			if c.Parent != nil {
-				parent = c.Parent
+		for _, m := range c.Mode {
+			if registry.PodmanOptions.EngineMode == m {
+				parent := rootCmd
+				if c.Parent != nil {
+					parent = c.Parent
+				}
+				parent.AddCommand(c.Command)
+
+				// - templates need to be set here, as PersistentPreRunE() is
+				// not called when --help is used.
+				// - rootCmd uses cobra default template not ours
+				c.Command.SetHelpTemplate(helpTemplate)
+				c.Command.SetUsageTemplate(usageTemplate)
 			}
-			parent.AddCommand(c.Command)
 		}
 	}
 
 	Execute()
 	os.Exit(0)
 }
-
-func Contains(item interface{}, slice interface{}) bool {
-	s := reflect.ValueOf(slice)
-
-	switch s.Kind() {
-	case reflect.Array:
-		fallthrough
-	case reflect.Slice:
-		break
-	default:
-		return false
-	}
-
-	for i := 0; i < s.Len(); i++ {
-		if s.Index(i).Interface() == item {
-			return true
-		}
-	}
-	return false
-}
diff --git a/cmd/podmanV2/networks/network.go b/cmd/podmanV2/networks/network.go
index fc92d23218..85fec545b4 100644
--- a/cmd/podmanV2/networks/network.go
+++ b/cmd/podmanV2/networks/network.go
@@ -9,12 +9,11 @@ import (
 var (
 	// Command: podman _network_
 	cmd = &cobra.Command{
-		Use:               "network",
-		Short:             "Manage networks",
-		Long:              "Manage networks",
-		TraverseChildren:  true,
-		PersistentPreRunE: preRunE,
-		RunE:              registry.SubCommandExists,
+		Use:              "network",
+		Short:            "Manage networks",
+		Long:             "Manage networks",
+		TraverseChildren: true,
+		RunE:             registry.SubCommandExists,
 	}
 )
 
@@ -23,11 +22,4 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode},
 		Command: cmd,
 	})
-	cmd.SetHelpTemplate(registry.HelpTemplate())
-	cmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
-	_, err := registry.NewContainerEngine(cmd, args)
-	return err
 }
diff --git a/cmd/podmanV2/pods/pod.go b/cmd/podmanV2/pods/pod.go
index 81c0d33e1c..3434bfc025 100644
--- a/cmd/podmanV2/pods/pod.go
+++ b/cmd/podmanV2/pods/pod.go
@@ -9,12 +9,11 @@ import (
 var (
 	// Command: podman _pod_
 	podCmd = &cobra.Command{
-		Use:               "pod",
-		Short:             "Manage pods",
-		Long:              "Manage pods",
-		TraverseChildren:  true,
-		PersistentPreRunE: preRunE,
-		RunE:              registry.SubCommandExists,
+		Use:              "pod",
+		Short:            "Manage pods",
+		Long:             "Manage pods",
+		TraverseChildren: true,
+		RunE:             registry.SubCommandExists,
 	}
 )
 
@@ -23,11 +22,4 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: podCmd,
 	})
-	podCmd.SetHelpTemplate(registry.HelpTemplate())
-	podCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
-	_, err := registry.NewContainerEngine(cmd, args)
-	return err
 }
diff --git a/cmd/podmanV2/pods/top.go b/cmd/podmanV2/pods/top.go
index 5ef2822381..e501bb4786 100644
--- a/cmd/podmanV2/pods/top.go
+++ b/cmd/podmanV2/pods/top.go
@@ -24,12 +24,11 @@ var (
 	topOptions = entities.PodTopOptions{}
 
 	topCommand = &cobra.Command{
-		Use:               "top [flags] POD [FORMAT-DESCRIPTORS|ARGS]",
-		Short:             "Display the running processes in a pod",
-		Long:              topDescription,
-		PersistentPreRunE: preRunE,
-		RunE:              top,
-		Args:              cobra.ArbitraryArgs,
+		Use:   "top [flags] POD [FORMAT-DESCRIPTORS|ARGS]",
+		Short: "Display the running processes in a pod",
+		Long:  topDescription,
+		RunE:  top,
+		Args:  cobra.ArbitraryArgs,
 		Example: `podman pod top podID
 podman pod top --latest
 podman pod top podID pid seccomp args %C
@@ -44,9 +43,6 @@ func init() {
 		Parent:  podCmd,
 	})
 
-	topCommand.SetHelpTemplate(registry.HelpTemplate())
-	topCommand.SetUsageTemplate(registry.UsageTemplate())
-
 	flags := topCommand.Flags()
 	flags.SetInterspersed(false)
 	flags.BoolVar(&topOptions.ListDescriptors, "list-descriptors", false, "")
diff --git a/cmd/podmanV2/registry/config.go b/cmd/podmanV2/registry/config.go
index de9d1f262d..358f9172e0 100644
--- a/cmd/podmanV2/registry/config.go
+++ b/cmd/podmanV2/registry/config.go
@@ -12,11 +12,10 @@ import (
 	"github.com/containers/libpod/pkg/rootless"
 	"github.com/containers/libpod/pkg/util"
 	"github.com/pkg/errors"
-	"github.com/sirupsen/logrus"
 )
 
 const (
-	RootRequired = "RootRequired"
+	ParentNSRequired = "ParentNSRequired"
 )
 
 var (
@@ -26,7 +25,7 @@ var (
 // NewPodmanConfig creates a PodmanConfig from the environment
 func NewPodmanConfig() entities.PodmanConfig {
 	if err := setXdgDirs(); err != nil {
-		logrus.Errorf(err.Error())
+		fmt.Fprintf(os.Stderr, err.Error())
 		os.Exit(1)
 	}
 
@@ -39,7 +38,7 @@ func NewPodmanConfig() entities.PodmanConfig {
 	case "linux":
 		mode = entities.ABIMode
 	default:
-		logrus.Errorf("%s is not a supported OS", runtime.GOOS)
+		fmt.Fprintf(os.Stderr, "%s is not a supported OS", runtime.GOOS)
 		os.Exit(1)
 	}
 
@@ -47,18 +46,23 @@ func NewPodmanConfig() entities.PodmanConfig {
 	for _, v := range os.Args {
 		// Prefix checking works because of how default EngineMode's
 		// have been defined.
-		if strings.HasPrefix(v, "--remote=") {
+		if strings.HasPrefix(v, "--remote") {
 			mode = entities.TunnelMode
 		}
 	}
 
-	// FIXME: for rootless, where to get the path
-	// TODO:
+	// FIXME: for rootless, add flag to get the path to override configuration
 	cfg, err := config.NewConfig("")
 	if err != nil {
-		logrus.Error("Failed to obtain podman configuration")
+		fmt.Fprint(os.Stderr, "Failed to obtain podman configuration: "+err.Error())
 		os.Exit(1)
 	}
+
+	cfg.Network.NetworkConfigDir = cfg.Network.CNIPluginDirs[0]
+	if rootless.IsRootless() {
+		cfg.Network.NetworkConfigDir = ""
+	}
+
 	return entities.PodmanConfig{Config: cfg, EngineMode: mode}
 }
 
@@ -71,34 +75,31 @@ func setXdgDirs() error {
 	}
 
 	// Setup XDG_RUNTIME_DIR
-	runtimeDir := os.Getenv("XDG_RUNTIME_DIR")
-
-	if runtimeDir == "" {
-		var err error
-		runtimeDir, err = util.GetRuntimeDir()
+	if _, found := os.LookupEnv("XDG_RUNTIME_DIR"); !found {
+		dir, err := util.GetRuntimeDir()
 		if err != nil {
 			return err
 		}
-	}
-	if err := os.Setenv("XDG_RUNTIME_DIR", runtimeDir); err != nil {
-		return errors.Wrapf(err, "cannot set XDG_RUNTIME_DIR")
+		if err := os.Setenv("XDG_RUNTIME_DIR", dir); err != nil {
+			return errors.Wrapf(err, "cannot set XDG_RUNTIME_DIR="+dir)
+		}
 	}
 
-	if rootless.IsRootless() && os.Getenv("DBUS_SESSION_BUS_ADDRESS") == "" {
-		sessionAddr := filepath.Join(runtimeDir, "bus")
+	if _, found := os.LookupEnv("DBUS_SESSION_BUS_ADDRESS"); !found {
+		sessionAddr := filepath.Join(os.Getenv("XDG_RUNTIME_DIR"), "bus")
 		if _, err := os.Stat(sessionAddr); err == nil {
-			os.Setenv("DBUS_SESSION_BUS_ADDRESS", fmt.Sprintf("unix:path=%s", sessionAddr))
+			os.Setenv("DBUS_SESSION_BUS_ADDRESS", "unix:path="+sessionAddr)
 		}
 	}
 
 	// Setup XDG_CONFIG_HOME
-	if cfgHomeDir := os.Getenv("XDG_CONFIG_HOME"); cfgHomeDir == "" {
+	if _, found := os.LookupEnv("XDG_CONFIG_HOME"); !found {
 		cfgHomeDir, err := util.GetRootlessConfigHomeDir()
 		if err != nil {
 			return err
 		}
 		if err := os.Setenv("XDG_CONFIG_HOME", cfgHomeDir); err != nil {
-			return errors.Wrapf(err, "cannot set XDG_CONFIG_HOME")
+			return errors.Wrapf(err, "cannot set XDG_CONFIG_HOME="+cfgHomeDir)
 		}
 	}
 	return nil
diff --git a/cmd/podmanV2/registry/registry.go b/cmd/podmanV2/registry/registry.go
index 5ef6a10d8c..1c5e5d21bf 100644
--- a/cmd/podmanV2/registry/registry.go
+++ b/cmd/podmanV2/registry/registry.go
@@ -42,41 +42,6 @@ func GetExitCode() int {
 	return exitCode
 }
 
-// HelpTemplate returns the help template for podman commands
-// This uses the short and long options.
-// command should not use this.
-func HelpTemplate() string {
-	return `{{.Short}}
-
-Description:
-  {{.Long}}
-
-{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}`
-}
-
-// UsageTemplate returns the usage template for podman commands
-// This blocks the displaying of the global options. The main podman
-// command should not use this.
-func UsageTemplate() string {
-	return `Usage(v2):{{if (and .Runnable (not .HasAvailableSubCommands))}}
-  {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
-  {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}
-
-Aliases:
-  {{.NameAndAliases}}{{end}}{{if .HasExample}}
-
-Examples:
-  {{.Example}}{{end}}{{if .HasAvailableSubCommands}}
-
-Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}}
-  {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
-
-Flags:
-{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}
-{{end}}
-`
-}
-
 func ImageEngine() entities.ImageEngine {
 	return imageEngine
 }
@@ -126,17 +91,26 @@ func IdOrLatestArgs(cmd *cobra.Command, args []string) error {
 	return nil
 }
 
-func GetContext() context.Context {
+type PodmanOptionsKey struct{}
+
+func Context() context.Context {
 	if cliCtx == nil {
-		cliCtx = context.Background()
+		cliCtx = ContextWithOptions(context.Background())
 	}
 	return cliCtx
 }
 
-type ContextOptionsKey string
-
-const PodmanOptionsKey ContextOptionsKey = "PodmanOptions"
-
-func GetContextWithOptions() context.Context {
-	return context.WithValue(GetContext(), PodmanOptionsKey, PodmanOptions)
+func ContextWithOptions(ctx context.Context) context.Context {
+	cliCtx = context.WithValue(ctx, PodmanOptionsKey{}, PodmanOptions)
+	return cliCtx
+}
+
+// GetContextWithOptions deprecated, use  NewContextWithOptions()
+func GetContextWithOptions() context.Context {
+	return ContextWithOptions(context.Background())
+}
+
+// GetContext deprecated, use  Context()
+func GetContext() context.Context {
+	return Context()
 }
diff --git a/cmd/podmanV2/root.go b/cmd/podmanV2/root.go
index 0639257eac..801e728f06 100644
--- a/cmd/podmanV2/root.go
+++ b/cmd/podmanV2/root.go
@@ -1,12 +1,12 @@
 package main
 
 import (
-	"context"
 	"fmt"
 	"log/syslog"
 	"os"
 	"path"
 	"runtime/pprof"
+	"strings"
 
 	"github.com/containers/libpod/cmd/podmanV2/registry"
 	"github.com/containers/libpod/pkg/domain/entities"
@@ -21,6 +21,37 @@ import (
 	"github.com/spf13/pflag"
 )
 
+// HelpTemplate is the help template for podman commands
+// This uses the short and long options.
+// command should not use this.
+const helpTemplate = `{{.Short}}
+
+Description:
+  {{.Long}}
+
+{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}`
+
+// UsageTemplate is the usage template for podman commands
+// This blocks the displaying of the global options. The main podman
+// command should not use this.
+const usageTemplate = `Usage(v2):{{if (and .Runnable (not .HasAvailableSubCommands))}}
+  {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}
+  {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}
+
+Aliases:
+  {{.NameAndAliases}}{{end}}{{if .HasExample}}
+
+Examples:
+  {{.Example}}{{end}}{{if .HasAvailableSubCommands}}
+
+Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "help"))}}
+  {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}
+
+Flags:
+{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}
+{{end}}
+`
+
 var (
 	rootCmd = &cobra.Command{
 		Use:                path.Base(os.Args[0]),
@@ -28,20 +59,20 @@ var (
 		SilenceUsage:       true,
 		SilenceErrors:      true,
 		TraverseChildren:   true,
-		PersistentPreRunE:  preRunE,
+		PersistentPreRunE:  persistentPreRunE,
 		RunE:               registry.SubCommandExists,
-		PersistentPostRunE: postRunE,
+		PersistentPostRunE: persistentPostRunE,
 		Version:            version.Version,
 	}
 
-	logLevels = entities.NewStringSet("debug", "info", "warn", "error", "fatal", "panic")
+	logLevels = []string{"debug", "info", "warn", "error", "fatal", "panic"}
 	logLevel  = "error"
 	useSyslog bool
 )
 
 func init() {
+	// Hooks are called before PersistentPreRunE()
 	cobra.OnInitialize(
-		rootlessHook,
 		loggingHook,
 		syslogHook,
 	)
@@ -63,13 +94,21 @@ func Execute() {
 	os.Exit(registry.GetExitCode())
 }
 
-func preRunE(cmd *cobra.Command, _ []string) error {
+func persistentPreRunE(cmd *cobra.Command, args []string) error {
+	// TODO: Remove trace statement in podman V2.1
+	logrus.Debugf("Called %s.PersistentPreRunE()", cmd.Name())
+
 	// Update PodmanOptions now that we "know" more
 	// TODO: pass in path overriding configuration file
 	registry.PodmanOptions = registry.NewPodmanConfig()
 
-	cmd.SetHelpTemplate(registry.HelpTemplate())
-	cmd.SetUsageTemplate(registry.UsageTemplate())
+	// Prep the engines
+	if _, err := registry.NewImageEngine(cmd, args); err != nil {
+		return err
+	}
+	if _, err := registry.NewContainerEngine(cmd, args); err != nil {
+		return err
+	}
 
 	if cmd.Flag("cpu-profile").Changed {
 		f, err := os.Create(registry.PodmanOptions.CpuProfile)
@@ -88,12 +127,28 @@ func preRunE(cmd *cobra.Command, _ []string) error {
 		registry.PodmanOptions.SpanCloser = closer
 
 		registry.PodmanOptions.Span = tracer.StartSpan("before-context")
-		registry.PodmanOptions.SpanCtx = opentracing.ContextWithSpan(context.Background(), registry.PodmanOptions.Span)
+		registry.PodmanOptions.SpanCtx = opentracing.ContextWithSpan(registry.Context(), registry.PodmanOptions.Span)
+		opentracing.StartSpanFromContext(registry.PodmanOptions.SpanCtx, cmd.Name())
+	}
+
+	// Setup Rootless environment, IFF:
+	// 1) in ABI mode
+	// 2) running as non-root
+	// 3) command doesn't require Parent Namespace
+	_, found := cmd.Annotations[registry.ParentNSRequired]
+	if !registry.IsRemote() && rootless.IsRootless() && !found {
+		err := registry.ContainerEngine().SetupRootless(registry.Context(), cmd)
+		if err != nil {
+			return err
+		}
 	}
 	return nil
 }
 
-func postRunE(cmd *cobra.Command, args []string) error {
+func persistentPostRunE(cmd *cobra.Command, args []string) error {
+	// TODO: Remove trace statement in podman V2.1
+	logrus.Debugf("Called %s.PersistentPostRunE()", cmd.Name())
+
 	if cmd.Flag("cpu-profile").Changed {
 		pprof.StopCPUProfile()
 	}
@@ -105,14 +160,21 @@ func postRunE(cmd *cobra.Command, args []string) error {
 }
 
 func loggingHook() {
-	if !logLevels.Contains(logLevel) {
-		logrus.Errorf("Log Level \"%s\" is not supported, choose from: %s", logLevel, logLevels.String())
+	var found bool
+	for _, l := range logLevels {
+		if l == logLevel {
+			found = true
+			break
+		}
+	}
+	if !found {
+		fmt.Fprintf(os.Stderr, "Log Level \"%s\" is not supported, choose from: %s\n", logLevel, strings.Join(logLevels, ", "))
 		os.Exit(1)
 	}
 
 	level, err := logrus.ParseLevel(logLevel)
 	if err != nil {
-		fmt.Fprintf(os.Stderr, err.Error())
+		fmt.Fprint(os.Stderr, err.Error())
 		os.Exit(1)
 	}
 	logrus.SetLevel(level)
@@ -123,26 +185,18 @@ func loggingHook() {
 }
 
 func syslogHook() {
-	if useSyslog {
-		hook, err := logrusSyslog.NewSyslogHook("", "", syslog.LOG_INFO, "")
-		if err != nil {
-			logrus.WithError(err).Error("Failed to initialize syslog hook")
-		}
-		if err == nil {
-			logrus.AddHook(hook)
-		}
+	if !useSyslog {
+		return
 	}
-}
 
-func rootlessHook() {
-	if rootless.IsRootless() {
-		logrus.Error("rootless mode is currently not supported. Support will return ASAP.")
+	hook, err := logrusSyslog.NewSyslogHook("", "", syslog.LOG_INFO, "")
+	if err != nil {
+		fmt.Fprint(os.Stderr, "Failed to initialize syslog hook: "+err.Error())
+		os.Exit(1)
+	}
+	if err == nil {
+		logrus.AddHook(hook)
 	}
-	// ce, err := registry.NewContainerEngine(rootCmd, []string{})
-	// if err != nil {
-	// 	logrus.WithError(err).Fatal("failed to obtain container engine")
-	// }
-	// ce.SetupRootLess(rootCmd)
 }
 
 func rootFlags(opts entities.PodmanConfig, flags *pflag.FlagSet) {
@@ -179,7 +233,7 @@ func rootFlags(opts entities.PodmanConfig, flags *pflag.FlagSet) {
 	// Override default --help information of `--help` global flag
 	var dummyHelp bool
 	flags.BoolVar(&dummyHelp, "help", false, "Help for podman")
-	flags.StringVar(&logLevel, "log-level", logLevel, fmt.Sprintf("Log messages above specified level (%s)", logLevels.String()))
+	flags.StringVar(&logLevel, "log-level", logLevel, fmt.Sprintf("Log messages above specified level (%s)", strings.Join(logLevels, ", ")))
 
 	// Hide these flags for both ABI and Tunneling
 	for _, f := range []string{
@@ -189,7 +243,7 @@ func rootFlags(opts entities.PodmanConfig, flags *pflag.FlagSet) {
 		"trace",
 	} {
 		if err := flags.MarkHidden(f); err != nil {
-			logrus.Warnf("unable to mark %s flag as hidden", f)
+			logrus.Warnf("unable to mark %s flag as hidden: %s", f, err.Error())
 		}
 	}
 
@@ -197,5 +251,4 @@ func rootFlags(opts entities.PodmanConfig, flags *pflag.FlagSet) {
 	if !registry.IsRemote() {
 		flags.BoolVar(&useSyslog, "syslog", false, "Output logging information to syslog as well as the console (default false)")
 	}
-
 }
diff --git a/cmd/podmanV2/system/events.go b/cmd/podmanV2/system/events.go
index 9fd27e2c17..95e6a55767 100644
--- a/cmd/podmanV2/system/events.go
+++ b/cmd/podmanV2/system/events.go
@@ -17,12 +17,11 @@ import (
 var (
 	eventsDescription = "Monitor podman events"
 	eventsCommand     = &cobra.Command{
-		Use:               "events",
-		Args:              cobra.NoArgs,
-		Short:             "Show podman events",
-		Long:              eventsDescription,
-		PersistentPreRunE: preRunE,
-		RunE:              eventsCmd,
+		Use:   "events",
+		Args:  cobra.NoArgs,
+		Short: "Show podman events",
+		Long:  eventsDescription,
+		RunE:  eventsCmd,
 		Example: `podman events
   podman events --filter event=create
   podman events --since 1h30s`,
diff --git a/cmd/podmanV2/system/info.go b/cmd/podmanV2/system/info.go
index 69b2871b79..6b0c6a13b9 100644
--- a/cmd/podmanV2/system/info.go
+++ b/cmd/podmanV2/system/info.go
@@ -22,7 +22,6 @@ var (
 		Args:    cobra.NoArgs,
 		Long:    infoDescription,
 		Short:   "Display podman system information",
-		PreRunE: preRunE,
 		RunE:    info,
 		Example: `podman info`,
 	}
diff --git a/cmd/podmanV2/system/system.go b/cmd/podmanV2/system/system.go
index b446321872..e62a0c1504 100644
--- a/cmd/podmanV2/system/system.go
+++ b/cmd/podmanV2/system/system.go
@@ -9,12 +9,11 @@ import (
 var (
 	// Command: podman _system_
 	systemCmd = &cobra.Command{
-		Use:               "system",
-		Short:             "Manage podman",
-		Long:              "Manage podman",
-		TraverseChildren:  true,
-		PersistentPreRunE: preRunE,
-		RunE:              registry.SubCommandExists,
+		Use:              "system",
+		Short:            "Manage podman",
+		Long:             "Manage podman",
+		TraverseChildren: true,
+		RunE:             registry.SubCommandExists,
 	}
 )
 
@@ -23,11 +22,4 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: systemCmd,
 	})
-	systemCmd.SetHelpTemplate(registry.HelpTemplate())
-	systemCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
-	_, err := registry.NewContainerEngine(cmd, args)
-	return err
 }
diff --git a/cmd/podmanV2/system/varlink.go b/cmd/podmanV2/system/varlink.go
index da9af6fe40..27dd0a7e94 100644
--- a/cmd/podmanV2/system/varlink.go
+++ b/cmd/podmanV2/system/varlink.go
@@ -14,12 +14,11 @@ var (
   Tools speaking varlink protocol can remotely manage pods, containers and images.
 `
 	varlinkCmd = &cobra.Command{
-		Use:     "varlink [flags] [URI]",
-		Args:    cobra.MinimumNArgs(1),
-		Short:   "Run varlink interface",
-		Long:    varlinkDescription,
-		PreRunE: preRunE,
-		RunE:    varlinkE,
+		Use:   "varlink [flags] [URI]",
+		Args:  cobra.MinimumNArgs(1),
+		Short: "Run varlink interface",
+		Long:  varlinkDescription,
+		RunE:  varlinkE,
 		Example: `podman varlink unix:/run/podman/io.podman
   podman varlink --timeout 5000 unix:/run/podman/io.podman`,
 	}
@@ -33,9 +32,6 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: varlinkCmd,
 	})
-	varlinkCmd.SetHelpTemplate(registry.HelpTemplate())
-	varlinkCmd.SetUsageTemplate(registry.UsageTemplate())
-
 	flags := varlinkCmd.Flags()
 	flags.Int64VarP(&varlinkArgs.Timeout, "time", "t", 1000, "Time until the varlink session expires in milliseconds.  Use 0 to disable the timeout")
 	flags.Int64Var(&varlinkArgs.Timeout, "timeout", 1000, "Time until the varlink session expires in milliseconds.  Use 0 to disable the timeout")
diff --git a/cmd/podmanV2/system/version.go b/cmd/podmanV2/system/version.go
index 8d6e8b7a88..7004c31097 100644
--- a/cmd/podmanV2/system/version.go
+++ b/cmd/podmanV2/system/version.go
@@ -18,11 +18,13 @@ import (
 
 var (
 	versionCommand = &cobra.Command{
-		Use:               "version",
-		Args:              cobra.NoArgs,
-		Short:             "Display the Podman Version Information",
-		RunE:              version,
-		PersistentPreRunE: preRunE,
+		Use:   "version",
+		Args:  cobra.NoArgs,
+		Short: "Display the Podman Version Information",
+		RunE:  version,
+		Annotations: map[string]string{
+			registry.ParentNSRequired: "",
+		},
 	}
 	versionFormat string
 )
diff --git a/cmd/podmanV2/volumes/volume.go b/cmd/podmanV2/volumes/volume.go
index 84abe3d240..d1135d1bf8 100644
--- a/cmd/podmanV2/volumes/volume.go
+++ b/cmd/podmanV2/volumes/volume.go
@@ -9,12 +9,11 @@ import (
 var (
 	// Command: podman _volume_
 	volumeCmd = &cobra.Command{
-		Use:               "volume",
-		Short:             "Manage volumes",
-		Long:              "Volumes are created in and can be shared between containers",
-		TraverseChildren:  true,
-		PersistentPreRunE: preRunE,
-		RunE:              registry.SubCommandExists,
+		Use:              "volume",
+		Short:            "Manage volumes",
+		Long:             "Volumes are created in and can be shared between containers",
+		TraverseChildren: true,
+		RunE:             registry.SubCommandExists,
 	}
 )
 
@@ -23,11 +22,4 @@ func init() {
 		Mode:    []entities.EngineMode{entities.ABIMode, entities.TunnelMode},
 		Command: volumeCmd,
 	})
-	volumeCmd.SetHelpTemplate(registry.HelpTemplate())
-	volumeCmd.SetUsageTemplate(registry.UsageTemplate())
-}
-
-func preRunE(cmd *cobra.Command, args []string) error {
-	_, err := registry.NewContainerEngine(cmd, args)
-	return err
 }
diff --git a/pkg/domain/entities/engine.go b/pkg/domain/entities/engine.go
index 3b971a1e87..f45218d146 100644
--- a/pkg/domain/entities/engine.go
+++ b/pkg/domain/entities/engine.go
@@ -2,17 +2,9 @@ package entities
 
 import (
 	"context"
-	"fmt"
 	"io"
-	"os"
 
-	"github.com/containers/buildah/pkg/parse"
 	"github.com/containers/common/pkg/config"
-	"github.com/containers/common/pkg/sysinfo"
-	"github.com/containers/libpod/pkg/apparmor"
-	"github.com/containers/libpod/pkg/cgroups"
-	"github.com/containers/libpod/pkg/rootless"
-	"github.com/opencontainers/selinux/go-selinux"
 	"github.com/opentracing/opentracing-go"
 	"github.com/spf13/pflag"
 )
@@ -54,214 +46,3 @@ type PodmanConfig struct {
 	StorageDriver string
 	StorageOpts   []string
 }
-
-// DefaultSecurityOptions: getter for security options from configuration
-func (c PodmanConfig) DefaultSecurityOptions() []string {
-	securityOpts := []string{}
-	if c.Containers.SeccompProfile != "" && c.Containers.SeccompProfile != parse.SeccompDefaultPath {
-		securityOpts = append(securityOpts, fmt.Sprintf("seccomp=%s", c.Containers.SeccompProfile))
-	}
-	if apparmor.IsEnabled() && c.Containers.ApparmorProfile != "" {
-		securityOpts = append(securityOpts, fmt.Sprintf("apparmor=%s", c.Containers.ApparmorProfile))
-	}
-	if selinux.GetEnabled() && !c.Containers.EnableLabeling {
-		securityOpts = append(securityOpts, fmt.Sprintf("label=%s", selinux.DisableSecOpt()[0]))
-	}
-	return securityOpts
-}
-
-// DefaultSysctls
-func (c PodmanConfig) DefaultSysctls() []string {
-	return c.Containers.DefaultSysctls
-}
-
-func (c PodmanConfig) DefaultVolumes() []string {
-	return c.Containers.Volumes
-}
-
-func (c PodmanConfig) DefaultDevices() []string {
-	return c.Containers.Devices
-}
-
-func (c PodmanConfig) DefaultDNSServers() []string {
-	return c.Containers.DNSServers
-}
-
-func (c PodmanConfig) DefaultDNSSearches() []string {
-	return c.Containers.DNSSearches
-}
-
-func (c PodmanConfig) DefaultDNSOptions() []string {
-	return c.Containers.DNSOptions
-}
-
-func (c PodmanConfig) DefaultEnv() []string {
-	return c.Containers.Env
-}
-
-func (c PodmanConfig) DefaultInitPath() string {
-	return c.Containers.InitPath
-}
-
-func (c PodmanConfig) DefaultIPCNS() string {
-	return c.Containers.IPCNS
-}
-
-func (c PodmanConfig) DefaultPidNS() string {
-	return c.Containers.PidNS
-}
-
-func (c PodmanConfig) DefaultNetNS() string {
-	if c.Containers.NetNS == "private" && rootless.IsRootless() {
-		return "slirp4netns"
-	}
-	return c.Containers.NetNS
-}
-
-func (c PodmanConfig) DefaultCgroupNS() string {
-	return c.Containers.CgroupNS
-}
-
-func (c PodmanConfig) DefaultUTSNS() string {
-	return c.Containers.UTSNS
-}
-
-func (c PodmanConfig) DefaultShmSize() string {
-	return c.Containers.ShmSize
-}
-
-func (c PodmanConfig) DefaultUlimits() []string {
-	return c.Containers.DefaultUlimits
-}
-
-func (c PodmanConfig) DefaultUserNS() string {
-	if v, found := os.LookupEnv("PODMAN_USERNS"); found {
-		return v
-	}
-	return c.Containers.UserNS
-}
-
-func (c PodmanConfig) DefaultPidsLimit() int64 {
-	if rootless.IsRootless() {
-		cgroup2, _ := cgroups.IsCgroup2UnifiedMode()
-		if cgroup2 {
-			return c.Containers.PidsLimit
-		}
-	}
-	return sysinfo.GetDefaultPidsLimit()
-}
-
-func (c PodmanConfig) DefaultPidsDescription() string {
-	return "Tune container pids limit (set 0 for unlimited)"
-}
-
-func (c PodmanConfig) DefaultDetachKeys() string {
-	return c.Engine.DetachKeys
-}
-
-// TODO: Remove in rootless support PR
-// // EngineOptions holds the environment for running the engines
-// type EngineOptions struct {
-// 	// Introduced with V2
-// 	Uri         string
-// 	Identities  []string
-// 	FlagSet     *pflag.FlagSet
-// 	EngineMode  EngineMode
-// 	CGroupUsage string
-//
-// 	// Introduced with V1
-// 	CGroupManager     string   // config.EngineConfig
-// 	CniConfigDir      string   // config.NetworkConfig.NetworkConfigDir
-// 	ConmonPath        string   // config.EngineConfig
-// 	DefaultMountsFile string   // config.ContainersConfig
-// 	EventsBackend     string   // config.EngineConfig.EventsLogger
-// 	HooksDir          []string // config.EngineConfig
-// 	MaxWorks          int
-// 	Namespace         string // config.EngineConfig
-// 	Root              string //
-// 	Runroot           string // config.EngineConfig.StorageConfigRunRootSet??
-// 	Runtime           string // config.EngineConfig.OCIRuntime
-// 	StorageDriver     string // config.EngineConfig.StorageConfigGraphDriverNameSet??
-// 	StorageOpts       []string
-// 	Syslog            bool
-// 	Trace             bool
-// 	NetworkCmdPath    string // config.EngineConfig
-//
-// 	Config     string
-// 	CpuProfile string
-// 	LogLevel   string
-// 	TmpDir     string // config.EngineConfig
-//
-// 	RemoteUserName       string // deprecated
-// 	RemoteHost           string // deprecated
-// 	VarlinkAddress       string // deprecated
-// 	ConnectionName       string
-// 	RemoteConfigFilePath string
-// 	Port                 int    // deprecated
-// 	IdentityFile         string // deprecated
-// 	IgnoreHosts          bool
-// }
-//
-// func NewEngineOptions(opts EngineOptions) (EngineOptions, error) {
-// 	ctnrCfg, err := config.Default()
-// 	if err != nil {
-// 		logrus.Error(err)
-// 		os.Exit(1)
-// 	}
-//
-// 	cgroupManager := ctnrCfg.Engine.CgroupManager
-// 	cgroupUsage := `Cgroup manager to use ("cgroupfs"|"systemd")`
-// 	cgroupv2, _ := cgroups.IsCgroup2UnifiedMode()
-// 	cniPluginDir := ctnrCfg.Network.CNIPluginDirs[0]
-//
-// 	cfg, err := config.NewConfig("")
-// 	if err != nil {
-// 		logrus.Errorf("Error loading container config %v\n", err)
-// 		os.Exit(1)
-// 	}
-// 	cfg.CheckCgroupsAndAdjustConfig()
-//
-// 	if rootless.IsRootless() {
-// 		if !cgroupv2 {
-// 			cgroupManager = ""
-// 			cgroupUsage = "Cgroup manager is not supported in rootless mode"
-// 		}
-// 		cniPluginDir = ""
-// 	}
-//
-// 	return EngineOptions{
-// 		CGroupManager:        cgroupManager,
-// 		CGroupUsage:          cgroupUsage,
-// 		CniConfigDir:         cniPluginDir,
-// 		Config:               opts.Config, // TODO: deprecate
-// 		ConmonPath:           opts.ConmonPath,
-// 		ConnectionName:       opts.ConnectionName,
-// 		CpuProfile:           opts.CpuProfile,
-// 		DefaultMountsFile:    ctnrCfg.Containers.DefaultMountsFile,
-// 		EngineMode:           opts.EngineMode,
-// 		EventsBackend:        ctnrCfg.Engine.EventsLogger,
-// 		FlagSet:              opts.FlagSet, // TODO: deprecate
-// 		HooksDir:             append(ctnrCfg.Engine.HooksDir[:0:0], ctnrCfg.Engine.HooksDir...),
-// 		Identities:           append(opts.Identities[:0:0], opts.Identities...),
-// 		IdentityFile:         opts.IdentityFile, // TODO: deprecate
-// 		IgnoreHosts:          opts.IgnoreHosts,
-// 		LogLevel:             opts.LogLevel,
-// 		MaxWorks:             opts.MaxWorks,
-// 		Namespace:            ctnrCfg.Engine.Namespace,
-// 		NetworkCmdPath:       ctnrCfg.Engine.NetworkCmdPath,
-// 		Port:                 opts.Port,
-// 		RemoteConfigFilePath: opts.RemoteConfigFilePath,
-// 		RemoteHost:           opts.RemoteHost,     // TODO: deprecate
-// 		RemoteUserName:       opts.RemoteUserName, // TODO: deprecate
-// 		Root:                 opts.Root,
-// 		Runroot:              opts.Runroot,
-// 		Runtime:              opts.Runtime,
-// 		StorageDriver:        opts.StorageDriver,
-// 		StorageOpts:          append(opts.StorageOpts[:0:0], opts.StorageOpts...),
-// 		Syslog:               opts.Syslog,
-// 		TmpDir:               opts.TmpDir,
-// 		Trace:                opts.Trace,
-// 		Uri:                  opts.Uri,
-// 		VarlinkAddress:       opts.VarlinkAddress,
-// 	}, nil
-// }
diff --git a/pkg/domain/entities/engine_container.go b/pkg/domain/entities/engine_container.go
index c3092a98ae..02938413a6 100644
--- a/pkg/domain/entities/engine_container.go
+++ b/pkg/domain/entities/engine_container.go
@@ -6,6 +6,7 @@ import (
 	"github.com/containers/common/pkg/config"
 	"github.com/containers/libpod/libpod/define"
 	"github.com/containers/libpod/pkg/specgen"
+	"github.com/spf13/cobra"
 )
 
 type ContainerEngine interface {
@@ -24,9 +25,9 @@ type ContainerEngine interface {
 	ContainerInspect(ctx context.Context, namesOrIds []string, options InspectOptions) ([]*ContainerInspectReport, error)
 	ContainerKill(ctx context.Context, namesOrIds []string, options KillOptions) ([]*KillReport, error)
 	ContainerList(ctx context.Context, options ContainerListOptions) ([]ListContainer, error)
+	ContainerLogs(ctx context.Context, containers []string, options ContainerLogsOptions) error
 	ContainerMount(ctx context.Context, nameOrIds []string, options ContainerMountOptions) ([]*ContainerMountReport, error)
 	ContainerPause(ctx context.Context, namesOrIds []string, options PauseUnPauseOptions) ([]*PauseUnpauseReport, error)
-	ContainerLogs(ctx context.Context, containers []string, options ContainerLogsOptions) error
 	ContainerRestart(ctx context.Context, namesOrIds []string, options RestartOptions) ([]*RestartReport, error)
 	ContainerRestore(ctx context.Context, namesOrIds []string, options RestoreOptions) ([]*RestoreReport, error)
 	ContainerRm(ctx context.Context, namesOrIds []string, options RmOptions) ([]*RmReport, error)
@@ -53,6 +54,7 @@ type ContainerEngine interface {
 	PodTop(ctx context.Context, options PodTopOptions) (*StringSliceReport, error)
 	PodUnpause(ctx context.Context, namesOrIds []string, options PodunpauseOptions) ([]*PodUnpauseReport, error)
 	RestService(ctx context.Context, opts ServiceOptions) error
+	SetupRootless(ctx context.Context, cmd *cobra.Command) error
 	VarlinkService(ctx context.Context, opts ServiceOptions) error
 	VolumeCreate(ctx context.Context, opts VolumeCreateOptions) (*IdOrNameResponse, error)
 	VolumeInspect(ctx context.Context, namesOrIds []string, opts VolumeInspectOptions) ([]*VolumeInspectReport, error)
diff --git a/pkg/domain/entities/engine_image.go b/pkg/domain/entities/engine_image.go
index 3a051ab9bb..e3b606550e 100644
--- a/pkg/domain/entities/engine_image.go
+++ b/pkg/domain/entities/engine_image.go
@@ -20,7 +20,7 @@ type ImageEngine interface {
 	Pull(ctx context.Context, rawImage string, opts ImagePullOptions) (*ImagePullReport, error)
 	Push(ctx context.Context, source string, destination string, opts ImagePushOptions) error
 	Save(ctx context.Context, nameOrId string, tags []string, options ImageSaveOptions) error
+	Search(ctx context.Context, term string, opts ImageSearchOptions) ([]ImageSearchReport, error)
 	Tag(ctx context.Context, nameOrId string, tags []string, options ImageTagOptions) error
 	Untag(ctx context.Context, nameOrId string, tags []string, options ImageUntagOptions) error
-	Search(ctx context.Context, term string, opts ImageSearchOptions) ([]ImageSearchReport, error)
 }
diff --git a/pkg/domain/infra/abi/containers.go b/pkg/domain/infra/abi/containers.go
index 4279fb7562..c9df72f2d5 100644
--- a/pkg/domain/infra/abi/containers.go
+++ b/pkg/domain/infra/abi/containers.go
@@ -668,9 +668,6 @@ func (ic *ContainerEngine) ContainerDiff(ctx context.Context, nameOrId string, o
 }
 
 func (ic *ContainerEngine) ContainerRun(ctx context.Context, opts entities.ContainerRunOptions) (*entities.ContainerRunReport, error) {
-	var (
-		joinPod bool
-	)
 	if err := generate.CompleteSpec(ctx, ic.Libpod, opts.Spec); err != nil {
 		return nil, err
 	}
@@ -679,6 +676,7 @@ func (ic *ContainerEngine) ContainerRun(ctx context.Context, opts entities.Conta
 		return nil, err
 	}
 
+	var joinPod bool
 	if len(ctr.PodID()) > 0 {
 		joinPod = true
 	}
diff --git a/pkg/domain/infra/abi/system.go b/pkg/domain/infra/abi/system.go
index 10872144b4..67593b2dd5 100644
--- a/pkg/domain/infra/abi/system.go
+++ b/pkg/domain/infra/abi/system.go
@@ -100,7 +100,7 @@ func (ic *ContainerEngine) VarlinkService(_ context.Context, opts entities.Servi
 	return nil
 }
 
-func (ic *ContainerEngine) SetupRootless(cmd *cobra.Command) error {
+func (ic *ContainerEngine) SetupRootless(_ context.Context, cmd *cobra.Command) error {
 	// do it only after podman has already re-execed and running with uid==0.
 	if os.Geteuid() == 0 {
 		ownsCgroup, err := cgroups.UserOwnsCurrentSystemdCgroup()
@@ -123,10 +123,6 @@ func (ic *ContainerEngine) SetupRootless(cmd *cobra.Command) error {
 		}
 	}
 
-	if !executeCommandInUserNS(cmd) {
-		return nil
-	}
-
 	pausePidPath, err := util.GetRootlessPauseProcessPidPath()
 	if err != nil {
 		return errors.Wrapf(err, "could not get pause process pid file path")
@@ -143,7 +139,8 @@ func (ic *ContainerEngine) SetupRootless(cmd *cobra.Command) error {
 	// if there is no pid file, try to join existing containers, and create a pause process.
 	ctrs, err := ic.Libpod.GetRunningContainers()
 	if err != nil {
-		logrus.WithError(err).Fatal("")
+		logrus.Error(err.Error())
+		os.Exit(1)
 	}
 
 	paths := []string{}
@@ -164,7 +161,8 @@ func (ic *ContainerEngine) SetupRootless(cmd *cobra.Command) error {
 		}
 	}
 	if err != nil {
-		logrus.WithError(err).Fatal("")
+		logrus.Error(err)
+		os.Exit(1)
 	}
 	if became {
 		os.Exit(ret)
@@ -172,25 +170,6 @@ func (ic *ContainerEngine) SetupRootless(cmd *cobra.Command) error {
 	return nil
 }
 
-// Most podman commands when run in rootless mode, need to be executed in the
-// users usernamespace.  This function is updated with a  list of commands that
-// should NOT be run within the user namespace.
-func executeCommandInUserNS(cmd *cobra.Command) bool {
-	return os.Geteuid() == 0
-	// if os.Geteuid() == 0 {
-	// 	return false
-	// }
-	// switch cmd {
-	// case _migrateCommand,
-	// 	_mountCommand,
-	// 	_renumberCommand,
-	// 	_searchCommand,
-	// 	_versionCommand:
-	// 	return false
-	// }
-	// return true
-}
-
 func movePauseProcessToScope() error {
 	pausePidPath, err := util.GetRootlessPauseProcessPidPath()
 	if err != nil {
@@ -234,11 +213,3 @@ func setUMask() { // nolint:deadcode,unused
 func checkInput() error { // nolint:deadcode,unused
 	return nil
 }
-
-// func getCNIPluginsDir() string {
-// 	if rootless.IsRootless() {
-// 		return ""
-// 	}
-//
-// 	return registry.PodmanOptions.Network.CNIPluginDirs[0]
-// }
diff --git a/pkg/domain/infra/tunnel/system.go b/pkg/domain/infra/tunnel/system.go
index 7c7a55c05f..f373525c5b 100644
--- a/pkg/domain/infra/tunnel/system.go
+++ b/pkg/domain/infra/tunnel/system.go
@@ -7,6 +7,7 @@ import (
 	"github.com/containers/libpod/libpod/define"
 	"github.com/containers/libpod/pkg/bindings/system"
 	"github.com/containers/libpod/pkg/domain/entities"
+	"github.com/spf13/cobra"
 )
 
 func (ic *ContainerEngine) Info(ctx context.Context) (*define.Info, error) {
@@ -20,3 +21,7 @@ func (ic *ContainerEngine) RestService(_ context.Context, _ entities.ServiceOpti
 func (ic *ContainerEngine) VarlinkService(_ context.Context, _ entities.ServiceOptions) error {
 	panic(errors.New("varlink service is not supported when tunneling"))
 }
+
+func (ic *ContainerEngine) SetupRootless(_ context.Context, cmd *cobra.Command) error {
+	panic(errors.New("rootless engine mode is not supported when tunneling"))
+}
diff --git a/pkg/specgen/namespaces.go b/pkg/specgen/namespaces.go
index 2ef5bc229f..2e7f80fe8e 100644
--- a/pkg/specgen/namespaces.go
+++ b/pkg/specgen/namespaces.go
@@ -28,9 +28,9 @@ const (
 	// Bridge indicates that a CNI network stack
 	// should be used
 	Bridge NamespaceMode = "bridge"
-	// Slirp indicates that a slirp4ns network stack should
+	// Slirp indicates that a slirp4netns network stack should
 	// be used
-	Slirp NamespaceMode = "slirp4ns"
+	Slirp NamespaceMode = "slirp4netns"
 )
 
 // Namespace describes the namespace