separate functionality into independent structure