@Override
 public Object clone() {
   StorageInstruction clone = new StorageInstruction();
   for (String node : nodes) {
     clone.clearProperties(node);
     for (Iterator<Integer> ite = propertiesIterator(node); ite.hasNext(); )
       clone.addProperties(node, ite.next());
   }
   return clone;
 }
 @Override
 public boolean equals(Object obj) {
   if (obj instanceof StorageInstruction) {
     StorageInstruction psi = (StorageInstruction) obj;
     boolean out =
         (this.isProdStorageActivated() == psi.isProdStorageActivated()
             && this.getProdStorageFrequencyValue() == psi.getProdStorageFrequencyValue());
     if (out) {
       for (String node : nodes) {
         out = (out && getPropertiesCount(node) == psi.getPropertiesCount(node));
       }
     }
     if (out) {
       for (String node : nodes) {
         Integer[] a = toArrayProperties(node, null);
         for (int i = 0; i < a.length; i++) out = (out && psi.containsProperty(node, a[i]));
       }
     }
     return out;
   }
   return false;
 }