This document describes why it is possible that two copies of the same program might be loaded into the program pools.
Why are there two copies of a program loaded?
For example, DCMT D PROG may show something like this at the end of the output:
Address Debug In Pool Copy
3F34AC00 NO YES TEMP
003AE000 NO YES TEMP
Release: All supported releases.
Note that one of the addresses is a 31-bit address (3F34AC00) and the other one is 24-bit (003AE000). The most common cause of this situation is that the program is being invoked under at least one task defined with LOCATION IS ANY and also at least one task defined with LOCATION IS BELOW. LOCATION IS BELOW is unusual and if there are tasks defined in that way, then you should investigate if that really should be the case.