modified using enhanced eigen method