diagnostic subroutine