* code for task #1971
 * finish task #1947.
 *finish task #1946.