# check for repeated words separated by a single space
                if ($rawline =~ /^\+/ || $in_commit_log) {
+                       pos($rawline) = 1 if (!$in_commit_log);
                        while ($rawline =~ /\b($word_pattern) (?=($word_pattern))/g) {
 
                                my $first = $1;
                                my $second = $2;
-
+                               my $start_pos = $-[1];
+                               my $end_pos = $+[2];
                                if ($first =~ /(?:struct|union|enum)/) {
                                        pos($rawline) += length($first) + length($second) + 1;
                                        next;
                                }
 
-                               next if ($first ne $second);
+                               next if (lc($first) ne lc($second));
                                next if ($first eq 'long');
 
+                               # check for character before and after the word matches
+                               my $start_char = '';
+                               my $end_char = '';
+                               $start_char = substr($rawline, $start_pos - 1, 1) if ($start_pos > ($in_commit_log ? 0 : 1));
+                               $end_char = substr($rawline, $end_pos, 1) if ($end_pos < length($rawline));
+
+                               next if ($start_char =~ /^\S$/);
+                               next if (index(" \t.,;?!", $end_char) == -1);
+
                                if (WARN("REPEATED_WORD",
                                         "Possible repeated word: '$first'\n" . $herecurr) &&
                                    $fix) {