closed #3299 closed #3300 closed #3301
closed #3305 closed #3306 closed #3307
closed #3302 closed #3303 closed #3304