I have pushed a set of changes to petsc-dev in 1) how the "AIJ" matrix type is handled (it is no longer a true type and when requested becomes simply a MPIAIJ or SEQAIJ; like BAIJ and SBAIJ have been done) 2) how the MatConvert() figures out how to convert between matrix types including eliminating the MatConvert registration process. Now all convert routines are found by querying the matrix 3) minor simplification of how Superlu, Spooles, etc matrix types are handled as subclasses of their parents. Note: generic conversion between any subclasses to any other is still broken (not broken but slow since it uses the MatConvert_Basic). I think unifying the subclassing process even more is possible. For example, it would be nice to have a common way of saving the "super" methods when the subclass is made, restoring them later and making sure the subclass data is properly destroyed when converting to the superclass or destroying the whole object. Oh well, maybe next year. If we have only one level of implementation inheritence (like we have now) this is pretty easy. Why did I do all this? So I can begin working on allowing setting the matrix type BEFORE setting the matrix sizes. This will allow simplifying a bunch of things. Note: none of the external matrix classes have been tested :-(! Barry