diff --git a/src/SignatureAssertionUtil.php b/src/SignatureAssertionUtil.php
index 4a7f4e8976f9426bfb3bbad5f06c65adb5c72654..e468c8a0ccca85240660d09ce7ec9cf62a54660b 100644
--- a/src/SignatureAssertionUtil.php
+++ b/src/SignatureAssertionUtil.php
@@ -11,21 +11,29 @@ final class SignatureAssertionUtil
 	{
 	}
 
-
 	public static function checkSignature(callable $function, array $parameters, ?string $expectedReturnType): void
 	{
 		$reflection = new \ReflectionFunction($function);
 
 		// NUMBER OF PARAMETERS CHECK:
+		self::checkParameters($parameters, $reflection);
+
+		// RETURN TYPE:
+		self::checkReturnType($expectedReturnType, $reflection);
+	}
+
+	// parameters:
+	private static function checkParameters(array $parameters, \ReflectionFunction $reflection): void
+	{
 		$numberOfParameters = $reflection->getNumberOfParameters();
-		if($numberOfParameters !== count($parameters)) {
+		if ($numberOfParameters !== count($parameters)) {
 			throw FunctionSignatureAssertionError::wrongNumberOrArguments($reflection, count($parameters), $numberOfParameters);
 		}
 
 		// PARAMETER TYPES CHECK:
 		$i = 0;
 		/** @var string[] $parameters */
-		foreach($parameters AS $parameter) {
+		foreach ($parameters AS $parameter) {
 			assert(is_string($parameter));
 
 			$parameterReflection = $reflection->getParameters()[$i++];
@@ -37,46 +45,6 @@ final class SignatureAssertionUtil
 				...self::parseType($parameter)
 			);
 		}
-
-
-		// RETURN TYPE:
-		if($expectedReturnType !== NULL) {
-			if(!$reflection->hasReturnType()) {
-				throw FunctionSignatureAssertionError::missingReturnType($reflection, $expectedReturnType);
-			}
-
-			if ($reflection->hasReturnType()) {
-				list($expectedReturnType, $expectingNullable) = self::parseType($expectedReturnType);
-				$returnTypeReflection = $reflection->getReturnType();
-
-				$actuallyNullable = $returnTypeReflection->allowsNull();
-				if ($expectingNullable !== $actuallyNullable) {
-					throw FunctionSignatureAssertionError::wrongReturnTypeNullability(
-						$reflection,
-						$expectingNullable,
-						$actuallyNullable
-					);
-				}
-				if ($expectedReturnType !== (string) $reflection->getReturnType()) {
-					throw FunctionSignatureAssertionError::wrongReturnType(
-						$reflection,
-						$expectedReturnType,
-						(string) $reflection->getReturnType()
-					);
-				}
-			}
-		}
-	}
-
-	private static function parseType(string $type): array
-	{
-		$cleanType = $type; // e.g. ?Namespace\Class
-		$nullable = FALSE;
-		if ($type[0] === '?') {
-			$nullable = TRUE;
-			$cleanType = substr($type, 1); // without leading '?'
-		}
-		return [$cleanType, $nullable];
 	}
 
 	private static function checkFunctionParameter(
@@ -109,4 +77,48 @@ final class SignatureAssertionUtil
 		}
 	}
 
+	// Return-type:
+	private static function checkReturnType(?string $expectedReturnType, \ReflectionFunction $reflection): void
+	{
+		if ($expectedReturnType === NULL) {
+			return;
+		}
+
+		if (!$reflection->hasReturnType()) {
+			throw FunctionSignatureAssertionError::missingReturnType($reflection, $expectedReturnType);
+		}
+
+		[$expectedReturnType, $expectingNullable] = self::parseType($expectedReturnType);
+		$returnTypeReflection = $reflection->getReturnType();
+
+		$actuallyNullable = $returnTypeReflection->allowsNull();
+		if ($expectingNullable !== $actuallyNullable) {
+			throw FunctionSignatureAssertionError::wrongReturnTypeNullability(
+				$reflection,
+				$expectingNullable,
+				$actuallyNullable
+			);
+		}
+		if ($expectedReturnType !== (string) $reflection->getReturnType()) {
+			throw FunctionSignatureAssertionError::wrongReturnType(
+				$reflection,
+				$expectedReturnType,
+				(string) $reflection->getReturnType()
+			);
+		}
+	}
+
+	// helpers:
+
+	private static function parseType(string $type): array
+	{
+		$cleanType = $type; // e.g. ?Namespace\Class
+		$nullable = FALSE;
+		if ($type[0] === '?') {
+			$nullable = TRUE;
+			$cleanType = substr($type, 1); // without leading '?'
+		}
+		return [$cleanType, $nullable];
+	}
+
 }