Added timeout parameter (optional)