diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/MoveElementsCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/MoveElementsCommand.java
index 36777580da478ab196fb9570c05a7fef767a0cc5..db732b843dea35067f42c58c7af2b1b98688064c 100644
--- a/model-command/src/main/java/lcsb/mapviewer/commands/MoveElementsCommand.java
+++ b/model-command/src/main/java/lcsb/mapviewer/commands/MoveElementsCommand.java
@@ -21,6 +21,8 @@ import lcsb.mapviewer.model.map.reaction.Reactant;
 import lcsb.mapviewer.model.map.reaction.Reaction;
 import lcsb.mapviewer.model.map.reaction.ReactionNode;
 import lcsb.mapviewer.model.map.species.Element;
+import lcsb.mapviewer.model.map.species.field.ModificationResidue;
+import lcsb.mapviewer.model.map.species.field.SpeciesWithModificationResidue;
 
 /**
  * Command which moves elements in model by dx, dy coordinates.
@@ -115,7 +117,12 @@ public class MoveElementsCommand extends ModelCommand {
               .setNamePoint(((Compartment) alias).getNamePoint().getX() + dx,
                   ((Compartment) alias).getNamePoint().getY() + dy);
         }
-
+        if (alias instanceof SpeciesWithModificationResidue) {
+          for (ModificationResidue mr : ((SpeciesWithModificationResidue) alias).getModificationResidues()) {
+            Point2D position = mr.getPosition();
+            position.setLocation(position.getX() + dx, position.getY() + dy);
+          }
+        }
         includeInAffectedRegion(alias);
 
         aliases.add(alias);
@@ -124,25 +131,25 @@ public class MoveElementsCommand extends ModelCommand {
         for (Reactant node : reaction.getReactants()) {
           for (int i = 1; i < node.getLine().getPoints().size(); i++) {
             Point2D point = node.getLine().getPoints().get(i);
-            point.setLocation(point.getX() + dx, point.getY() + dy);
+            node.getLine().getPoints().set(i, new Point2D.Double(point.getX() + dx, point.getY() + dy));
           }
         }
         for (Product node : reaction.getProducts()) {
           for (int i = 0; i < node.getLine().getPoints().size() - 1; i++) {
             Point2D point = node.getLine().getPoints().get(i);
-            point.setLocation(point.getX() + dx, point.getY() + dy);
+            node.getLine().getPoints().set(i, new Point2D.Double(point.getX() + dx, point.getY() + dy));
           }
         }
         for (Modifier node : reaction.getModifiers()) {
           for (int i = 1; i < node.getLine().getPoints().size(); i++) {
             Point2D point = node.getLine().getPoints().get(i);
-            point.setLocation(point.getX() + dx, point.getY() + dy);
+            node.getLine().getPoints().set(i, new Point2D.Double(point.getX() + dx, point.getY() + dy));
           }
         }
         for (NodeOperator node : reaction.getOperators()) {
           for (int i = 0; i < node.getLine().getPoints().size(); i++) {
             Point2D point = node.getLine().getPoints().get(i);
-            point.setLocation(point.getX() + dx, point.getY() + dy);
+            node.getLine().getPoints().set(i, new Point2D.Double(point.getX() + dx, point.getY() + dy));
           }
         }
         includeInAffectedRegion(reaction);