internal prototype