completed kernel, haven't tested yet