diff -rc grep-2.5.4.orig/src/grep.c grep-2.5.4/src/grep.c
*** grep-2.5.4.orig/src/grep.c	2009-02-03 18:49:52.000000000 +0000
--- grep-2.5.4/src/grep.c	2009-08-24 01:44:28.000000000 +0000
***************
*** 792,798 ****
    char *buf;		/* XXX */
    const char *ibeg;	/* XXX */
  
!   if (match_icase)	/* XXX - None of the -i stuff should be here.  */
      {
        int i = lim - beg;
  
--- 792,802 ----
    char *buf;		/* XXX */
    const char *ibeg;	/* XXX */
  
!   if (match_icase	/* XXX - None of the -i stuff should be here.  */
! #ifdef MBS_SUPPORT
!       && MB_CUR_MAX > 1
! #endif
!     )
      {
        int i = lim - beg;
  
***************
*** 2234,2240 ****
  
    set_limits();
  
! #ifdef MBS_SUPPORT
    if (match_icase)
      mb_icase_keys (&keys, &keycc);
  #endif /* MBS_SUPPORT */
--- 2238,2244 ----
  
    set_limits();
  
! #if 0 /* MBS_SUPPORT */
    if (match_icase)
      mb_icase_keys (&keys, &keycc);
  #endif /* MBS_SUPPORT */
diff -rc grep-2.5.4.orig/src/search.c grep-2.5.4/src/search.c
*** grep-2.5.4.orig/src/search.c	2009-01-31 05:39:54.000000000 +0000
--- grep-2.5.4/src/search.c	2009-08-24 01:44:40.000000000 +0000
***************
*** 193,199 ****
    size_t total = size;
    char const *motif = pattern;
  
! #if 0
    if (match_icase)
      syntax_bits |= RE_ICASE;
  #endif
--- 193,199 ----
    size_t total = size;
    char const *motif = pattern;
  
! #if 1
    if (match_icase)
      syntax_bits |= RE_ICASE;
  #endif
***************
*** 444,451 ****
  		{
  		  /* Good enough for a non-exact match.
  		     No need to look at further patterns, if any.  */
! 		  beg = match;
! 		  goto success_in_len;
  		}
  	      if (match < best_match || (match == best_match && len > best_len))
  		{
--- 444,450 ----
  		{
  		  /* Good enough for a non-exact match.
  		     No need to look at further patterns, if any.  */
! 		  goto success;
  		}
  	      if (match < best_match || (match == best_match && len > best_len))
  		{
***************
*** 534,540 ****
      }
  #endif /* MBS_SUPPORT */
  
!   for (beg = start_ptr ? start_ptr : buf; beg <= buf + size; beg++)
      {
        size_t offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
        if (offset == (size_t) -1)
--- 533,539 ----
      }
  #endif /* MBS_SUPPORT */
  
!   for (beg = start_ptr ? start_ptr : buf; beg < buf + size; beg++)
      {
        size_t offset = kwsexec (kwset, beg, buf + size - beg, &kwsmatch);
        if (offset == (size_t) -1)
