adding the initial implementation