f# tested ok