I think I've got there 
 
	 
 
	Each cond statement worked individually, but as soon as I had 2, one after the other I was back to the same problem.
 
	So had a coffee & small light bulb moment, keep them independant, and make passing the first test call the second test....
 
	 
 
	While in may not be compact it works:
 
(defun CHECK_SELECTIONS_FE ()
	(cond
		((/= fred3 NIL)
		(setq john fred3)
		(CHECK_SELECTIONS_F)
		)
		((/= ftg NIL)
		(setq john ftg)
		(CHECK_SELECTIONS_F)
		)
	)
) ;end CHECK_SELECTIONS_FE
;
(defun CHECK_SELECTIONS_F ()
  (cond 				;Cond statement
    ((/= fred4 NIL)
            (CHECK_SELECTIONS_FSC)
            (princ fred4)
    )
    (t (alert "OOPS! *new dialog* SELECT A FITTING SCHEDULE - TRY AGAIN!"))
  );end of cond
) ;end CHECK_SELECTIONS_F
;
(defun CHECK_SELECTIONS_FSC ()  
   (cond 				;Cond statement
    ((/= size NIL)
            (done_dialog)
            (princ size)
    )
    (t (alert "OOPS! *new dialog* SELECT A FITTING SIZE - TRY AGAIN!"))
  );end of cond 
) ;end CHECK_SELECTIONS_FSC
	 
 
	I can now tidy up a little, replace FRED and his clones 2, 3, 4 etc
 
	 
 
	Thanks for your help