diff --git a/CHANGES.md b/CHANGES.md
index a138453cc..e8020a4ed 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -5,6 +5,7 @@
 ### :bug: Bugs fixed
 
 - Fix detach when top copy is dangling and nested copy is not [Taiga #9699](https://tree.taiga.io/project/penpot/issue/9699)
+- Fix problem in plugins with `replaceColor` method [#174](https://github.com/penpot/penpot-plugins/issues/174)
 
 ## 2.4.1
 
diff --git a/frontend/src/app/plugins/api.cljs b/frontend/src/app/plugins/api.cljs
index 7bc0fd1fc..8516ca3c6 100644
--- a/frontend/src/app/plugins/api.cljs
+++ b/frontend/src/app/plugins/api.cljs
@@ -166,8 +166,8 @@
 
     :replaceColor
     (fn  [shapes old-color new-color]
-      (let [old-color (parser/parse-color old-color)
-            new-color (parser/parse-color new-color)]
+      (let [old-color (parser/parse-color-data old-color)
+            new-color (parser/parse-color-data new-color)]
         (cond
           (or (not (array? shapes)) (not (every? shape/shape-proxy? shapes)))
           (u/display-not-valid :replaceColor-shapes shapes)
@@ -190,7 +190,9 @@
                 shapes-by-color
                 (->> (ctc/extract-all-colors shapes file-id shared-libs)
                      (group-by :attrs))]
-            (st/emit! (dwc/change-color-in-selected new-color (get shapes-by-color old-color) old-color))))))
+
+            (when-let [operations (get shapes-by-color old-color)]
+              (st/emit! (dwc/change-color-in-selected operations new-color old-color)))))))
 
     :getRoot
     (fn []
diff --git a/frontend/src/app/plugins/format.cljs b/frontend/src/app/plugins/format.cljs
index b39f422bc..829476da0 100644
--- a/frontend/src/app/plugins/format.cljs
+++ b/frontend/src/app/plugins/format.cljs
@@ -128,18 +128,19 @@
 ;;   image?: ImageData;
 ;; }
 (defn format-color
-  [{:keys [id name path color opacity ref-id ref-file gradient image] :as color-data}]
+  [{:keys [id file-id name path color opacity ref-id ref-file gradient image] :as color-data}]
   (when (some? color-data)
-    (obj/without-empty
-     #js {:id (format-id id)
-          :name name
-          :path path
-          :color color
-          :opacity opacity
-          :refId (format-id ref-id)
-          :refFile (format-id ref-file)
-          :gradient (format-gradient gradient)
-          :image (format-image image)})))
+    (let [id (or (format-id id) (format-id ref-id))
+          file-id (or (format-id file-id) (format-id ref-file))]
+      (obj/without-empty
+       #js {:id (or (format-id id) (format-id ref-id))
+            :fileId (or (format-id file-id) (format-id ref-file))
+            :name name
+            :path path
+            :color color
+            :opacity opacity
+            :gradient (format-gradient gradient)
+            :image (format-image image)}))))
 
 ;; Color & ColorShapeInfo
 (defn format-color-result
diff --git a/frontend/src/app/plugins/library.cljs b/frontend/src/app/plugins/library.cljs
index 31241a4bf..d1dc2096f 100644
--- a/frontend/src/app/plugins/library.cljs
+++ b/frontend/src/app/plugins/library.cljs
@@ -48,6 +48,7 @@
     :$file {:enumerable false :get (constantly file-id)}
 
     :id {:get (fn [] (dm/str id))}
+    :fileId {:get #(dm/str file-id)}
 
     :name
     {:this true
diff --git a/frontend/src/app/plugins/parser.cljs b/frontend/src/app/plugins/parser.cljs
index 4731528ab..8d884350d 100644
--- a/frontend/src/app/plugins/parser.cljs
+++ b/frontend/src/app/plugins/parser.cljs
@@ -111,28 +111,36 @@
 
 ;; export interface Color {
 ;;   id?: string;
+;;   fileId?: string;
+;;   refId?: string; // deprecated
+;;   refFile?: string; // deprecated
 ;;   name?: string;
 ;;   path?: string;
 ;;   color?: string;
 ;;   opacity?: number;
-;;   refId?: string;
-;;   refFile?: string;
 ;;   gradient?: Gradient;
 ;;   image?: ImageData;
 ;; }
+(defn parse-color-data
+  [^js color]
+  (when (some? color)
+    (let [id (or (obj/get color "id") (obj/get color "refId"))
+          file-id (or (obj/get color "fileId") (obj/get color "refFile"))]
+      (d/without-nils
+       {:id (parse-id id)
+        :file-id (parse-id file-id)
+        :color (-> (obj/get color "color") parse-hex)
+        :opacity (obj/get color "opacity")
+        :gradient (-> (obj/get color "gradient") parse-gradient)
+        :image (-> (obj/get color "image") parse-image-data)}))))
+
 (defn parse-color
   [^js color]
   (when (some? color)
     (d/without-nils
-     {:id (-> (obj/get color "id") parse-id)
-      :name (obj/get color "name")
-      :path (obj/get color "path")
-      :color (-> (obj/get color "color") parse-hex)
-      :opacity (obj/get color "opacity")
-      :ref-id (-> (obj/get color "refId") parse-id)
-      :ref-file (-> (obj/get color "refFile") parse-id)
-      :gradient (-> (obj/get color "gradient") parse-gradient)
-      :image (-> (obj/get color "image") parse-image-data)})))
+     (-> (parse-color-data color)
+         (assoc :name (obj/get color "name")
+                :path (obj/get color "path"))))))
 
 ;; export interface Shadow {
 ;;   id?: string;