more extensive documentation