add ghost writing function