Lack of up-to-date software documentation hinders the software evolution and maintenance processes, as simply the outdated software structure and code could be easily misunderstood. One approach to overcoming such problems is using software modularization, in which the software architecture is extracted from the available source code; such that developers can assess the reconstructed architecture against the required changes. Unfortunately, existing software modularization approaches are not accurate, as they ignore polymorphic calls among system modules. Furthermore, they are tightly coupled to the used programming language. To overcome such problems, this paper proposes the E-CDGM approach. E-CDGM decouples the extracted call dependency graph from the programming language by using the proposed intermediate code language (known as mCode). It also takes into consideration the polymorphic calls during the call dependency graph generation. It uses a new evolutionary optimization approach to find the best modularization option; adopting reward and penalty functions. Finally, it uses statistical analysis to build a final consolidated modularization model using different generated modularization solutions. Experimental results show that the proposed E-CDGM approach provides more accurate results when compared against existing well-known modularization approaches.