This diagram created by jbogs