diff --git a/action.lisp b/action.lisp
index 5ecf77ee295004d08a39d44d20acd1f4a5d25dea..faecf57a21997b8a47439941a079d2e56b2c454b 100644
--- a/action.lisp
+++ b/action.lisp
@@ -9,7 +9,7 @@
   (:export
    #:action #:define-convenience-action-methods
    #:explain #:action-description
-   #:downward-operation #:upward-operation #:sideway-operation #:selfward-operation
+   #:downward-operation #:upward-operation #:sideway-operation #:selfward-operation #:non-propagating-operation
    #:component-depends-on
    #:input-files #:output-files #:output-file #:operation-done-p
    #:action-status #:action-stamp #:action-done-p
@@ -208,14 +208,29 @@ dependencies.")))
 (defmethod initialize-instance :before ((obj operation) &key)
   (unless 
       (loop :for x :in '(downward-operation upward-operation sideway-operation
-                                            selfward-operation non-propagating-operation)
+                                            selfward-operation non-propagating-operation
+                                            ;; the following is a special case
+                                            build-op)
             :when (typep obj x)
             :return t
             :finally (return nil))
     (error "No dependency propagating scheme specified for operation ~a.~
 This is likely because the OPERATION subclass of this object has not been ~
 updated for ASDF 3." obj)))
-        
+
+(defmethod initialize-instance :before ((obj non-propagating-operation) &key)
+  (when
+      (loop :for x :in '(downward-operation upward-operation sideway-operation
+                                            selfward-operation)
+            :when (typep obj x)
+            :return t
+            :finally (return nil))
+    (error "Inconsistent class: ~a No class should have both NON-PROPAGATING-OPERATION and a propagating 
+operation class as superclasses." (class-name (class-of obj)))))
+
+;;;---------------------------------------------------------------------------
+;;; End of OPERATION class checking
+;;;---------------------------------------------------------------------------
 
 
 ;;;; Inputs, Outputs, and invisible dependencies
diff --git a/bundle.lisp b/bundle.lisp
index 8cb31bcccf648ed3968f814e29d5bdb09efd8f1c..fba0f5cf2efa2fcb1d0c64c4ea07962c4fb7b1b2 100644
--- a/bundle.lisp
+++ b/bundle.lisp
@@ -51,7 +51,7 @@
 
   (defclass no-ld-flags-op (operation) ())
 
-  (defclass lib-op (bundle-compile-op no-ld-flags-op)
+  (defclass lib-op (bundle-compile-op no-ld-flags-op non-propagating-operation)
     ((bundle-type :initform #+(or ecl mkcl) :lib #-(or ecl mkcl) :no-output-file))
     (:documentation #+(or ecl mkcl) "compile the system and produce linkable (.a) library for it."
      #-(or ecl mkcl) "just compile the system"))
@@ -78,10 +78,10 @@
     ((selfward-operation :initform '(monolithic-fasl-op monolithic-lib-op) :allocation :class))
     (:documentation "produce fasl and asd files for combined system and dependencies."))
 
-  (defclass monolithic-fasl-op (monolithic-bundle-compile-op basic-fasl-op) ()
+  (defclass monolithic-fasl-op (monolithic-bundle-compile-op basic-fasl-op non-propagating-operation) ()
     (:documentation "Create a single fasl for the system and its dependencies."))
 
-  (defclass monolithic-lib-op (monolithic-bundle-compile-op basic-compile-op  no-ld-flags-op)
+  (defclass monolithic-lib-op (monolithic-bundle-compile-op basic-compile-op non-propagating-operation no-ld-flags-op)
     ((bundle-type :initform #+(or ecl mkcl) :lib #-(or ecl mkcl) :no-output-file))
     (:documentation #+(or ecl mkcl) "Create a single linkable library for the system and its dependencies."
      #-(or ecl mkcl) "Compile a system and its dependencies."))
@@ -90,10 +90,13 @@
     ((bundle-type :initform :dll))
     (:documentation "Create a single dynamic (.so/.dll) library for the system and its dependencies."))
 
-  (defclass program-op #+(or mkcl ecl) (monolithic-bundle-compile-op)
+  ;; Fare reports that the PROGRAM-OP doesn't need any propagation on MKCL or
+  ;; ECL because the necessary dependency wrangling is done by other, earlier
+  ;; operations. [2014/01/20:rpg]
+  (defclass program-op #+(or mkcl ecl) (monolithic-bundle-compile-op non-propagating-operation)
             #-(or mkcl ecl) (monolithic-bundle-op selfward-operation)
     ((bundle-type :initform :program)
-     #-(or mkcl ecl) (selfward-operation :initform #-(or mkcl ecl) 'load-op))
+     #-(or mkcl ecl) (selfward-operation :initform 'load-op))
     (:documentation "create an executable file from the system and its dependencies"))
 
   (defun bundle-pathname-type (bundle-type)
diff --git a/concatenate-source.lisp b/concatenate-source.lisp
index 7be26fa7fe1304c02d3b3866dae498a681cca75e..36d089932df214c7ff3c16ddcc02f056aad98c68 100644
--- a/concatenate-source.lisp
+++ b/concatenate-source.lisp
@@ -36,7 +36,7 @@
   (defclass load-compiled-concatenated-source-op (basic-load-compiled-concatenated-source-op)
     ((selfward-operation :initform '(prepare-op compile-concatenated-source-op) :allocation :class)))
 
-  (defclass monolithic-concatenate-source-op (basic-concatenate-source-op monolithic-bundle-op) ())
+  (defclass monolithic-concatenate-source-op (basic-concatenate-source-op monolithic-bundle-op non-propagating-operation) ())
   (defclass monolithic-load-concatenated-source-op (basic-load-concatenated-source-op)
     ((selfward-operation :initform 'monolithic-concatenate-source-op :allocation :class)))
   (defclass monolithic-compile-concatenated-source-op (basic-compile-concatenated-source-op)