Many factors are responsible for the continued shift in industry prototyping preference from device fabrication to device simulation. One of the incentives for this transition is the generality and flexibility gained by avoiding a physical prototype. Unfortunately, much of the existing simulation software was written to solve a specific problem and therefore lacks flexibility. To combat this problem, we have developed an ensemble Monte-Carlo particle-based simulator for performing device simulations with a high degree of generality. Much of the generality comes simply from using a dedicated object-oriented coding philosophy in which implementation is separated from interface as much as possible. The use of 'smart' objects also increases the flexibility of this device simulator. Finally, the simulation software uses recursively encapsulated scattering tables, allowing a reduction in memory requirements and/or processing speed when simulating devices with complicated doping profiles.