uploaded implementations for #4, please test.