For general implementation