with diagram