add explanation and reference