a lot of modification & not efficient