a more detailed documentation