undirected done, need testing