1) Strongly recommend error returns for all functions; at first it may seem unnatural but we've found that having a SINGLE consisten way to return error codes is important 2) Recommend removing the comm object, there is no need for it since one can simply use the MPI_Comm 3) Recommend using a MPI stub library to handle portability when no MPI is present, we use this with PETSc and it works well. 4) all routines that set values in objects have the name set, all that get values have the name get 5) Not concerned yet with caps or smalls in member function names, can be added later 6) It is important that we full document exactly which functions are "collective", i.e. all processors that share the communicator must call and which are not. Constructors and destructors are always collective. 7) Not sure why I see the need for Solver class and then IterativeSolver subclass, urge merging them into one. 8) Not sure I understand the use of LinearEquationSystem() since the solvers take the individual matrix, and vectors as arguments anyways. Suggest toss. 9) Don't really understand row and col matrix classes, suggest move some of that stuff into the matrix class.