diff --git a/.gitignore b/.gitignore
index e76b547..812e179 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/gtk+-2.24.22.tar.bz2
+SOURCES/gtk+-2.24.28.tar.bz2
diff --git a/.gtk2.metadata b/.gtk2.metadata
index 3e0009b..f50327c 100644
--- a/.gtk2.metadata
+++ b/.gtk2.metadata
@@ -1 +1 @@
-45eb47fe4ee728e6bb08266a2244582ce31370db SOURCES/gtk+-2.24.22.tar.bz2
+b29814dba2e23c81b83a09162c49a1b638b268d8 SOURCES/gtk+-2.24.28.tar.bz2
diff --git a/SOURCES/0001-Fix-a-wrong-function-call.patch b/SOURCES/0001-Fix-a-wrong-function-call.patch
new file mode 100644
index 0000000..e3cbb0a
--- /dev/null
+++ b/SOURCES/0001-Fix-a-wrong-function-call.patch
@@ -0,0 +1,27 @@
+From 7ee8b1fd9af52842e87c26465b9aa8921e62ec90 Mon Sep 17 00:00:00 2001
+From: Matthias Clasen <mclasen@redhat.com>
+Date: Fri, 17 Jul 2015 21:20:10 -0400
+Subject: [PATCH 1/2] Fix a wrong function call
+
+cairo_region_destroy can't handle GdkRegions. We need to call
+gdk_region_destroy. Found by coverity.
+---
+ gdk/gdkwindow.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
+index a0500ce..eb0a56d 100644
+--- a/gdk/gdkwindow.c
++++ b/gdk/gdkwindow.c
+@@ -8785,7 +8785,7 @@ do_child_shapes (GdkWindow *window,
+ 
+   gdk_window_shape_combine_region (window, region, 0, 0);
+ 
+-  cairo_region_destroy (region);
++  gdk_region_destroy (region);
+ }
+ 
+ /**
+-- 
+2.4.5
+
diff --git a/SOURCES/0001-Print-to-a-file-in-the-current-directory-by-default.patch b/SOURCES/0001-Print-to-a-file-in-the-current-directory-by-default.patch
deleted file mode 100644
index 45e66ef..0000000
--- a/SOURCES/0001-Print-to-a-file-in-the-current-directory-by-default.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 60189143a4097c615f9cda0dbec2cd48b4eca77d Mon Sep 17 00:00:00 2001
-From: Mike Gorse <mgorse@suse.com>
-Date: Wed, 30 Oct 2013 15:42:09 -0500
-Subject: [PATCH] Print to a file in the current directory by default
-
-When printing to a file, the filename was not being propagated if a
-directory was not specified.
-
-https://bugzilla.gnome.org/show_bug.cgi?id=711177
----
- gtk/gtkprinteroptionwidget.c | 11 ++++++++++-
- 1 file changed, 10 insertions(+), 1 deletion(-)
-
-diff --git a/gtk/gtkprinteroptionwidget.c b/gtk/gtkprinteroptionwidget.c
-index 2f43edf..08c2aff 100644
---- a/gtk/gtkprinteroptionwidget.c
-+++ b/gtk/gtkprinteroptionwidget.c
-@@ -521,7 +521,16 @@ filesave_changed_cb (GtkWidget              *button,
-       if (g_uri_parse_scheme (file) != NULL)
-         uri = g_strdup (file);
-       else
--        uri = g_build_path ("/", gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (priv->combo)), file, NULL);
-+        {
-+          gchar *chooser_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (priv->combo));
-+          if (chooser_uri)
-+            {
-+              uri = g_build_path ("/", chooser_uri, file, NULL);
-+              g_free (chooser_uri);
-+            }
-+          else
-+            uri = g_filename_to_uri (file, NULL, NULL);
-+        }
-     }
-  
-   if (uri)
--- 
-1.9.3
-
diff --git a/SOURCES/0001-gdkwindow-Handle-references-in-update_windows-list-c.patch b/SOURCES/0001-gdkwindow-Handle-references-in-update_windows-list-c.patch
deleted file mode 100644
index 07f7ec1..0000000
--- a/SOURCES/0001-gdkwindow-Handle-references-in-update_windows-list-c.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From c212cb8f32c02cf2fe691372b753d334f6e25d69 Mon Sep 17 00:00:00 2001
-From: Marek Kasik <mkasik@redhat.com>
-Date: Mon, 16 Dec 2013 18:04:14 +0100
-Subject: [PATCH 1/2] gdkwindow: Handle references in "update_windows" list
- correctly
-
-Since update_windows list is a static variable in GdkWindow.c which
-contains pointers to windows which needs to be updated, it can happen
-that it contains a pointer to a window even after quit from a gtk_main().
-If another gtk_main() is called in the same process it tries to process
-windows in the list which leads to a crash.
-Correct reference count handling of added windows prevents such applications
-from crash.
-
-https://bugzilla.gnome.org/show_bug.cgi?id=711552
----
- gdk/gdkwindow.c | 19 ++++++++++++-------
- 1 file changed, 12 insertions(+), 7 deletions(-)
-
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index f5f0339..0f33fb0 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -5267,7 +5267,7 @@ gdk_window_add_update_window (GdkWindow *window)
- 	      prev = tmp;
- 	    }
- 	  /* here, tmp got advanced past all lower stacked siblings */
--	  tmp = g_slist_prepend (tmp, window);
-+	  tmp = g_slist_prepend (tmp, g_object_ref (window));
- 	  if (prev)
- 	    prev->next = tmp;
- 	  else
-@@ -5280,7 +5280,7 @@ gdk_window_add_update_window (GdkWindow *window)
-        */
-       if (has_ancestor_in_list && gdk_window_is_ancestor (tmp->data, window))
- 	{
--	  tmp = g_slist_prepend (tmp, window);
-+	  tmp = g_slist_prepend (tmp, g_object_ref (window));
- 
- 	  if (prev)
- 	    prev->next = tmp;
-@@ -5294,7 +5294,7 @@ gdk_window_add_update_window (GdkWindow *window)
-        */
-       if (! tmp->next && has_ancestor_in_list)
- 	{
--	  tmp = g_slist_append (tmp, window);
-+	  tmp = g_slist_append (tmp, g_object_ref (window));
- 	  return;
- 	}
- 
-@@ -5305,13 +5305,20 @@ gdk_window_add_update_window (GdkWindow *window)
-    *  hierarchy than what is already in the list) or the list is
-    *  empty, prepend
-    */
--  update_windows = g_slist_prepend (update_windows, window);
-+  update_windows = g_slist_prepend (update_windows, g_object_ref (window));
- }
- 
- static void
- gdk_window_remove_update_window (GdkWindow *window)
- {
--  update_windows = g_slist_remove (update_windows, window);
-+  GSList *link;
-+
-+  link = g_slist_find (update_windows, window);
-+  if (link != NULL)
-+    {
-+      update_windows = g_slist_delete_link (update_windows, link);
-+      g_object_unref (window);
-+    }
- }
- 
- static gboolean
-@@ -5687,8 +5694,6 @@ gdk_window_process_all_updates (void)
- 
-   _gdk_windowing_before_process_all_updates ();
- 
--  g_slist_foreach (old_update_windows, (GFunc)g_object_ref, NULL);
--
-   while (tmp_list)
-     {
-       GdkWindowObject *private = (GdkWindowObject *)tmp_list->data;
--- 
-1.8.4.2
-
diff --git a/SOURCES/0002-gdkwindow-Don-t-add-the-same-window-to-update_window.patch b/SOURCES/0002-gdkwindow-Don-t-add-the-same-window-to-update_window.patch
deleted file mode 100644
index ee08344..0000000
--- a/SOURCES/0002-gdkwindow-Don-t-add-the-same-window-to-update_window.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 090159cec92921182f8eeb59762ceba11c1581f4 Mon Sep 17 00:00:00 2001
-From: Marek Kasik <mkasik@redhat.com>
-Date: Wed, 18 Dec 2013 18:28:39 +0100
-Subject: [PATCH 2/2] gdkwindow: Don't add the same window to "update_windows"
- twice
-
-This prevents passing of such window to another GMainLoop.
-
-https://bugzilla.gnome.org/show_bug.cgi?id=711552
----
- gdk/gdkwindow.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
-index 0f33fb0..153144a 100644
---- a/gdk/gdkwindow.c
-+++ b/gdk/gdkwindow.c
-@@ -5242,6 +5242,15 @@ gdk_window_add_update_window (GdkWindow *window)
-   GSList *prev = NULL;
-   gboolean has_ancestor_in_list = FALSE;
- 
-+  /*  Check whether "window" is already in "update_windows" list.
-+   *  It could be added during execution of gtk_widget_destroy() when
-+   *  setting focus widget to NULL and redrawing old focus widget.
-+   *  See bug 711552.
-+   */
-+  tmp = g_slist_find (update_windows, window);
-+  if (tmp != NULL)
-+    return;
-+
-   for (tmp = update_windows; tmp; tmp = tmp->next)
-     {
-       GdkWindowObject *parent = GDK_WINDOW_OBJECT (window)->parent;
--- 
-1.8.4.2
-
diff --git a/SPECS/gtk2.spec b/SPECS/gtk2.spec
index 753d4b8..73ebae7 100644
--- a/SPECS/gtk2.spec
+++ b/SPECS/gtk2.spec
@@ -17,8 +17,8 @@
 
 Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X
 Name: gtk2
-Version: 2.24.22
-Release: 5%{?dist}.1
+Version: 2.24.28
+Release: 8%{?dist}
 License: LGPLv2+
 Group: System Environment/Libraries
 URL: http://www.gtk.org
@@ -36,11 +36,8 @@ Patch2: icon-padding.patch
 Patch8: tooltip-positioning.patch
 # https://bugzilla.gnome.org/show_bug.cgi?id=611313
 Patch15: window-dragging.patch
-# https://bugzilla.redhat.com/show_bug.cgi?id=1054751
-Patch31: 0001-gdkwindow-Handle-references-in-update_windows-list-c.patch
-Patch32: 0002-gdkwindow-Don-t-add-the-same-window-to-update_window.patch
-# https://bugzilla.redhat.com/show_bug.cgi?id=1130207
-Patch33: 0001-Print-to-a-file-in-the-current-directory-by-default.patch
+# coverity fix
+Patch20: 0001-Fix-a-wrong-function-call.patch
 
 BuildRequires: atk-devel >= %{atk_version}
 BuildRequires: glib2-devel >= %{glib2_version}
@@ -152,11 +149,11 @@ This package contains developer documentation for the GTK+ widget toolkit.
 %patch2 -p1 -b .icon-padding
 %patch8 -p1 -b .tooltip-positioning
 %patch15 -p1 -b .window-dragging
-%patch31 -p1 -b .gdkwindow-Handle-references
-%patch32 -p1 -b .gdkwindow-Don-t-add
-%patch33 -p1 -b .print-to-file
+%patch20 -p1
 
 %build
+
+export CFLAGS='-fno-strict-aliasing %optflags'
 (if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; CONFIGFLAGS=--enable-gtk-doc; fi;
  %configure $CONFIGFLAGS \
 	--enable-man		\
@@ -341,10 +338,22 @@ gtk-query-immodules-2.0-%{__isa_bits} --update-cache
 %doc tmpdocs/examples
 
 %changelog
-* Mon Aug 18 2014 Marek Kasik <mkasik@redhat.com> - 2.24.22-5.el7_0.1
+* Fri Jul 17 2015 Matthias Clasen <mclasen@redhat.com> - 2.24.28-8
+- Fix a coverty spotted bug
+Related: #1221171
+
+* Thu May 14 2015 Matthias Clasen <mclasen@redhat.com> - 2.24.28-7
+- Build with -fno-strict-aliasing
+Related: #1221171
+
+* Thu May 14 2015 Matthias Clasen <mclasen@redhat.com> - 2.24.28-1
+- Update to 2.24.28
+Resolves: #1221171
+
+* Thu Jul 31 2014 Marek Kasik <mkasik@redhat.com> - 2.24.22-6
 - Propagate filename if directory was not specified
 - when printing to a file
-- Resolves: #1130207
+- Resolves: #1109100
 
 * Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 2.24.22-5
 - Mass rebuild 2014-01-24