Index: petsc/src/ksp/f90-mod/petsckspmod.F
===================================================================
--- petsc.orig/src/ksp/f90-mod/petsckspmod.F
+++ petsc/src/ksp/f90-mod/petsckspmod.F
@@ -1,89 +1,9 @@
 
-        module petscpcdefdummy
-        use petscdmdef
-        use petscmatdef
+        module petsckspdummy
 #include <../src/ksp/f90-mod/petscpc.h>
 #include <../src/ksp/f90-mod/petscksp.h>
         end module
 
-        module petscpcdef
-        use petscpcdefdummy
-        interface operator(.ne.)
-          function pcnotequal(A,B)
-            use petscpcdefdummy
-            logical pcnotequal
-            type(tPC), intent(in) :: A,B
-          end function
-        end interface operator (.ne.)
-        interface operator(.eq.)
-          function pcequals(A,B)
-            use petscpcdefdummy
-            logical pcequals
-            type(tPC), intent(in) :: A,B
-          end function
-        end interface operator (.eq.)
-        end module
-
-        function pcnotequal(A,B)
-          use petscpcdefdummy
-          logical pcnotequal
-          type(tPC), intent(in) :: A,B
-          pcnotequal = (A%v .ne. B%v)
-        end function
-
-        function pcequals(A,B)
-          use petscpcdefdummy
-          logical pcequals
-          type(tPC), intent(in) :: A,B
-          pcequals = (A%v .eq. B%v)
-        end function
-
-        module petsckspdefdummy
-        use petscpcdef
-        end module
-
-        module petsckspdef
-        use petsckspdefdummy
-        interface operator(.ne.)
-          function kspnotequal(A,B)
-            use petsckspdefdummy
-            logical kspnotequal
-            type(tKSP), intent(in) :: A,B
-          end function
-        end interface operator (.ne.)
-        interface operator(.eq.)
-          function kspequals(A,B)
-            use petsckspdefdummy
-            logical kspequals
-            type(tKSP), intent(in) :: A,B
-          end function
-        end interface operator (.eq.)
-        end module
-
-        function kspnotequal(A,B)
-          use petsckspdefdummy
-          logical kspnotequal
-          type(tKSP), intent(in) :: A,B
-          kspnotequal = (A%v .ne. B%v)
-        end function
-
-        function kspequals(A,B)
-          use petsckspdefdummy
-          logical kspequals
-          type(tKSP), intent(in) :: A,B
-          kspequals = (A%v .eq. B%v)
-        end function
-
-        module petscpc
-        use petsckspdef
-        use petscdm
-        use petscmat
-#include <../src/ksp/f90-mod/petscpc.h90>
-        interface
-#include <../src/ksp/f90-mod/ftn-auto-interfaces/petscpc.h90>
-        end interface
-        end module
-
         module petscksp
         use petsckspdef
         use petscpc
Index: petsc/gmakefile
===================================================================
--- petsc.orig/gmakefile
+++ petsc/gmakefile
@@ -184,7 +184,9 @@ $(OBJDIR)/mat/f90-mod/petscmatmod.o   :
 $(OBJDIR)/dm/f90-mod/petscdmmod.o     : $(OBJDIR)/mat/f90-mod/petscmatmod.o
 $(OBJDIR)/dm/f90-mod/petscdmdamod.o   : $(OBJDIR)/dm/f90-mod/petscdmmod.o
 $(OBJDIR)/dm/f90-mod/petscdmplexmod.o : $(OBJDIR)/dm/f90-mod/petscdmmod.o
-$(OBJDIR)/ksp/f90-mod/petsckspmod.o   : $(OBJDIR)/dm/f90-mod/petscdmplexmod.o
+$(OBJDIR)/ksp/f90-mod/petsckspdefmod.o : $(OBJDIR)/dm/f90-mod/petscdmplexmod.o
+$(OBJDIR)/ksp/f90-mod/petscpcmod.o    : $(OBJDIR)/ksp/f90-mod/petsckspdefmod.o
+$(OBJDIR)/ksp/f90-mod/petsckspmod.o   : $(OBJDIR)/ksp/f90-mod/petscpcmod.o
 $(OBJDIR)/snes/f90-mod/petscsnesmod.o : $(OBJDIR)/ksp/f90-mod/petsckspmod.o
 $(OBJDIR)/ts/f90-mod/petsctsmod.o     : $(OBJDIR)/snes/f90-mod/petscsnesmod.o
 $(OBJDIR)/tao/f90-mod/petsctaomod.o   : $(OBJDIR)/ts/f90-mod/petsctsmod.o
Index: petsc/src/ksp/f90-mod/makefile
===================================================================
--- petsc.orig/src/ksp/f90-mod/makefile
+++ petsc/src/ksp/f90-mod/makefile
@@ -13,7 +13,7 @@ SPECIALFASTLIB = yes
 CFLAGS	   =
 FFLAGS	   =
 SOURCEC	   =
-SOURCEF	   = petsckspmod.F
+SOURCEF	   = petsckspdefmod.F petscpcmod.F petsckspmod.F
 SOURCEH	   = petscksp.h petscksp.h90 petscpc.h petscpc.h90
 LIBBASE	   = libpetscksp
 MANSEC	   = KSP
Index: petsc/src/ksp/f90-mod/petsckspdefmod.F
===================================================================
--- /dev/null
+++ petsc/src/ksp/f90-mod/petsckspdefmod.F
@@ -0,0 +1,76 @@
+
+        module petscpcdefdummy
+        use petscdmdef
+        use petscmatdef
+#include <../src/ksp/f90-mod/petscpc.h>
+#include <../src/ksp/f90-mod/petscksp.h>
+        end module
+
+        module petscpcdef
+        use petscpcdefdummy
+        interface operator(.ne.)
+          function pcnotequal(A,B)
+            use petscpcdefdummy
+            logical pcnotequal
+            type(tPC), intent(in) :: A,B
+          end function
+        end interface operator (.ne.)
+        interface operator(.eq.)
+          function pcequals(A,B)
+            use petscpcdefdummy
+            logical pcequals
+            type(tPC), intent(in) :: A,B
+          end function
+        end interface operator (.eq.)
+        end module
+
+        function pcnotequal(A,B)
+          use petscpcdefdummy
+          logical pcnotequal
+          type(tPC), intent(in) :: A,B
+          pcnotequal = (A%v .ne. B%v)
+        end function
+
+        function pcequals(A,B)
+          use petscpcdefdummy
+          logical pcequals
+          type(tPC), intent(in) :: A,B
+          pcequals = (A%v .eq. B%v)
+        end function
+
+        module petsckspdefdummy
+        use petscpcdef
+        end module
+
+        module petsckspdef
+        use petsckspdefdummy
+        interface operator(.ne.)
+          function kspnotequal(A,B)
+            use petsckspdefdummy
+            logical kspnotequal
+            type(tKSP), intent(in) :: A,B
+          end function
+        end interface operator (.ne.)
+        interface operator(.eq.)
+          function kspequals(A,B)
+            use petsckspdefdummy
+            logical kspequals
+            type(tKSP), intent(in) :: A,B
+          end function
+        end interface operator (.eq.)
+        end module
+
+        function kspnotequal(A,B)
+          use petsckspdefdummy
+          logical kspnotequal
+          type(tKSP), intent(in) :: A,B
+          kspnotequal = (A%v .ne. B%v)
+        end function
+
+        function kspequals(A,B)
+          use petsckspdefdummy
+          logical kspequals
+          type(tKSP), intent(in) :: A,B
+          kspequals = (A%v .eq. B%v)
+        end function
+
Index: petsc/src/ksp/f90-mod/petscpcmod.F
===================================================================
--- /dev/null
+++ petsc/src/ksp/f90-mod/petscpcmod.F
@@ -0,0 +1,16 @@
+
+        module petscpcdummy
+#include <../src/ksp/f90-mod/petscpc.h>
+#include <../src/ksp/f90-mod/petscksp.h>
+        end module
+
+        module petscpc
+        use petsckspdef
+        use petscdm
+        use petscmat
+#include <../src/ksp/f90-mod/petscpc.h90>
+        interface
+#include <../src/ksp/f90-mod/ftn-auto-interfaces/petscpc.h90>
+        end interface
+        end module
+
