As explained in the [restrictions for entity classes in the manual](http://www.doctrine-project.org/documentation/manual/2_0/en/architecture#entities), it is usually not allowed for an entity to implement `__wakeup` or `__clone`, because Doctrine makes special use of them. However, it is quite easy to make use of these methods in a safe way by guarding the custom wakeup or clone code with an entity identity check, as demonstrated in the following sections. ++ Safely implementing __wakeup To safely implement `__wakeup`, simply enclose your implementation code in an identity check as follows: [php] class MyEntity { private $id; // This is the identifier of the entity. //... public function __wakeup() { // If the entity has an identity, proceed as normal. if ($this->id) { // ... Your code here as normal ... } // otherwise do nothing, do NOT throw an exception! } //... } ++ Safely implementing __clone Safely implementing `__clone` is pretty much the same: [php] class MyEntity { private $id; // This is the identifier of the entity. //... public function __clone() { // If the entity has an identity, proceed as normal. if ($this->id) { // ... Your code here as normal ... } // otherwise do nothing, do NOT throw an exception! } //... } ++ Summary As you have seen, it is quite easy to safely make use of `__wakeup` and `__clone` in your entities without adding any really Doctrine-specific or Doctrine-dependant code. These implementations are possible and safe because when Doctrine invokes these methods, the entities never have an identity (yet). Furthermore, it is possibly a good idea to check for the identity in your code anyway, since it's rarely the case that you want to unserialize or clone an entity with no identity.