sorted out #39 and just realized, #37 might have to wait for a while thinking of universal solution