split functional core in three