add serial implementation