re-write of GraphFrame