diff --git a/grep-2.27-help-align.patch b/grep-2.27-help-align.patch
deleted file mode 100644
index 9aa4011..0000000
--- a/grep-2.27-help-align.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff --git a/src/grep.c b/src/grep.c
-index d567fcb..c4ffad2 100644
---- a/src/grep.c
-+++ b/src/grep.c
-@@ -1996,17 +1996,20 @@ Output control:\n\
-   -D, --devices=ACTION      how to handle devices, FIFOs and sockets;\n\
-                             ACTION is 'read' or 'skip'\n\
-   -r, --recursive           like --directories=recurse\n\
--  -R, --dereference-recursive  likewise, but follow all symlinks\n\
-+  -R, --dereference-recursive\n\
-+                            likewise, but follow all symlinks\n\
- "));
-       printf (_("\
--      --include=FILE_PATTERN  search only files that match FILE_PATTERN\n\
--      --exclude=FILE_PATTERN  skip files and directories matching\
-+      --include=FILE_PATTERN\n\
-+                            search only files that match FILE_PATTERN\n\
-+      --exclude=FILE_PATTERN\n\
-+                            skip files and directories matching\
-  FILE_PATTERN\n\
-       --exclude-from=FILE   skip files matching any file pattern from FILE\n\
--      --exclude-dir=PATTERN  directories that match PATTERN will be skipped.\n\
-+      --exclude-dir=PATTERN directories that match PATTERN will be skipped.\n\
- "));
-       printf (_("\
--  -L, --files-without-match  print only names of FILEs containing no match\n\
-+  -L, --files-without-match print only names of FILEs containing no match\n\
-   -l, --files-with-matches  print only names of FILEs containing matches\n\
-   -c, --count               print only a count of matching lines per FILE\n\
-   -T, --initial-tab         make tabs line up (if needed)\n\
diff --git a/grep-2.27-man-fix-gs.patch b/grep-2.27-man-fix-gs.patch
deleted file mode 100644
index caa33fe..0000000
--- a/grep-2.27-man-fix-gs.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-diff --git a/doc/grep.in.1 b/doc/grep.in.1
-index 05f3382..f83750c 100644
---- a/doc/grep.in.1
-+++ b/doc/grep.in.1
-@@ -327,7 +327,7 @@ Print
- .I NUM
- lines of trailing context after matching lines.
- Places a line containing a group separator
--.RB ( \-\^\- )
-+.RB "(described under " \-\^\-group\-separator )
- between contiguous groups of matches.
- With the
- .B \-o
-@@ -340,7 +340,7 @@ Print
- .I NUM
- lines of leading context before matching lines.
- Places a line containing a group separator
--.RB ( \-\^\- )
-+.RB "(described under " \-\^\-group\-separator )
- between contiguous groups of matches.
- With the
- .B \-o
-@@ -353,13 +353,24 @@ Print
- .I NUM
- lines of output context.
- Places a line containing a group separator
--.RB ( \-\^\- )
-+.RB "(described under " \-\^\-group\-separator )
- between contiguous groups of matches.
- With the
- .B \-o
- or
- .B \-\^\-only\-matching
- option, this has no effect and a warning is given.
-+.TP
-+.BI \-\^\-group\-separator= SEP
-+Use
-+.I SEP
-+as a group separator. By default
-+.I SEP
-+is double hyphen
-+.RB ( \-\^\- ).
-+.TP
-+.B \-\^\-no\-group-separator
-+Use empty string as a group separator.
- .SS "File and Directory Selection"
- .TP
- .BR \-a ", " \-\^\-text
-diff --git a/src/grep.c b/src/grep.c
-index 4538f22..d567fcb 100644
---- a/src/grep.c
-+++ b/src/grep.c
-@@ -2020,6 +2020,8 @@ Context control:\n\
- "));
-       printf (_("\
-   -NUM                      same as --context=NUM\n\
-+      --group-separator=SEP use SEP as a group separator\n\
-+      --no-group-separator  use empty string as a group separator\n\
-       --color[=WHEN],\n\
-       --colour[=WHEN]       use markers to highlight the matching strings;\n\
-                             WHEN is 'always', 'never', or 'auto'\n\
diff --git a/grep-2.28-help-align.patch b/grep-2.28-help-align.patch
new file mode 100644
index 0000000..adf4a9d
--- /dev/null
+++ b/grep-2.28-help-align.patch
@@ -0,0 +1,30 @@
+diff --git a/src/grep.c b/src/grep.c
+index 8c2054b..ba67e8b 100644
+--- a/src/grep.c
++++ b/src/grep.c
+@@ -1979,17 +1979,20 @@ Output control:\n\
+   -D, --devices=ACTION      how to handle devices, FIFOs and sockets;\n\
+                             ACTION is 'read' or 'skip'\n\
+   -r, --recursive           like --directories=recurse\n\
+-  -R, --dereference-recursive  likewise, but follow all symlinks\n\
++  -R, --dereference-recursive\n\
++                            likewise, but follow all symlinks\n\
+ "));
+       printf (_("\
+-      --include=FILE_PATTERN  search only files that match FILE_PATTERN\n\
+-      --exclude=FILE_PATTERN  skip files and directories matching\
++      --include=FILE_PATTERN\n\
++                            search only files that match FILE_PATTERN\n\
++      --exclude=FILE_PATTERN\n\
++                            skip files and directories matching\
+  FILE_PATTERN\n\
+       --exclude-from=FILE   skip files matching any file pattern from FILE\n\
+-      --exclude-dir=PATTERN  directories that match PATTERN will be skipped.\n\
++      --exclude-dir=PATTERN directories that match PATTERN will be skipped.\n\
+ "));
+       printf (_("\
+-  -L, --files-without-match  print only names of FILEs containing no match\n\
++  -L, --files-without-match print only names of FILEs containing no match\n\
+   -l, --files-with-matches  print only names of FILEs containing matches\n\
+   -c, --count               print only a count of matching lines per FILE\n\
+   -T, --initial-tab         make tabs line up (if needed)\n\
diff --git a/grep-2.28-man-fix-gs.patch b/grep-2.28-man-fix-gs.patch
new file mode 100644
index 0000000..461f05b
--- /dev/null
+++ b/grep-2.28-man-fix-gs.patch
@@ -0,0 +1,61 @@
+diff --git a/doc/grep.in.1 b/doc/grep.in.1
+index e3472f7..28709f7 100644
+--- a/doc/grep.in.1
++++ b/doc/grep.in.1
+@@ -327,7 +327,7 @@ Print
+ .I NUM
+ lines of trailing context after matching lines.
+ Places a line containing a group separator
+-.RB ( \-\^\- )
++.RB "(described under " \-\^\-group\-separator )
+ between contiguous groups of matches.
+ With the
+ .B \-o
+@@ -340,7 +340,7 @@ Print
+ .I NUM
+ lines of leading context before matching lines.
+ Places a line containing a group separator
+-.RB ( \-\^\- )
++.RB "(described under " \-\^\-group\-separator )
+ between contiguous groups of matches.
+ With the
+ .B \-o
+@@ -353,13 +353,24 @@ Print
+ .I NUM
+ lines of output context.
+ Places a line containing a group separator
+-.RB ( \-\^\- )
++.RB "(described under " \-\^\-group\-separator )
+ between contiguous groups of matches.
+ With the
+ .B \-o
+ or
+ .B \-\^\-only\-matching
+ option, this has no effect and a warning is given.
++.TP
++.BI \-\^\-group\-separator= SEP
++Use
++.I SEP
++as a group separator. By default
++.I SEP
++is double hyphen
++.RB ( \-\^\- ).
++.TP
++.B \-\^\-no\-group-separator
++Use empty string as a group separator.
+ .SS "File and Directory Selection"
+ .TP
+ .BR \-a ", " \-\^\-text
+diff --git a/src/grep.c b/src/grep.c
+index 81654c3..8c2054b 100644
+--- a/src/grep.c
++++ b/src/grep.c
+@@ -2003,6 +2003,8 @@ Context control:\n\
+ "));
+       printf (_("\
+   -NUM                      same as --context=NUM\n\
++      --group-separator=SEP use SEP as a group separator\n\
++      --no-group-separator  use empty string as a group separator\n\
+       --color[=WHEN],\n\
+       --colour[=WHEN]       use markers to highlight the matching strings;\n\
+                             WHEN is 'always', 'never', or 'auto'\n\
diff --git a/grep.spec b/grep.spec
index 6397cee..e11db34 100644
--- a/grep.spec
+++ b/grep.spec
@@ -2,7 +2,7 @@
 
 Summary: Pattern matching utilities
 Name: grep
-Version: 2.27
+Version: 2.28
 Release: 1%{?dist}
 License: GPLv3+
 URL: http://www.gnu.org/software/grep/
@@ -14,9 +14,9 @@ Source2: colorgrep.csh
 Source3: GREP_COLORS
 Source4: grepconf.sh
 # upstream ticket 39444
-Patch0: grep-2.27-man-fix-gs.patch
+Patch0: grep-2.28-man-fix-gs.patch
 # upstream ticket 39445
-Patch1: grep-2.27-help-align.patch
+Patch1: grep-2.28-help-align.patch
 Requires(post): /sbin/install-info
 Requires(preun): /sbin/install-info
 
@@ -86,6 +86,11 @@ fi
 %{_libexecdir}/grepconf.sh
 
 %changelog
+* Wed Feb  8 2017 Jaroslav Škarvada <jskarvad@redhat.com> - 2.28-1
+- New version
+  Resolves: rhbz#1419921
+- De-fuzzified patches
+
 * Wed Dec  7 2016 Jaroslav Škarvada <jskarvad@redhat.com> - 2.27-1
 - New version
   Resolves: rhbz#1402379
diff --git a/sources b/sources
index 9773447..0e820b8 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-6138dd227c39d4a25f81eea76a44d4cb  grep-2.27.tar.xz
+SHA512 (grep-2.28.tar.xz) = 7c1f054cf6a483fc43df51597b0b54df692169dbb6ff1f34918cc418786a8987e1dbeed00a5c08cc849fb74ae1c65b8e4dd9663ff1425dfb36bc636c312ad189