Change names of generic variables and rearranged order of generic constructor parameters to make the interpretation of the parameters a little bit clearer.
Further simplified the generic definitions.