core implementation start