background & implementation