When can I access pawn in AIController

I am trying to access GetPawn from an AIController once the pawn has been spawned in the level. I tried accessing it first in BeginPlay and it would return null. Next I tried accessing it in EventPossessed and it is still null.

I dug around in the source code and found that the EventPossessed is fired just before the SetPawn function.

This is Controller.cpp Lines 301-302

		InPawn->PossessedBy(this);
		SetPawn(InPawn);

The first line eventually calls EventPossessed. So my question is when is it safe to access GetPawn for initialization purposes?

A dirty method would be to override SetPawn() or Possess(), but I don’t think this is clean code. Would also be interested in an answer (having the issue with PlayerController).