Since version 4.1 of CICS it is no longer nessecary to define programs to CICS. You have to set up your CICS environment to accept this feature. This is typically done by the CICS systems progammer. There is a side effect to this feature. Programs are loaded from DFHRPL in a slightly different manner than previously.
When CICS executes a LINK, LOAD or XCTL and the requested module isn't found in DFHRPL, you will receive a PGMIDERR as before, but the PPT entry (the program definition) gets a status of Req for Required. When a LOAD-module is missing in DFHRPL, you copy the module in question to one of the datasets in the DFHRPL concatenation. And then you run your transaction again. Now you will receive another PGMIDERR. This is not what happened in earlier CICS versions where the program would be loaded without problems. The difference is the Req status which prevents the program from being loaded.
To get rid of the annoying Req status you have to perform a newcopy. Now you don't get PGMIDERR any more. This change in the behaviour of loading CICS programs seems to be rather stupid, but a side effect is that you can identify all programs that CICS misses in DFHRPL by issuing a CEMT I PROG(*) REQ. This is a nice feature, because sometimes a CICS-program doesn't fail when it receives a PGMIDERR.