added shell implementation