diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6fb68fdc81cf6f6a86971be70c321eaea3750f1f..a50eb436599300354f5b26ec853f3940a313ac0a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
   * `BUILD_FOOTER_SOURCES_HREF`
   * `BUILD_FOOTER_LICENCE_HREF`
   See `build.properties.d/00_default.properties` for more information
+* Start editing an entity/creating a new record directly by adding an `#edit` or
+  `#new_record` URI fragment, respectively.
 
 ### Changed (for changes in existing functionality)
 
diff --git a/src/core/js/edit_mode.js b/src/core/js/edit_mode.js
index 85645aabaf7d05cb7abe928b4792b5de6ef9e352..d1b922c413e13072a3d2a9cb5079aa1dda27a110 100644
--- a/src/core/js/edit_mode.js
+++ b/src/core/js/edit_mode.js
@@ -76,11 +76,52 @@ var edit_mode = new function () {
         }
     }
 
+    this.has_edit_fragment = function () {
+        const fragment = window.location.hash.substr(1);
+        return fragment === "edit";
+    }
+
+    this.has_new_record_fragment = function () {
+        const fragment = window.location.hash.substr(1);
+        return fragment === "new_record";
+    }
+
     this._init = function () {
         var target = $("#top-navbar").find("ul").first();
         this.add_edit_mode_button(target, edit_mode.toggle_edit_mode);
+
+        var after_setup_callback = () => {} // do nothing
+        if (this.has_edit_fragment()) {
+            // find first entity
+            const first_entity = $(".caosdb-entity-panel")[0];
+            if (first_entity) {
+                window.localStorage["edit_mode"] = true;
+                after_setup_callback = () => {
+                    logger.debug("Edit this entity after #edit in the uri", first_entity);
+                    edit_mode.edit(first_entity);
+                }
+            }
+        } else if (this.has_new_record_fragment()) {
+            for (let entity of $(".caosdb-entity-panel")) {
+                // find first record type
+                if (getEntityRole(entity) === "RecordType") {
+                    window.localStorage["edit_mode"] = true;
+                    const new_record = edit_mode.create_new_record(getEntityID(entity));
+                    after_setup_callback = () => {
+                        logger.debug("Create a new record after #new_record in the uri", entity);
+                        new_record.then((new_record) => {
+                            edit_mode.app.newEntity(new_record);
+                        }, edit_mode.handle_error);
+                    }
+                    break;
+                }
+            }
+        }
+
+        // intialize the edit mode panel and add all necessary buttons if the edit mode is 
         if (this.is_edit_mode()) {
-            edit_mode.enter_edit_mode();
+
+            edit_mode.enter_edit_mode().then(after_setup_callback);
             edit_mode.toggle_edit_panel();
             // This is for the very specific case of reloading the
             // page while the edit mode is active on small screens
@@ -88,6 +129,9 @@ var edit_mode = new function () {
             $(".caosdb-edit-min-width-warning").addClass("d-block");
         }
         $('.caosdb-f-edit').css("transition", "top 1s");
+
+        // add drag-n-drop listener (needed for the edit_mode toolbox).
+        edit_mode.init_dragable();
     }
 
 
@@ -444,9 +488,6 @@ var edit_mode = new function () {
             file_path = getEntityPath(entity_form);
             file_checksum = getEntityChecksum(entity_form);
             file_size = getEntitySize(entity_form);
-            console.log(file_path);
-            console.log(file_checksum);
-            console.log(file_size);
         }
         return createEntityXML(
             entityRole,
@@ -580,7 +621,6 @@ var edit_mode = new function () {
             $(".caosdb-f-btn-toggle-edit-mode").text("Leave Edit Mode");
 
             edit_mode.init_tool_box();
-            edit_mode.init_dragable();
 
             var nextEditApp = editApp;
             if (typeof nextEditApp == "undefined") {
@@ -639,6 +679,7 @@ var edit_mode = new function () {
      * the model given by model.
      */
     this.init_tool_box = async function () {
+
         // remove previously added model
         $(".caosdb-f-edit-mode-existing").remove()
 
@@ -649,6 +690,12 @@ var edit_mode = new function () {
 
         removeAllWaitingNotifications(editPanel[0]);
         editPanel.children()[0].appendChild(model);
+
+        if (edit_mode.app && edit_mode.app.entity && edit_mode.app.entity.parentElement && (edit_mode.app.state === "changed")) {
+            // an entity is being editted
+            $(".caosdb-f-edit-mode-existing").toggleClass("d-none", false);
+            $(".caosdb-f-edit-mode-create-buttons").toggleClass("d-none", true);
+        }
     }
 
 
@@ -1485,6 +1532,7 @@ var edit_mode = new function () {
             init_drag_n_drop();
         }
         app.onEnterInitial = async function (e) {
+
             $(".caosdb-f-edit-mode-existing").toggleClass("d-none", true);
             $(".caosdb-f-edit-mode-create-buttons").toggleClass("d-none", false);
             app.old = undefined;
@@ -1559,6 +1607,7 @@ var edit_mode = new function () {
             }, edit_mode.handle_error);
         };
         app.onEnterChanged = function (e) {
+
             // show existing entities in toolbox
             $(".caosdb-f-edit-mode-existing").toggleClass("d-none", false);
             $(".caosdb-f-edit-mode-create-buttons").toggleClass("d-none", true);