Implement #566 (closed)
please review carefully, i am not completely sure if i have done things right.