use property for last/first
use macro
revise sample