Updated for slight repurposing and including more detail