added generic simulator class