added separate classes for using different rules