diff --git a/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php b/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php
index 19a0d44..b86f8cd 100644
--- a/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php
+++ b/coder_sniffer/Drupal/Sniffs/Commenting/FunctionCommentSniff.php
@@ -549,77 +549,91 @@ class Drupal_Sniffs_Commenting_FunctionCommentSniff implements PHP_CodeSniffer_S
                 $checkPos++;
             }
 
-            // Check the param type value.
-            $typeNames = explode('|', $param['type']);
-            foreach ($typeNames as $typeName) {
+            // Check the param type value. This could also be multiple parameter
+            // types separated by '|'.
+            $typeNames      = explode('|', $param['type']);
+            $suggestedNames = array();
+            foreach ($typeNames as $i => $typeName) {
+                $suggestedNames[] = $this->suggestType($typeName);
+            }
+
+            $suggestedType = implode('|', $suggestedNames);
+            if ($param['type'] !== $suggestedType) {
+                $error = 'Expected "%s" but found "%s" for parameter type';
+                $data  = array(
+                          $suggestedType,
+                          $param['type'],
+                         );
+                $fix   = $phpcsFile->addFixableError($error, $param['tag'], 'IncorrectParamVarName', $data);
+                if ($fix === true && $phpcsFile->fixer->enabled === true) {
+                    $content  = $suggestedType;
+                    $content .= str_repeat(' ', $param['type_space']);
+                    $content .= $param['var'];
+                    $phpcsFile->fixer->replaceToken(($param['tag'] + 2), $content);
+                }
+            }
+
+            if (count($typeNames) === 1) {
+                $typeName      = $param['type'];
                 $suggestedName = $this->suggestType($typeName);
-                if ($typeName !== $suggestedName) {
-                    $error = 'Expected "%s" but found "%s" for parameter type';
-                    $data  = array(
-                              $suggestedName,
-                              $typeName,
-                             );
-
-                    $fix = $phpcsFile->addFixableError($error, $param['tag'], 'IncorrectParamVarName', $data);
-                    if ($fix === true && $phpcsFile->fixer->enabled === true) {
-                        $content  = $suggestedName;
-                        $content .= str_repeat(' ', $param['type_space']);
-                        $content .= $param['var'];
-                        $phpcsFile->fixer->replaceToken(($param['tag'] + 2), $content);
-                    }
-                } else if (count($typeNames) === 1) {
-                    // Check type hint for array and custom type.
+            }
+
+            // This runs only if there is only one type name and the type name
+            // is not one of the disallowed type names.
+            if (count($typeNames) === 1 && $typeName === $suggestedName) {
+                // Check type hint for array and custom type.
+                $suggestedTypeHint = '';
+                if (strpos($suggestedName, 'array') !== false) {
+                    $suggestedTypeHint = 'array';
+                } else if (strpos($suggestedName, 'callable') !== false) {
+                    $suggestedTypeHint = 'callable';
+                } else if (substr($suggestedName, -2) === '[]') {
+                    $suggestedTypeHint = 'array';
+                } else if ($suggestedName === 'object') {
                     $suggestedTypeHint = '';
-                    if (strpos($suggestedName, 'array') !== false) {
-                        $suggestedTypeHint = 'array';
-                    } else if (strpos($suggestedName, 'callable') !== false) {
-                        $suggestedTypeHint = 'callable';
-                    } else if (substr($suggestedName, -2) === '[]') {
-                        $suggestedTypeHint = 'array';
-                    } else if ($suggestedName === 'object') {
-                        $suggestedTypeHint = '';
-                    } else if (in_array($typeName, $this->allowedTypes) === false) {
-                        $suggestedTypeHint = $suggestedName;
-                    }
+                } else if (in_array($typeName, $this->allowedTypes) === false) {
+                    $suggestedTypeHint = $suggestedName;
+                }
 
-                    if ($suggestedTypeHint !== '' && isset($realParams[$checkPos]) === true) {
-                        $typeHint = $realParams[$checkPos]['type_hint'];
-                        // Array type hints are allowed to be omitted.
-                        if ($typeHint === '' && $suggestedTypeHint !== 'array') {
-                            $error = 'Type hint "%s" missing for %s';
-                            $data  = array(
-                                      $suggestedTypeHint,
-                                      $param['var'],
-                                     );
-                            $phpcsFile->addError($error, $stackPtr, 'TypeHintMissing', $data);
-                        } else if ($typeHint !== $suggestedTypeHint && $typeHint !== '') {
-                            // The type hint could be fully namespaced, so we check
-                            // for the part after the last "\".
-                            $name_parts = explode('\\', $suggestedTypeHint);
-                            $last_part  = end($name_parts);
-                            if ($last_part !== $typeHint && $this->isAliasedType($typeHint, $suggestedTypeHint, $phpcsFile) === false) {
-                                $error = 'Expected type hint "%s"; found "%s" for %s';
-                                $data  = array(
-                                          $last_part,
-                                          $typeHint,
-                                          $param['var'],
-                                         );
-                                $phpcsFile->addError($error, $stackPtr, 'IncorrectTypeHint', $data);
-                            }
-                        }//end if
-                    } else if ($suggestedTypeHint === '' && isset($realParams[$checkPos]) === true) {
-                        $typeHint = $realParams[$checkPos]['type_hint'];
-                        if ($typeHint !== '' && $typeHint !== 'stdClass') {
-                            $error = 'Unknown type hint "%s" found for %s';
+                if ($suggestedTypeHint !== '' && isset($realParams[$checkPos]) === true) {
+                    $typeHint = $realParams[$checkPos]['type_hint'];
+                    // Array type hints are allowed to be omitted.
+                    if ($typeHint === '' && $suggestedTypeHint !== 'array') {
+                        $error = 'Type hint "%s" missing for %s';
+                        $data  = array(
+                                  $suggestedTypeHint,
+                                  $param['var'],
+                                 );
+                        $phpcsFile->addError($error, $stackPtr, 'TypeHintMissing', $data);
+                    } else if ($typeHint !== $suggestedTypeHint && $typeHint !== '') {
+                        // The type hint could be fully namespaced, so we check
+                        // for the part after the last "\".
+                        $name_parts = explode('\\', $suggestedTypeHint);
+                        $last_part  = end($name_parts);
+                        if ($last_part !== $typeHint && $this->isAliasedType($typeHint, $suggestedTypeHint, $phpcsFile) === false) {
+                            $error = 'Expected type hint "%s"; found "%s" for %s';
                             $data  = array(
+                                      $last_part,
                                       $typeHint,
                                       $param['var'],
                                      );
-                            $phpcsFile->addError($error, $stackPtr, 'InvalidTypeHint', $data);
+                            $phpcsFile->addError($error, $stackPtr, 'IncorrectTypeHint', $data);
                         }
                     }//end if
+                } else if ($suggestedTypeHint === ''
+                    && isset($realParams[$checkPos]) === true
+                ) {
+                    $typeHint = $realParams[$checkPos]['type_hint'];
+                    if ($typeHint !== '' && $typeHint !== 'stdClass') {
+                        $error = 'Unknown type hint "%s" found for %s';
+                        $data  = array(
+                                  $typeHint,
+                                  $param['var'],
+                                 );
+                        $phpcsFile->addError($error, $stackPtr, 'InvalidTypeHint', $data);
+                    }
                 }//end if
-            }//end foreach
+            }//end if
 
             $foundParams[] = $param['var'];
 
diff --git a/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.inc b/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.inc
index dee5e4a..47f94ec 100644
--- a/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.inc
+++ b/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.inc
@@ -226,3 +226,16 @@ function test19() {
  */
 function test20($arg1) {
 }
+
+/**
+ * Testing fix of incorrect param types.
+ *
+ * @param Array $arg1
+ *   The parameter type is not valid.
+ * @param integer|bool $arg2
+ *   One of the parameter types listed is not valid.
+ * @param integer|boolean|Array $arg3
+ *   All of the parameter types listed are not valid.
+ */
+function test21($arg1, $arg2, $arg3) {
+}
\ No newline at end of file
diff --git a/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.inc.fixed b/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.inc.fixed
index b528bae..b987e5f 100644
--- a/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.inc.fixed
+++ b/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.inc.fixed
@@ -238,3 +238,16 @@ function test19() {
  */
 function test20($arg1) {
 }
+
+/**
+ * Testing fix of incorrect param types.
+ *
+ * @param array $arg1
+ *   The parameter type is not valid.
+ * @param int|bool $arg2
+ *   One of the parameter types listed is not valid.
+ * @param int|bool|array $arg3
+ *   All of the parameter types listed are not valid.
+ */
+function test21($arg1, $arg2, $arg3) {
+}
diff --git a/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.php b/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.php
index b49ea45..f674582 100644
--- a/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.php
+++ b/coder_sniffer/Drupal/Test/Commenting/FunctionCommentUnitTest.php
@@ -36,6 +36,9 @@ class Drupal_Sniffs_Commenting_FunctionCommentUnitTest extends CoderSniffUnitTes
                 215 => 1,
                 216 => 1,
                 225 => 3,
+                233 => 1,
+                235 => 1,
+                237 => 1,
                );
 
     }//end getErrorList()
