first part of Implementation