added transitive closure