diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index f3d8517..fcc57b7 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -51,7 +51,7 @@
   (list (bash-patch seqno (base32 hash))
         ...))
 
-(define %patch-series-4.3
+(define %patch-series-4.3-for-graft
   ;; This is the current patches series for 4.3, generated using
   ;; 'download-patches' below.
   (patch-series
@@ -96,7 +96,16 @@
    (39 "1v3l3vkc3g2b6fjycqwlakr8xhiw6bmw6q0zd6bi0m0m4bnxr55b")
    (40 "0sypv66vsldmc95gwvf7ylz1k7y37vnvdsjg8ajjr6b2j9mkkfw4")
    (41 "06ic2gdpbi1afik3wqf9d4vh95if4bz8bmhcgr555621dsb35i2f")
-   (42 "06a90k0p6bqc4wk2dsmapna69124an76xvlnlj3xm497vci968dc")))
+   (42 "06a90k0p6bqc4wk2dsmapna69124an76xvlnlj3xm497vci968dc")
+   (43 "1031g97w8gamimb41jr9r2qm7mn10k5mr3sd3y12avml0p0a7a27")
+   (44 "16bzaq9fs2kaw2n2k6vvljkjw5k5kx06isnq8hxkfrxz60384f4k")
+   (45 "08q02mj9imp2njpgm6f5q5m61i7qzp33rbxxzarixalyisbw6vms")
+   (46 "13v8dymwj83wcvrfayjqrs5kqar05bcj4zpiacrjkkchnsk5dd5k")
+   (47 "0jkwqviwkqdc13wv3q0g0kapjr68ggs1xzhqy696pfkqgvg4i4n6")   ;CVE-2016-0634
+   (48 "18nzlk1idwkq0xd54s83lx8kam8kcvz7yc0mw6hnq2ax3i2ib0jv"))) ;CVE-2016-7543
+
+(define %patch-series-4.3
+  (take %patch-series-4.3-for-graft 42))
 
 (define (download-patches store count)
   "Download COUNT Bash patches into store.  Return a list of
@@ -164,6 +173,7 @@ number/base32-hash tuples, directly usable in the 'patch-series' form."
          (version "4.3"))
     (package
      (name "bash")
+     (replacement bash/fixed)
      (source (origin
               (method url-fetch)
               (uri (string-append
@@ -225,9 +235,19 @@ without modification.")
      (license gpl3+)
      (home-page "http://www.gnu.org/software/bash/"))))
 
+(define bash/fixed
+  (package (inherit bash)
+    (replacement #f)
+    (version (string-append "4.3."
+                            (number->string
+                             (length %patch-series-4.3-for-graft))))
+    (source (origin
+              (inherit (package-source bash))
+              (patches %patch-series-4.3-for-graft)))))
+
 (define-public bash-minimal
   ;; A stripped-down Bash for non-interactive use.
-  (package (inherit bash)
+  (package/inherit bash
     (name "bash-minimal")
     (inputs '())                                ; no readline, no curses
     (arguments
@@ -254,8 +274,7 @@ without modification.")
   ;; Statically-linked Bash that contains nothing but the 'bash' binary and
   ;; 'sh' symlink, without any reference.
   (let ((bash (static-package bash-minimal)))
-    (package
-      (inherit bash)
+    (package/inherit bash
       (name "bash-static")
       (arguments
        (substitute-keyword-arguments
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index cce831b..04eda21 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -460,20 +460,19 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
   (let* ((gcc  (cross-gcc-wrapper gcc-boot0 binutils-boot0
                                   glibc-final-with-bootstrap-bash
                                   (car (assoc-ref %boot1-inputs "bash"))))
-         (bash (package (inherit static-bash)
-                 (arguments
-                  `(#:guile ,%bootstrap-guile
-                    ,@(package-arguments static-bash)))))
+         (bash (package/inherit static-bash
+                                (arguments
+                                 `(#:guile ,%bootstrap-guile
+                                   ,@(package-arguments static-bash)))))
          (inputs `(("gcc" ,gcc)
                    ("libc" ,glibc-final-with-bootstrap-bash)
                    ,@(fold alist-delete %boot1-inputs
-                           '("gcc" "libc")))))
-    (package
-      (inherit (package-with-bootstrap-guile
-                (package-with-explicit-inputs bash inputs
-                                              (current-source-location)
-                                              #:guile %bootstrap-guile)))
-      (native-inputs `(("bison" ,bison-boot1))))))
+                           '("gcc" "libc"))))
+         (p (package-with-bootstrap-guile
+             (package-with-explicit-inputs bash inputs
+                                           (current-source-location)
+                                           #:guile %bootstrap-guile))))
+    (package/inherit p (native-inputs `(("bison" ,bison-boot1))))))
 
 (define gettext-boot0
   ;; A minimal gettext used during bootstrap.
@@ -679,13 +678,13 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
 (define bash-final
   ;; Link with `-static-libgcc' to make sure we don't retain a reference
   ;; to the bootstrap GCC.
-  (package
-    (inherit (package-with-bootstrap-guile
-              (package-with-explicit-inputs (static-libgcc-package bash)
-                                            %boot3-inputs
-                                            (current-source-location)
-                                            #:guile %bootstrap-guile)))
-    (native-inputs `(("bison" ,bison-boot1)))))
+  (let ((p (package-with-bootstrap-guile
+            (package-with-explicit-inputs (static-libgcc-package bash)
+                                          %boot3-inputs
+                                          (current-source-location)
+                                          #:guile %bootstrap-guile))))
+    (package/inherit p
+      (native-inputs `(("bison" ,bison-boot1))))))
 
 (define %boot4-inputs
   ;; Now use the final Bash.
diff --git a/guix/packages.scm b/guix/packages.scm
index 2264c5a..a375354 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -97,6 +97,7 @@
             package-transitive-native-search-paths
             package-transitive-supported-systems
             package-input-rewriting
+            package/inherit
             package-source-derivation
             package-derivation
             package-cross-derivation
@@ -776,6 +777,16 @@ package and returns its new name after rewrite."
 
   replace)
 
+(define-syntax-rule (package/inherit p overrides ...)
+  "Like (package (inherit P) OVERRIDES ...), except that the same
+transformation is done to the package replacement, if any.  P must be a bare
+identifier, and will be bound to either P or its replacement when evaluating
+OVERRIDES."
+  (let loop ((p p))
+    (package (inherit p)
+      overrides ...
+      (replacement (and=> (package-replacement p) loop)))))
+
 
 ;;;
 ;;; Package derivations.
