Keeping large software projects well documented is expensive and time consuming. Small code changes seldom propagate up to the design level. Therefore, design of large software becomes incoherent with the actual code. Yet understanding the original design intentions is crucial for supporting the life cycle of the software. Reverse Engineering (RE) is the process of constructing a model of a system at a level that is more abstract than the source level at which the system is specified. In software, this amounts primarily to recovering the system design from its existing code. Most existing RE tools are UML-based. The majority of them recover only static aspects of the design, displayed by class diagrams. Others use pattern detection techniques to recover some of the high-level behavior. In this work, we argue that modeling dynamic behavior of even moderately complex systems is hardly feasible with UML due to its lack of hierarchy. As an alternative, we propose RE that is based on Object Process Methodology (OPM), which provides a hierarchical view and a simple representation of design patterns.