diff --git a/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php b/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php
index 858a8e5..90f07e0 100644
--- a/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php
+++ b/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php
@@ -215,7 +215,15 @@ class Drupal_Sniffs_Commenting_FunctionCommentSniff implements PHP_CodeSniffer_S
                     // Check return type (can be multiple, separated by '|').
                     $typeNames      = explode('|', $type);
                     $suggestedNames = array();
+                    $hasNull = false;
+                    $hasMultiple = false;
+                    if (count($typeNames) > 0) {
+                      $hasMultiple = true;
+                    }
                     foreach ($typeNames as $i => $typeName) {
+                        if (strtolower($typeName) == 'null') {
+                          $hasNull = true;
+                        }
                         $suggestedName = $this->suggestType($typeName);
                         if (in_array($suggestedName, $suggestedNames) === false) {
                             $suggestedNames[] = $suggestedName;
@@ -246,17 +254,26 @@ class Drupal_Sniffs_Commenting_FunctionCommentSniff implements PHP_CodeSniffer_S
                         // somewhere in the function that returns something.
                         if (isset($tokens[$stackPtr]['scope_closer']) === true) {
                             $endToken    = $tokens[$stackPtr]['scope_closer'];
-                            $returnToken = $phpcsFile->findNext(T_RETURN, $stackPtr, $endToken);
-                            if ($returnToken === false) {
-                                $error = '@return doc comment specified, but function has no return statement';
-                                $phpcsFile->addError($error, $return, 'InvalidNoReturn');
-                            } else {
-                                $semicolon = $phpcsFile->findNext(T_WHITESPACE, ($returnToken + 1), null, true);
-                                if ($tokens[$semicolon]['code'] === T_SEMICOLON) {
-                                    $error = 'Function return type is not void, but function is returning void here';
-                                    $phpcsFile->addError($error, $returnToken, 'InvalidReturnNotVoid');
+                            $foundReturnToken = false;
+                            $searchStart = $stackPtr;
+                            do {
+                                $returnToken = $phpcsFile->findNext(T_RETURN, $searchStart, $endToken);
+                                if ($returnToken === false && !$foundReturnToken) {
+                                    $error = '@return doc comment specified, but function has no return statement';
+                                    $phpcsFile->addError($error, $return, 'InvalidNoReturn');
+                                } else {
+                                    $foundReturnToken = true;
+                                    $semicolon = $phpcsFile->findNext(T_WHITESPACE, ($returnToken + 1), null, true);
+                                    if ($tokens[$semicolon]['code'] === T_SEMICOLON) {
+                                        // Void return is allowed if the @return type has null in it.
+                                        if (!$hasNull) {
+                                          $error = 'Function return type is not void, but function is returning void here';
+                                          $phpcsFile->addError($error, $returnToken, 'InvalidReturnNotVoid');
+                                        }
+                                    }
+                                    $searchStart = $returnToken + 1;
                                 }
-                            }
+                            } while ($returnToken !== false);
                         }
                     }//end if
                 }//end if
