OOPar is a C++ library which implements an interface to MPI (or other communication library) to offer the user a high level interface for implementing parallel algorithms. Large scale software projects have been parallelized using OOPar and their results will be presented during this presentation. OOPar introduces two concepts to help the programmer in defining a parallel algorithm: Distributed data and tasks which act on the distributed data. Distributed data are objects of classes which can be transmitted between processors. The user of the OOPar library can define his own types by deriving class from the TPZSaveable class and implementing the virtual Read/Write methods. Distributed data objects are managed by an object of type OOPDataManager. Each processor has its OOPDataManager object which administers TPZSaveable objects and the access requests issued by the OOPTask objects. Task objects implement part of a parallel algorithm acting upon and transforming distributed data objects. Task objects are submitted to a TaskManager object. Each processor has a unique TaskManager object. In order to sequence tasks in the proper order, a version is associated with distributed data objects and tasks depend on a distributed data object with a certain version. After transforming a distributed data object, the task object increments the version of the data object.