We present a major update to ElecSus, a computer program and underlying model to calculate the electric susceptibility of an alkali-metal atomic vapour. Knowledge of the electric susceptibility of a medium is essential to predict its absorptive and dispersive properties. In this version we implement several changes which significantly extend the range of applications of ElecSus, the most important of which is support for non-axial magnetic fields (i.e. fields which are not aligned with the light propagation axis). Supporting this change requires a much more general approach to light propagation in the system, which we have now implemented. We exemplify many of these new applications by comparing ElecSus to experimental data. In addition, we have developed a graphical user interface front-end which makes the program much more accessible, and have improved on several other minor areas of the program structure. Program summaryProgram Title: ElecSusProgram Files doi:http://dx.doi.org/10.17632/h7cj8bz4bd.1Licensing provisions: Apache License, Version 2.0Programming language: PythonExternal routines/libraries: SciPy library [1] 0.15.0 or later, NumPy [1], matplotlib [2], sympy [3], lmfit 0.9.5 or later [4], wxpython (required for GUI only)Nature of problem: Calculating the weak-probe electric susceptibility of an alkali-metal vapour. The electric susceptibility can be used to calculate spectra such as transmission and Stokes parameters. Measurements of experimental parameters can be made by fitting the theory to data.Solution method: The transition frequencies and wavelengths are calculated using a matrix representation of the Hamiltonian in the completely uncoupled basis. A suite of fitting methods are provided in order to allow user supplied experimental data to be fit to the theory, thereby allowing experimental parameters to be extracted.Restrictions: Results are only valid in the weak-probe regime.[1] T. E. Oliphant, Comput. Sci. Eng. 9, 10 (2007). http://www.scipy.org/[2] J. D. Hunter, Comput. Sci. Eng. 9, 10 (2007). http://matplotlib.org/[3] A. Meurer et. al, PeerJ Comp. Sci. 3, e103 (2017) http://www.sympy.org/[4] M. Newville et al., LMFIT: Non-Linear Least-Square Minimization and Curve-Fitting for Python, Zenodo (2014). DOI:10.5281/zenodo.11813 https://lmfit.github.io/lmfit-py/