diff --git a/src/Binding/Definition.php b/src/Binding/Definition.php
index 7184bf5f705909688e9b440e7be16abe3a8bf71c..6e0594c9185ba6bfde0a9879d7cc42462c97ed3f 100644
--- a/src/Binding/Definition.php
+++ b/src/Binding/Definition.php
@@ -13,4 +13,7 @@ interface Definition {
 
 	/** @return T */
 	public function value();
+
+	/** @return mixed */
+	public function option( string $name );
 }
diff --git a/src/Binding/Definition/CallableDefinition.php b/src/Binding/Definition/CallableDefinition.php
index 9bf3774f733e3c1c074ce4d5614288b1ab8c1da4..5ceb6d08c3e9a59b3fe11b1d3f17b485bdba743d 100644
--- a/src/Binding/Definition/CallableDefinition.php
+++ b/src/Binding/Definition/CallableDefinition.php
@@ -15,12 +15,17 @@ class CallableDefinition implements Definition {
 	/** @var callable */
 	private $callable;
 
+	/** @var array<string, mixed> */
+	private array $options;
+
 	public function __construct(
 		callable $callable,
 		?string $hook = null,
+		array $options = []
 	) {
 		$this->callable = $callable;
 		$this->hook     = $hook;
+		$this->options  = $options;
 	}
 
 	public function hook(): ?string {
@@ -30,4 +35,8 @@ class CallableDefinition implements Definition {
 	public function value() {
 		return $this->callable;
 	}
+
+	public function option( string $name ) {
+		return $this->options[ $name ] ?? null;
+	}
 }
diff --git a/src/Binding/Definition/HookableDefinition.php b/src/Binding/Definition/HookableDefinition.php
index 286d9ba5157f4a2b6fc92d7dda9b5a0eabf4f8f0..fe3cf80e81113a3629c19e535908efa4101488e4 100644
--- a/src/Binding/Definition/HookableDefinition.php
+++ b/src/Binding/Definition/HookableDefinition.php
@@ -9,18 +9,22 @@ use WPDesk\Init\Binding\Definition;
 /** @implements Definition<class-string<Hookable>> */
 class HookableDefinition implements Definition {
 
-	/** @var ?string */
-	private $hook;
+	private ?string $hook;
 
 	/** @var class-string<Hookable> */
-	private $hookable;
+	private string $hookable;
+
+	/** @var array<string, mixed> */
+	private array $options;
 
 	public function __construct(
 		string $hookable,
 		?string $hook = null,
+		array $options = []
 	) {
 		$this->hook     = $hook;
 		$this->hookable = $hookable;
+		$this->options  = $options;
 	}
 
 	public function hook(): ?string {
@@ -30,4 +34,12 @@ class HookableDefinition implements Definition {
 	public function value() {
 		return $this->hookable;
 	}
+
+	/**
+	 * @param string $name
+	 * @return mixed
+	 */
+	public function option( string $name ) {
+		return $this->options[ $name ] ?? null;
+	}
 }
diff --git a/src/Binding/Definition/UnknownDefinition.php b/src/Binding/Definition/UnknownDefinition.php
index 3ee808e16bf9ce975e009cac36f4d2120b0aa86c..e238d9b5a6e701876d14d7e74f77204049e777a3 100644
--- a/src/Binding/Definition/UnknownDefinition.php
+++ b/src/Binding/Definition/UnknownDefinition.php
@@ -15,12 +15,17 @@ class UnknownDefinition implements Definition {
 	/** @var mixed */
 	private $value;
 
+	/** @var array<string, mixed> */
+	private array $options;
+
 	public function __construct(
 		$value,
-		?string $hook = null
+		?string $hook = null,
+		array $options = []
 	) {
-		$this->value = $value;
-		$this->hook     = $hook;
+		$this->value   = $value;
+		$this->hook    = $hook;
+		$this->options = $options;
 	}
 
 	public function hook(): ?string {
@@ -30,4 +35,8 @@ class UnknownDefinition implements Definition {
 	public function value() {
 		return $this->value;
 	}
+
+	public function option( string $name ) {
+		return $this->options[ $name ] ?? null;
+	}
 }
diff --git a/src/Binding/DefinitionFactory.php b/src/Binding/DefinitionFactory.php
index 5b66072e90754f9850266fb160bacbab83e5919b..dc38268b15e90d33f1749b1f8e74a4b28c77d51e 100644
--- a/src/Binding/DefinitionFactory.php
+++ b/src/Binding/DefinitionFactory.php
@@ -10,15 +10,15 @@ use WPDesk\Init\Binding\Definition\UnknownDefinition;
 
 class DefinitionFactory {
 
-	public function create( $value, ?string $hook ): Definition {
+	public function create( $value, ?string $hook, array $options = [] ): Definition {
 		if ( is_string( $value ) && class_exists( $value ) && is_subclass_of( $value, Hookable::class, true ) ) {
-			return new HookableDefinition( $value, $hook );
+			return new HookableDefinition( $value, $hook, $options );
 		}
 
 		if ( is_callable( $value ) ) {
-			return new CallableDefinition( $value, $hook );
+			return new CallableDefinition( $value, $hook, $options );
 		}
 
-		return new UnknownDefinition( $value, $hook );
+		return new UnknownDefinition( $value, $hook, $options );
 	}
 }
diff --git a/src/Binding/Loader/ArrayDefinitions.php b/src/Binding/Loader/ArrayDefinitions.php
index 865b0a3cd46c46c390515b66401d1add22337014..aa30bbe03d5bd950b3f566c21871b6d2e8b73bd6 100644
--- a/src/Binding/Loader/ArrayDefinitions.php
+++ b/src/Binding/Loader/ArrayDefinitions.php
@@ -16,7 +16,7 @@ class ArrayDefinitions implements BindingDefinitions {
 	/** @var DefinitionFactory */
 	private $factory;
 
-	public function __construct( array $bindings, ?DefinitionFactory $factory = null) {
+	public function __construct( array $bindings, ?DefinitionFactory $factory = null ) {
 		$this->bindings = $bindings;
 		$this->factory  = $factory ?? new DefinitionFactory();
 	}
@@ -28,8 +28,18 @@ class ArrayDefinitions implements BindingDefinitions {
 	private function normalize( iterable $bindings ): iterable {
 		foreach ( $bindings as $key => $value ) {
 			if ( is_array( $value ) ) {
-				foreach ( $value as $unit ) {
-					yield $this->create( $unit, $key );
+				if ( isset( $value['handler'] ) ) {
+					// Single item with handler
+					yield $this->create( $value['handler'], $key, $value );
+				} else {
+					// Multiple items
+					foreach ( $value as $unit ) {
+						if ( is_array( $unit ) && isset( $unit['handler'] ) ) {
+							yield $this->create( $unit['handler'], $key, $unit );
+						} else {
+							yield $this->create( $unit, $key );
+						}
+					}
 				}
 			} else {
 				yield $this->create( $value, $key );
@@ -38,10 +48,10 @@ class ArrayDefinitions implements BindingDefinitions {
 	}
 
 	/**
-     * @param mixed $value
+	 * @param mixed $value
 	 * @param int|string $hook
 	 */
-	private function create( $value, $hook ): Definition {
-		return $this->factory->create( $value, is_int( $hook ) ? null : $hook );
+	private function create( $value, $hook, array $options = [] ): Definition {
+		return $this->factory->create( $value, is_int( $hook ) ? null : $hook, $options );
 	}
 }