implement package generation