internal version