diff --git a/docs/containers.conf.5.md b/docs/containers.conf.5.md
index 984334124..dfbc27a20 100644
--- a/docs/containers.conf.5.md
+++ b/docs/containers.conf.5.md
@@ -205,6 +205,10 @@ Run an init inside the container that forwards signals and reaps processes.
 
 **init_path**="/usr/libexec/podman/catatonit"
 
+If this option is not set catatonit is searched in the directories listed under
+the **helper_binaries_dir** option. It is recommended to just install catatonit
+there instead of configuring this option here.
+
 Path to the container-init binary, which forwards signals and reaps processes
 within containers. Note that the container-init binary will only be used when
 the `--init` for podman-create and podman-run is set.
@@ -574,6 +578,17 @@ with detailed information about the container.  Set to false by default.
 **helper_binaries_dir**=["/usr/libexec/podman", ...]
 
 A is a list of directories which are used to search for helper binaries.
+The following binaries are searched in these directories:
+ - aardvark-dns
+ - catatonit
+ - netavark
+ - pasta
+ - slirp4netns
+
+Podman machine uses it for these binaries:
+ - gvproxy
+ - qemu
+ - vfkit
 
 The default paths on Linux are:
 
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 2be4e6326..087f9de4a 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -149,6 +149,8 @@ type ContainersConfig struct {
 	Init bool `toml:"init,omitempty"`
 
 	// InitPath is the path for init to run if the Init bool is enabled
+	//
+	// Deprecated: Do not use this field directly use conf.FindInitBinary() instead.
 	InitPath string `toml:"init_path,omitempty"`
 
 	// IPCNS way to create a ipc namespace for the container
@@ -351,6 +353,8 @@ type EngineConfig struct {
 	InfraImage string `toml:"infra_image,omitempty"`
 
 	// InitPath is the path to the container-init binary.
+	//
+	// Deprecated: Do not use this field directly use conf.FindInitBinary() instead.
 	InitPath string `toml:"init_path,omitempty"`
 
 	// KubeGenerateType sets the Kubernetes kind/specification to generate by default
@@ -1223,3 +1227,20 @@ func ValidateImageVolumeMode(mode string) error {
 
 	return fmt.Errorf("invalid image volume mode %q required value: %s", mode, strings.Join(validImageVolumeModes, ", "))
 }
+
+// FindInitBinary will return the path to the init binary (catatonit)
+func (c *Config) FindInitBinary() (string, error) {
+	// Sigh, for some reason we ended up with two InitPath field in containers.conf and
+	// both are used in podman so we have to keep supporting both to prevent regressions.
+	if c.Containers.InitPath != "" {
+		return c.Containers.InitPath, nil
+	}
+	if c.Engine.InitPath != "" {
+		return c.Engine.InitPath, nil
+	}
+	// keep old default working to guarantee backwards comapt
+	if _, err := os.Stat(DefaultInitPath); err == nil {
+		return DefaultInitPath, nil
+	}
+	return c.FindHelperBinary(defaultInitName, true)
+}
diff --git a/pkg/config/containers.conf b/pkg/config/containers.conf
index 37b17071d..8c532f079 100644
--- a/pkg/config/containers.conf
+++ b/pkg/config/containers.conf
@@ -149,6 +149,9 @@ default_sysctls = [
 #init = false
 
 # Container init binary, if init=true, this is the init binary to be used for containers.
+# If this option is not set catatonit is searched in the directories listed under
+# the helper_binaries_dir option. It is recommended to just install catatonit
+# there instead of configuring this option here.
 #
 #init_path = "/usr/libexec/podman/catatonit"
 
diff --git a/pkg/config/containers.conf-freebsd b/pkg/config/containers.conf-freebsd
index de2bf682e..f471e3079 100644
--- a/pkg/config/containers.conf-freebsd
+++ b/pkg/config/containers.conf-freebsd
@@ -133,6 +133,9 @@ default_sysctls = [
 #init = false
 
 # Container init binary, if init=true, this is the init binary to be used for containers.
+# If this option is not set catatonit is searched in the directories listed under
+# the helper_binaries_dir option. It is recommended to just install catatonit
+# there instead of configuring this option here.
 #
 #init_path = "/usr/local/libexec/podman/catatonit"
 
diff --git a/pkg/config/default.go b/pkg/config/default.go
index b7167ed1b..e6bac2317 100644
--- a/pkg/config/default.go
+++ b/pkg/config/default.go
@@ -30,6 +30,9 @@ const (
 
 	// _defaultImageVolumeMode is a mode to handle built-in image volumes.
 	_defaultImageVolumeMode = _typeBind
+
+	// defaultInitName is the default name of the init binary
+	defaultInitName = "catatonit"
 )
 
 var (
@@ -432,7 +435,6 @@ func defaultEngineConfig() (*EngineConfig, error) {
 	}
 	c.RuntimeSupportsNoCgroups = []string{"crun", "krun"}
 	c.RuntimeSupportsKVM = []string{"kata", "kata-runtime", "kata-qemu", "kata-fc", "krun"}
-	c.InitPath = DefaultInitPath
 	c.NoPivotRoot = false
 
 	c.InfraImage = DefaultInfraImage
@@ -540,11 +542,6 @@ func (c *Config) Env() []string {
 	return c.Containers.Env
 }
 
-// InitPath returns location where init program added to containers when users specify the --init flag.
-func (c *Config) InitPath() string {
-	return c.Containers.InitPath
-}
-
 // IPCNS returns the default IPC Namespace configuration to run containers with.
 func (c *Config) IPCNS() string {
 	return c.Containers.IPCNS