diff --git a/src/components/Map/MapViewer/MapViewerVector/utils/shapes/elements/CompartmentPathway.ts b/src/components/Map/MapViewer/MapViewerVector/utils/shapes/elements/CompartmentPathway.ts
index 3de2f63c8bf7b1d290288c2d1476edf840722b14..c61f35609e9b4e1c9d64ce5e856d81bef35d75ef 100644
--- a/src/components/Map/MapViewer/MapViewerVector/utils/shapes/elements/CompartmentPathway.ts
+++ b/src/components/Map/MapViewer/MapViewerVector/utils/shapes/elements/CompartmentPathway.ts
@@ -2,7 +2,6 @@
 import { UsePointToProjectionResult } from '@/utils/map/usePointToProjection';
 import { MapInstance } from '@/types/map';
 import {
-  ColorObject,
   HorizontalAlign,
   VerticalAlign,
 } from '@/components/Map/MapViewer/MapViewerVector/MapViewerVector.types';
@@ -13,6 +12,7 @@ import {
 import Polygon from 'ol/geom/Polygon';
 import BaseMultiPolygon from '@/components/Map/MapViewer/MapViewerVector/utils/shapes/elements/BaseMultiPolygon';
 import getStyle from '@/components/Map/MapViewer/MapViewerVector/utils/shapes/style/getStyle';
+import { Color } from '@/types/models';
 
 export type CompartmentPathwayProps = {
   x: number;
@@ -20,9 +20,9 @@ export type CompartmentPathwayProps = {
   width: number;
   height: number;
   zIndex: number;
-  fillColor?: ColorObject;
-  borderColor?: ColorObject;
-  fontColor?: ColorObject;
+  fillColor?: Color;
+  borderColor?: Color;
+  fontColor?: Color;
   outerWidth?: number;
   text?: string;
   fontSize?: number;
diff --git a/src/components/Map/MapViewer/MapViewerVector/utils/shapes/layer/Layer.ts b/src/components/Map/MapViewer/MapViewerVector/utils/shapes/layer/Layer.ts
index 259bff25fcd3512e1d5cbaf83f9aafa0f3448867..5c6fd9389d412775a8431b9e60b507bc676c7750 100644
--- a/src/components/Map/MapViewer/MapViewerVector/utils/shapes/layer/Layer.ts
+++ b/src/components/Map/MapViewer/MapViewerVector/utils/shapes/layer/Layer.ts
@@ -210,6 +210,25 @@ export default class Layer {
           return [pointToProjection({ x: segment.x2, y: segment.y2 })];
         })
         .flat();
+
+      const firstSegment = line.segments[0];
+      const startArrowRotation = getRotation(
+        [firstSegment.x1, firstSegment.y1],
+        [firstSegment.x2, firstSegment.y2],
+      );
+      const shortenedX1 = firstSegment.x1 + line.startArrow.length * Math.cos(startArrowRotation);
+      const shortenedY1 = firstSegment.y1 - line.startArrow.length * Math.sin(startArrowRotation);
+      points[0] = pointToProjection({ x: shortenedX1, y: shortenedY1 });
+
+      const lastSegment = line.segments[line.segments.length - 1];
+      const endArrowRotation = getRotation(
+        [lastSegment.x1, lastSegment.y1],
+        [lastSegment.x2, lastSegment.y2],
+      );
+      const shortenedX2 = lastSegment.x2 - line.endArrow.length * Math.cos(endArrowRotation);
+      const shortenedY2 = lastSegment.y2 - line.endArrow.length * Math.sin(endArrowRotation);
+      points[points.length - 1] = pointToProjection({ x: shortenedX2, y: shortenedY2 });
+
       const lineString = new LineString(points);
 
       let lineDash;
@@ -229,25 +248,47 @@ export default class Layer {
       });
       lineFeature.setStyle(lineStyle);
       linesFeatures.push(lineFeature);
-      arrowsFeatures.push(...this.getLineArrowsFeatures(line, pointToProjection));
+
+      arrowsFeatures.push(
+        ...this.getLineArrowsFeatures({
+          line,
+          pointToProjection,
+          startArrowX: firstSegment.x1,
+          startArrowY: firstSegment.y1,
+          startArrowRotation,
+          endArrowX: shortenedX2,
+          endArrowY: shortenedY2,
+          endArrowRotation,
+        }),
+      );
     });
     return { linesFeatures, arrowsFeatures };
   };
 
-  private getLineArrowsFeatures = (
-    line: LayerLine,
-    pointToProjection: UsePointToProjectionResult,
-  ): Array<Feature<MultiPolygon>> => {
+  private getLineArrowsFeatures = ({
+    line,
+    pointToProjection,
+    startArrowX,
+    startArrowY,
+    startArrowRotation,
+    endArrowX,
+    endArrowY,
+    endArrowRotation,
+  }: {
+    line: LayerLine;
+    pointToProjection: UsePointToProjectionResult;
+    startArrowX: number;
+    startArrowY: number;
+    startArrowRotation: number;
+    endArrowX: number;
+    endArrowY: number;
+    endArrowRotation: number;
+  }): Array<Feature<MultiPolygon>> => {
     const arrowsFeatures: Array<Feature<MultiPolygon>> = [];
-    const firstSegment = line.segments[0];
-    const startArrowRotation = getRotation(
-      [firstSegment.x1, firstSegment.y1],
-      [firstSegment.x2, firstSegment.y2],
-    );
     const startArrowFeature = this.getLineArrowFeature(
       line.startArrow,
-      firstSegment.x1,
-      firstSegment.y1,
+      startArrowX,
+      startArrowY,
       line.z,
       startArrowRotation,
       line.width,
@@ -257,15 +298,10 @@ export default class Layer {
       arrowsFeatures.push(startArrowFeature);
     }
 
-    const lastSegment = line.segments[line.segments.length - 1];
-    const endArrowRotation = getRotation(
-      [lastSegment.x1, lastSegment.y1],
-      [lastSegment.x2, lastSegment.y2],
-    );
     const endArrowFeature = this.getLineArrowFeature(
       line.endArrow,
-      lastSegment.x2,
-      lastSegment.y2,
+      endArrowX,
+      endArrowY,
       line.z,
       endArrowRotation,
       line.width,