added core  implementation