capsulate into functional objects