add more detailed documentation