add rule 4(comment due to complexity)