refactored to add fiel and prepare()