diff --git a/apps/canvas/back/index.js b/apps/canvas/back/index.js
index c5ffd89..425285c 100644
--- a/apps/canvas/back/index.js
+++ b/apps/canvas/back/index.js
@@ -98,7 +98,6 @@
         else {
             resp.status(200);
             resp.header("content-type", "application/json");
-            console.log(r);
             if (r.draft == null) {
                 if (r.state == null) {
                     resp.send({
@@ -108,11 +107,11 @@
                     });
                 }
                 else {
-                    resp.send(JSON.parse(r.state.toString()));
+                    resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
                 }
             }
             else {
-                resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
+                resp.send(JSON.parse(Buffer.from(r.draft).toString("utf8")));
             }
         }
     }
@@ -126,30 +125,70 @@
 });
 const handleDeploy = (req, resp) => __awaiter(void 0, void 0, void 0, function* () {
     try {
-        console.log(req.params);
+        const projectId = Number(req.params["projectId"]);
         const state = Buffer.from(JSON.stringify(req.body.state));
+        const p = yield db.project.findUnique({
+            where: {
+                id: projectId,
+            },
+            select: {
+                instanceId: true,
+            }
+        });
+        if (p === null) {
+            resp.status(404);
+            return;
+        }
         yield db.project.update({
             where: {
-                id: Number(req.params["projectId"]),
+                id: projectId,
             },
             data: {
                 draft: state,
             },
         });
-        const r = yield axios_1.default.post("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", { config: req.body.config });
-        if (r.status === 200) {
-            const d = r.data;
-            yield db.project.update({
-                where: {
-                    id: Number(req.params["projectId"]),
-                },
+        let r;
+        if (p.instanceId == null) {
+            r = yield axios_1.default.request({
+                url: "http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app",
+                method: "post",
                 data: {
-                    state,
-                    draft: null,
-                    instanceId: d.id,
-                    deployKey: d.deployKey,
-                },
+                    config: req.body.config,
+                }
             });
+            if (r.status === 200) {
+                yield db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                        instanceId: r.data.id,
+                        deployKey: r.data.deployKey,
+                    },
+                });
+            }
+        }
+        else {
+            r = yield axios_1.default.request({
+                url: `http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app/${p.instanceId}`,
+                method: "put",
+                data: {
+                    config: req.body.config,
+                }
+            });
+            if (r.status === 200) {
+                yield db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                    },
+                });
+            }
         }
     }
     catch (e) {
diff --git a/apps/canvas/back/index.ts b/apps/canvas/back/index.ts
index b103756..6193a90 100644
--- a/apps/canvas/back/index.ts
+++ b/apps/canvas/back/index.ts
@@ -82,19 +82,18 @@
         } else {
             resp.status(200);
             resp.header("content-type", "application/json");
-            console.log(r);
             if (r.draft == null) {
                 if (r.state == null) {
                     resp.send({
-                        nodes: [], 
+                        nodes: [],
                         edges: [],
-                        viewport: { x: 0, y: 0, zoom: 1},
-                    });    
+                        viewport: { x: 0, y: 0, zoom: 1 },
+                    });
                 } else {
-                    resp.send(JSON.parse(r.state.toString()));
+                    resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
                 }
             } else {
-                resp.send(JSON.parse(Buffer.from(r.state!).toString("utf8")));
+                resp.send(JSON.parse(Buffer.from(r.draft).toString("utf8")));
             }
         }
     } catch (e) {
@@ -107,30 +106,69 @@
 
 const handleDeploy: express.Handler = async (req, resp) => {
     try {
-        console.log(req.params);
+        const projectId = Number(req.params["projectId"]);
         const state = Buffer.from(JSON.stringify(req.body.state));
+        const p = await db.project.findUnique({
+            where: {
+                id: projectId,
+            },
+            select: {
+                instanceId: true,
+            }
+        });
+        if (p === null) {
+            resp.status(404);
+            return;
+        }
         await db.project.update({
             where: {
-                id: Number(req.params["projectId"]),
+                id: projectId,
             },
             data: {
                 draft: state,
             },
         });
-        const r = await axios.post("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", { config: req.body.config });
-        if (r.status === 200) {
-            const d = r.data as { id: string, deployKey: string };
-            await db.project.update({
-                where: {
-                    id: Number(req.params["projectId"]),
-                },
+        let r: { status: number, data: { id: string, deployKey: string } };
+        if (p.instanceId == null) {
+            r = await axios.request({
+                url: "http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app",
+                method: "post",
                 data: {
-                    state,
-                    draft: null,
-                    instanceId: d.id,
-                    deployKey: d.deployKey,
-                },
+                    config: req.body.config,
+                }
             });
+            if (r.status === 200) {
+                await db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                        instanceId: r.data.id,
+                        deployKey: r.data.deployKey,
+                    },
+                });
+            }
+        } else {
+            r = await axios.request({
+                url: `http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app/${p.instanceId}`,
+                method: "put",
+                data: {
+                    config: req.body.config,
+                }
+            });
+            if (r.status === 200) {
+                await db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                    },
+                });
+            }
         }
     } catch (e) {
         console.log(e);
diff --git a/apps/canvas/back/prisma/dodo.db b/apps/canvas/back/prisma/dodo.db
index 452bd48..3bd29ba 100644
--- a/apps/canvas/back/prisma/dodo.db
+++ b/apps/canvas/back/prisma/dodo.db
Binary files differ
