reverted the last changes and split kernel into three separate ones