separating functionality