more basic scanner impl