diff --git a/asdf.asd b/asdf.asd
index 9d8cce905d1a3c5e2481722c975d0ade5700d32a..827f18148c6af93b19a96918363fb8a83d1c66c4 100644
--- a/asdf.asd
+++ b/asdf.asd
@@ -14,7 +14,7 @@
   :licence "MIT"
   :description "Another System Definition Facility"
   :long-description "ASDF builds Common Lisp software organized into defined systems."
-  :version "2.26.67" ;; to be automatically updated by bin/bump-revision
+  :version "2.26.68" ;; to be automatically updated by bin/bump-revision
   :depends-on ()
   :components
   ((:file "asdf")))
diff --git a/header.lisp b/header.lisp
index 7bc0ec0dbc8f3be19a2e2b4555c87965500c8446..2a95609d5c80e143adc2306cb4912123d3137a8f 100644
--- a/header.lisp
+++ b/header.lisp
@@ -1,5 +1,5 @@
 ;; -*- mode: Common-Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp ; coding: utf-8 -*-
-;;; This is ASDF 2.26.67: Another System Definition Facility.
+;;; This is ASDF 2.26.68: Another System Definition Facility.
 ;;;
 ;;; Feedback, bug reports, and patches are all welcome:
 ;;; please mail to <asdf-devel@common-lisp.net>.
diff --git a/interface.lisp b/interface.lisp
index 7b0e7456c914e46fcfb0e613e1a88e6c84b39208..6e248149f77e19dad8adb1ac4097366a59045561 100644
--- a/interface.lisp
+++ b/interface.lisp
@@ -5,7 +5,7 @@
   (:nicknames :asdf)
   (:recycle :asdf/interface :asdf)
   (:unintern
-   #:*asdf-revision* #:around #:asdf-method-combination
+   #:*asdf-revision* #:around #:asdf-method-combination #:intern*
    #:do-traverse #:do-dep #:do-one-dep #:visit-action #:component-visited-p
    #:split #:make-collector
    #:loaded-systems ; makes for annoying SLIME completion
diff --git a/lisp-action.lisp b/lisp-action.lisp
index 573635898a3b6fcdb747679a3599c241f81b9dc5..73e97428d1e038e9ec19e590f0b48f838199e4d3 100644
--- a/lisp-action.lisp
+++ b/lisp-action.lisp
@@ -9,7 +9,7 @@
   (:export
    #:compile-error #:compile-failed #:compile-warned #:try-recompiling
    #:cl-source-file #:cl-source-file.cl #:cl-source-file.lsp
-   #:basic-load-op #:basic-compile-op
+   #:basic-load-op #:basic-compile-op #:compile-op-flags #:compile-op-proclamations
    #:load-op #:prepare-op #:compile-op #:test-op #:load-source-op #:prepare-source-op
    #:call-with-around-compile-hook
    #:perform-lisp-compilation #:perform-lisp-load-fasl #:perform-lisp-load-source))
diff --git a/package.lisp b/package.lisp
index b2b1b71c4ded799a2d2be04d09182d06e5227e93..38089b2c2b61a246c3aeff82f2d18d62db3586e2 100644
--- a/package.lisp
+++ b/package.lisp
@@ -179,10 +179,10 @@ when the symbol is not found."
                    ((gethash name shadowed)
                     (error "Can't both shadow ~S and import it from ~S" name (package-name p)))
                    (t
-                    (when (and xp (not (eq i x)))
-                      (unintern* x package))
                     (setf (gethash name imported) t)
-                    (import i package))))))
+                    (unless (and xp (eq i x))
+                      (when xp (unintern* x p))
+                      (import i package)))))))
            (ensure-mix (sym p)
              (let* ((name (string sym))
                     (sp (string p)))
@@ -197,22 +197,24 @@ when the symbol is not found."
                       (ensure-inherited sym sp)))))))
            (ensure-inherited (sym p)
              (let* ((name (string sym))
-                    (sp (string p))
-                    (s (find-symbol* name sp))
-                    (ip (gethash name inherited)))
+                    (symbol (find-symbol* name p))
+                    (sp (symbol-package symbol))
+                    (spn (package-name sp))
+                    (ipn (gethash name inherited)))
                (multiple-value-bind (x xp) (find-symbol name package)
                  (cond
-                   (ip
-                    (unless (eq ip sp)
+                   (ipn
+                    (unless (eq spn ipn)
                       (error "Can't inherit ~S from ~S, it is inherited from ~S"
-                             name sp ip)))
+                             name spn ipn)))
                    ((gethash name imported)
-                    (unless (eq s x)
+                    (unless (eq symbol x)
                       (error "Can't inherit ~S from ~S, it is imported from ~S"
                              name sp (package-name (symbol-package x)))))
                    ((gethash name shadowed)
-                    (error "Can't inherit ~S from ~S, it is shadowed" name sp))
+                    (error "Can't inherit ~S from ~S, it is shadowed" name spn))
                    (t
+                    (setf (gethash name inherited) spn)
                     (when xp
                       (unintern* x package)))))))
            (recycle-symbol (name)
@@ -353,6 +355,7 @@ when the symbol is not found."
               (error "define-package: bad :upgrade directive"))
             (setf upgrade (car args)) :else
       :do (error "unrecognized define-package keyword ~S" kw)
+      (progn fmakunbound fmakunbound-setf)
       :finally (return `(,package
                          :nicknames ,nicknames :documentation ,documentation
                          :use ,(if use-p use '(:common-lisp))
@@ -361,9 +364,24 @@ when the symbol is not found."
                          :recycle ,(if recycle-p recycle (cons package nicknames))
                          :mix ,mix :reexport ,reexport :unintern ,unintern
                          ,@(when upgrade `(:upgrade ,upgrade))
-                         :fmakunbound ,fmakunbound :fmakunbound-setf ,fmakunbound-setf)))))
+                         #|:fmakunbound ,fmakunbound :fmakunbound-setf ,fmakunbound-setf|#)))))
 
 (defmacro define-package (package &rest clauses)
   `(eval-when (:compile-toplevel :load-toplevel :execute)
      #+gcl (defpackage ,package (:use))
      (apply 'ensure-package ',(parse-define-package-form package clauses))))
+
+;;;; MAGIC FIXUP FOR ASDF.
+;; For bootstrapping reason, define-package can't do its magic on the asdf/package package itself,
+;; so instead do something ugly and special purpose. However, other packages could have imported
+;; from ASDF and be in trouble. There ought to be a better solution to merging packages without tears.
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+  (defvar *extirpated-symbols* ())
+  (when (find-package :asdf)
+    (let (l)
+      (do-external-symbols (sym :asdf/package)
+        (multiple-value-bind (symbol lstatus) (find-symbol* sym :asdf nil)
+          (when (and lstatus (not (eq sym symbol)))
+            (push symbol l))))
+      (push (cons :asdf (mapcar #'symbol-name-package (sort l 'string<))) *extirpated-symbols*))))
diff --git a/upgrade.lisp b/upgrade.lisp
index b0414a870aab53f8346d244d5ee73f972350f273..de3e005ae8a58fd2d9aaeccab87ebf09f9a9d892 100644
--- a/upgrade.lisp
+++ b/upgrade.lisp
@@ -24,7 +24,7 @@
          ;; "2.345.6" would be a development version in the official upstream
          ;; "2.345.0.7" would be your seventh local modification of official release 2.345
          ;; "2.345.6.7" would be your seventh local modification of development version 2.345.6
-         (asdf-version "2.26.67")
+         (asdf-version "2.26.68")
          (existing-asdf (find-class 'component nil))
          (existing-version *asdf-version*)
          (already-there (equal asdf-version existing-version)))
diff --git a/utility.lisp b/utility.lisp
index 677f28762ede79f2691f31fd447d6c30386a2467..2468cbef53289f30fa566a1ee56db14c0e9ae729 100644
--- a/utility.lisp
+++ b/utility.lisp
@@ -26,7 +26,7 @@
     ((defdef (def* def)
        `(defmacro ,def* (name formals &rest rest)
           `(progn
-             #+(or ecl gcl)
+             ;; #+(or ecl gcl)
              ,(when (and #+gcl<2.7 (symbolp name))
                 `(fmakunbound ',name))
              #-gcl ; gcl 2.7.0 notinline functions lose secondary return values :-(