I'm not sure about #1. I suspect we may need to see more of your code to figure out why a ReferenzHolder is being created. I think I was having a similar problem to your #2, though, with code that looked pretty similar. Here's what fixed it for me:
// change this:
// to this:
Because I was running my code on the frontend side, which was currently in Live mode, the write() call was saving to the live table and then the publish from stage to live was actually overwriting it. This way, it correctly saves to the Stage table, then publishes from Stage to Live.