implements #4