updated with some extra fixed