diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index b75bca3bcd09416e247ca12ee98a9806cf756b67..cb9c8e5c83af74c46b5912a3e903265b1c960fa3 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -420,14 +420,32 @@ ServerConnector.getSbmlParameterUrl = function (queryParams, filterParams) {
   });
 };
 
+/**
+ *
+ * @param {Object} queryParams
+ * @param {string} [queryParams.version]
+ * @param {string} [queryParams.organism]
+ * @param {string} [queryParams.type]
+ * @param {string} [queryParams.genomeId]
+ * @param {Object} filterParams
+ *
+ * @returns {string}
+ */
 ServerConnector.getReferenceGenomeUrl = function (queryParams, filterParams) {
-  var version = this.getIdOrAsterisk(queryParams.version);
+  if (queryParams.genomeId !== undefined) {
+    return this.getApiUrl({
+      type: "genomics/" + queryParams.genomeId + "/",
+      params: filterParams
+    });
+  } else {
+    var version = this.getIdOrAsterisk(queryParams.version);
 
-  return this.getApiUrl({
-    type: "genomics/taxonomies/" + queryParams.organism + "/genomeTypes/" + queryParams.type + "/versions/" + version
-    + "/",
-    params: filterParams
-  });
+    return this.getApiUrl({
+      type: "genomics/taxonomies/" + queryParams.organism + "/genomeTypes/" + queryParams.type + "/versions/" + version
+      + "/",
+      params: filterParams
+    });
+  }
 };
 
 ServerConnector.loginUrl = function () {
@@ -1985,12 +2003,46 @@ ServerConnector.getPublications = function (params) {
   });
 };
 
+/**
+ *
+ * @param {Object} params
+ * @param {string} [params.version]
+ * @param {string} [params.organism]
+ * @param {string} [params.type]
+ * @param {string} [params.genomeId]
+ *
+ * @returns {Promise}
+ */
 ServerConnector.getReferenceGenome = function (params) {
   var self = this;
   var filterParams = {};
-  return self.sendGetRequest(self.getReferenceGenomeUrl(params, filterParams)).then(function (content) {
-    return new ReferenceGenome(JSON.parse(content));
-  });
+  if (params.genomeId !== undefined) {
+    return self.getReferenceGenomes().then(function (referenceGenomes) {
+      for (var i = 0; i < referenceGenomes.leftPanel; i++) {
+        var genome = referenceGenomes[i];
+        if (genome.getId() === params.genomeId()) {
+          return genome;
+        }
+      }
+      return null;
+    });
+  } else {
+    return self.sendGetRequest(self.getReferenceGenomeUrl(params, filterParams)).then(function (content) {
+      return new ReferenceGenome(JSON.parse(content));
+    });
+  }
+};
+
+/**
+ *
+ * @param {Object} params
+ * @param {string} params.genomeId
+ * @returns {Promise}
+ */
+ServerConnector.removeReferenceGenome = function (params) {
+  var self = this;
+  var filterParams = {};
+  return self.sendDeleteRequest(self.getReferenceGenomeUrl(params, filterParams));
 };
 
 ServerConnector.uploadFile = function (params) {
diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js
index 0ab83e41a584db1d9547d034a2ff23d553578a4d..a436197c2afc643d766b5fcb0159975209c58744 100644
--- a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js
+++ b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js
@@ -160,11 +160,11 @@ AddProjectDialog.prototype.showValidatorsDialog = function () {
 AddProjectDialog.prototype.createGeneralTabContent = function () {
   var self = this;
 
-  var result = new Functions.createElement({
+  var result = Functions.createElement({
     type: "div"
   });
 
-  var table = new Functions.createElement({
+  var table = Functions.createElement({
     type: "div",
     style: "display:table; width:100%"
   });
@@ -352,12 +352,12 @@ AddProjectDialog.prototype.createInputRow = function (params) {
   if (params.defaultValue === undefined) {
     params.defaultValue = "";
   }
-  var label = new Functions.createElement({
+  var label = Functions.createElement({
     type: "div",
     style: "display:table-cell; width:200px",
     content: xss(params.labelName)
   });
-  var input = new Functions.createElement({
+  var input = Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "<input name='" + xss(params.inputName) + "' value='" + xss(params.defaultValue) + "' style='width:100%'/>",
@@ -409,7 +409,7 @@ AddProjectDialog.prototype.createCheckboxRow = function (params) {
 };
 
 AddProjectDialog.prototype.createRow = function (elements) {
-  var result = new Functions.createElement({
+  var result = Functions.createElement({
     type: "div",
     style: "display:table-row"
   });
@@ -420,7 +420,7 @@ AddProjectDialog.prototype.createRow = function (elements) {
       if (columnNumber === 0) {
         style += "width:200px;";
       }
-      var labelContainer = new Functions.createElement({
+      var labelContainer = Functions.createElement({
         type: "div",
         style: style
       });
diff --git a/frontend-js/src/main/js/gui/admin/EditGenomeDialog.js b/frontend-js/src/main/js/gui/admin/EditGenomeDialog.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d9dfc25b58abefeb0bced9cf32959ffc11ab46c
--- /dev/null
+++ b/frontend-js/src/main/js/gui/admin/EditGenomeDialog.js
@@ -0,0 +1,287 @@
+"use strict";
+
+var Promise = require("bluebird");
+
+var AbstractGuiElement = require('../AbstractGuiElement');
+var GuiConnector = require('../../GuiConnector');
+
+var Functions = require('../../Functions');
+// noinspection JSUnusedLocalSymbols
+var logger = require('../../logger');
+
+var guiUtils = new (require('../leftPanel/GuiUtils'))();
+
+/**
+ *
+ * @param {Object} params
+ * @param {HTMLElement} params.element
+ * @param {CustomMap} params.customMap
+ * @param {Configuration} params.configuration
+ * @param {ReferenceGenome} params.referenceGenome
+ * @param {ServerConnector} [params.serverConnector]
+
+ * @constructor
+ *
+ * @extends AbstractGuiElement
+ */
+function EditGenomeDialog(params) {
+  AbstractGuiElement.call(this, params);
+  var self = this;
+  self.setReferenceGenome(params.referenceGenome);
+
+  $(self.getElement()).css({overflow: "hidden"});
+
+  self.createGui();
+  self.registerListenerType("onSave");
+}
+
+EditGenomeDialog.prototype = Object.create(AbstractGuiElement.prototype);
+EditGenomeDialog.prototype.constructor = EditGenomeDialog;
+
+/**
+ *
+ * @param {ReferenceGenome} referenceGenome
+ */
+EditGenomeDialog.prototype.setReferenceGenome = function (referenceGenome) {
+  this._referenceGenome = referenceGenome;
+};
+
+/**
+ *
+ * @returns {ReferenceGenome}
+ */
+EditGenomeDialog.prototype.getReferenceGenome = function () {
+  return this._referenceGenome;
+};
+
+/**
+ *
+ * @returns {boolean}
+ */
+EditGenomeDialog.prototype.isNew = function () {
+  return this.getReferenceGenome().getId() === undefined;
+};
+
+/**
+ *
+ */
+EditGenomeDialog.prototype.createGui = function () {
+  var self = this;
+  var element = self.getElement();
+
+  var tabDiv = Functions.createElement({
+    type: "div",
+    name: "tabView",
+    className: "tabbable boxed parentTabs",
+    style: "position:absolute;top:10px;bottom:40px;left:10px;right:10px"
+  });
+  element.appendChild(tabDiv);
+
+  var tabMenuDiv = Functions.createElement({
+    type: "ul",
+    className: "nav nav-tabs"
+  });
+  tabDiv.appendChild(tabMenuDiv);
+
+  var tabContentDiv = Functions.createElement({
+    type: "div",
+    className: "tab-content",
+    style: "height:100%"
+  });
+  tabDiv.appendChild(tabContentDiv);
+
+  self.createGeneralTab(tabMenuDiv, tabContentDiv);
+  $("a", tabMenuDiv).bind("click", function () {
+    //workaround for some css issues...
+    tabDiv.style.top = "40px";
+    tabDiv.style.bottom = "10px";
+  });
+};
+
+/**
+ *
+ * @param {HTMLElement} tabMenuDiv
+ * @param {HTMLElement} tabContentDiv
+ */
+EditGenomeDialog.prototype.createGeneralTab = function (tabMenuDiv, tabContentDiv) {
+  var self = this;
+  self.addTab({
+    tabMenuDiv: tabMenuDiv,
+    tabContentDiv: tabContentDiv,
+    name: "DETAILS",
+    content: self.createGeneralTabContent()
+  });
+
+};
+
+var id_counter = 0;
+
+/**
+ *
+ * @param {string} tab_name
+ * @returns {string}
+ */
+EditGenomeDialog.prototype.generateTabId = function (tab_name) {
+  var self = this;
+  var id = self.getReferenceGenome().getId();
+  if (id === undefined) {
+    id = "new_genome_" + (id_counter++);
+  }
+  return id + tab_name.replace(" ", "_") + "_TAB";
+};
+
+EditGenomeDialog.prototype.addTab = function (params) {
+  var id = this.generateTabId(params.name);
+
+  var navLi = guiUtils.createTabMenuObject({
+    id: id,
+    name: params.name,
+    navigationBar: params.tabMenuDiv
+  });
+  params.tabMenuDiv.appendChild(navLi);
+
+  var contentDiv = guiUtils.createTabContentObject({
+    id: id,
+    navigationObject: navLi,
+    navigationBar: params.tabMenuDiv
+  });
+
+  $(contentDiv).css("overflow", "auto");
+  if (params.content !== undefined) {
+    contentDiv.appendChild(params.content);
+  }
+
+  params.tabContentDiv.appendChild(contentDiv);
+};
+
+/**
+ *
+ * @returns {HTMLElement}
+ */
+EditGenomeDialog.prototype.createGeneralTabContent = function () {
+
+  var self = this;
+
+  var result = Functions.createElement({
+    type: "div",
+    style: "margin-top:10px;"
+  });
+
+  var table = Functions.createElement({
+    type: "table",
+    name: "detailsTable",
+    className: "display",
+    style: "width:100%"
+  });
+  result.appendChild(table);
+
+  var menuRow = Functions.createElement({
+    type: "div",
+    className: "minerva-menu-row",
+    style: "display:table-row; margin:10px"
+  });
+  result.appendChild(menuRow);
+
+  var saveUserButton = Functions.createElement({
+    type: "button",
+    name: "saveUser",
+    content: '<span class="ui-icon ui-icon-disk"></span>&nbsp;SAVE',
+    onclick: function () {
+      return self.onSaveClicked().then(function () {
+        return self.close();
+      }, GuiConnector.alert);
+    },
+    xss: false
+  });
+  var cancelButton = Functions.createElement({
+    type: "button",
+    name: "cancelProject",
+    content: '<span class="ui-icon ui-icon-cancel"></span>&nbsp;CANCEL',
+    onclick: function () {
+      return self.close();
+    },
+    xss: false
+  });
+  menuRow.appendChild(saveUserButton);
+  menuRow.appendChild(cancelButton);
+
+  return result;
+};
+
+/**
+ *
+ * @returns {Promise}
+ */
+EditGenomeDialog.prototype.init = function () {
+  var self = this;
+
+  var detailsTable = $("[name=detailsTable]", self.getElement())[0];
+
+  var dataTable = $(detailsTable).DataTable({
+    columns: [{
+      title: "Name"
+    }, {
+      title: "Value"
+    }],
+    paging: false,
+    ordering: false,
+    searching: false,
+    bInfo: false
+  });
+  var data = [];
+
+  var genome = self.getReferenceGenome();
+
+  data.push(['Type', '']);
+  data.push(['Organism', '']);
+  data.push(['Version', '']);
+  data.push(['Source url', '']);
+  data.push(['Local url', '']);
+  data.push(['Progress', '']);
+
+  dataTable.clear().rows.add(data).draw();
+
+  return Promise.resolve();
+};
+
+EditGenomeDialog.prototype.destroy = function () {
+  var self = this;
+  var div = self.getElement();
+
+  var detailsTable = $("[name=detailsTable]", div)[0];
+  if ($.fn.DataTable.isDataTable(detailsTable)) {
+    $(detailsTable).DataTable().destroy();
+  }
+
+
+  if ($(div).hasClass("ui-dialog-content")) {
+    $(div).dialog("destroy");
+  }
+};
+
+EditGenomeDialog.prototype.open = function () {
+  var self = this;
+  var div = self.getElement();
+  var title;
+  if (self.isNew()) {
+    title = "Download genome";
+  } else {
+    var genome = self.getReferenceGenome();
+    title = genome.getType() + " " + genome.getOrganism().getResource() + " " + genome.getVersion();
+  }
+  if (!$(div).hasClass("ui-dialog-content")) {
+    $(div).dialog({
+      title: title,
+      width: window.innerWidth / 2,
+      height: window.innerHeight / 2
+    });
+  }
+  $(div).dialog("open");
+};
+
+EditGenomeDialog.prototype.close = function () {
+  var self = this;
+  $(self.getElement()).dialog("close");
+};
+
+module.exports = EditGenomeDialog;
diff --git a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js
index dc3e4c6681148590e707f5f9075ed2aab1ce43b1..3d5cc604188aa6f5a0d98faca79f3c54b1890dda 100644
--- a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js
+++ b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js
@@ -138,22 +138,22 @@ EditProjectDialog.prototype.createGeneralTabContent = function () {
   var self = this;
   var project = self.getProject();
 
-  var result = new Functions.createElement({
+  var result = Functions.createElement({
     type: "div"
   });
 
-  var table = new Functions.createElement({
+  var table = Functions.createElement({
     type: "div",
     style: "display:table"
   });
   result.appendChild(table);
 
-  var projectIdRow = new Functions.createElement({
+  var projectIdRow = Functions.createElement({
     type: "div",
     style: "display:table-row"
   });
   table.appendChild(projectIdRow);
-  projectIdRow.appendChild(new Functions.createElement({
+  projectIdRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "ProjectId"
@@ -204,46 +204,46 @@ EditProjectDialog.prototype.createGeneralTabContent = function () {
     })
   }));
 
-  var nameRow = new Functions.createElement({
+  var nameRow = Functions.createElement({
     type: "div",
     style: "display:table-row"
   });
   table.appendChild(nameRow);
-  nameRow.appendChild(new Functions.createElement({
+  nameRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "Name"
   }));
-  nameRow.appendChild(new Functions.createElement({
+  nameRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "<input name='projectName' value='" + xss(project.getName()) + "'/>",
     xss: false
   }));
 
-  var versionRow = new Functions.createElement({
+  var versionRow = Functions.createElement({
     type: "div",
     style: "display:table-row"
   });
   table.appendChild(versionRow);
-  versionRow.appendChild(new Functions.createElement({
+  versionRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "Version"
   }));
-  versionRow.appendChild(new Functions.createElement({
+  versionRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "<input name='projectVersion' value='" + xss(project.getVersion()) + "'/>",
     xss: false
   }));
 
-  var diseaseRow = new Functions.createElement({
+  var diseaseRow = Functions.createElement({
     type: "div",
     style: "display:table-row"
   });
   table.appendChild(diseaseRow);
-  diseaseRow.appendChild(new Functions.createElement({
+  diseaseRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "Disease"
@@ -252,19 +252,19 @@ EditProjectDialog.prototype.createGeneralTabContent = function () {
   if (project.getDisease() !== undefined) {
     disease = xss(project.getDisease().getResource());
   }
-  diseaseRow.appendChild(new Functions.createElement({
+  diseaseRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "<input name='projectDisease' value='" + disease + "'/>",
     xss: false
   }));
 
-  var organismRow = new Functions.createElement({
+  var organismRow = Functions.createElement({
     type: "div",
     style: "display:table-row"
   });
   table.appendChild(organismRow);
-  organismRow.appendChild(new Functions.createElement({
+  organismRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "Organism"
@@ -273,19 +273,19 @@ EditProjectDialog.prototype.createGeneralTabContent = function () {
   if (project.getOrganism() !== undefined) {
     organism = xss(project.getOrganism().getResource());
   }
-  organismRow.appendChild(new Functions.createElement({
+  organismRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "<input name='projectOrganism' value='" + organism + "'/>",
     xss: false
   }));
 
-  var emailRow = new Functions.createElement({
+  var emailRow = Functions.createElement({
     type: "div",
     style: "display:table-row"
   });
   table.appendChild(emailRow);
-  emailRow.appendChild(new Functions.createElement({
+  emailRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "Notify email"
@@ -294,7 +294,7 @@ EditProjectDialog.prototype.createGeneralTabContent = function () {
   if (project.getNotifyEmail() !== undefined) {
     email = xss(project.getNotifyEmail());
   }
-  emailRow.appendChild(new Functions.createElement({
+  emailRow.appendChild(Functions.createElement({
     type: "div",
     style: "display:table-cell",
     content: "<input name='projectNotifyEmail' value='" + email + "'/>",
diff --git a/frontend-js/src/main/js/gui/admin/EditUserDialog.js b/frontend-js/src/main/js/gui/admin/EditUserDialog.js
index 6b631121bd8f81047778829264d5299aaed40cd0..3030c8cab407a8ce2f5c38275cba2f4acd858435 100644
--- a/frontend-js/src/main/js/gui/admin/EditUserDialog.js
+++ b/frontend-js/src/main/js/gui/admin/EditUserDialog.js
@@ -145,12 +145,12 @@ EditUserDialog.prototype.createGeneralTabContent = function () {
 
   var self = this;
 
-  var result = new Functions.createElement({
+  var result = Functions.createElement({
     type: "div",
     style: "margin-top:10px;"
   });
 
-  var table = new Functions.createElement({
+  var table = Functions.createElement({
     type: "table",
     name: "detailsTable",
     className: "display",
diff --git a/frontend-js/src/main/js/gui/admin/GenomeAdminPanel.js b/frontend-js/src/main/js/gui/admin/GenomeAdminPanel.js
index bfb7483b08cd9770fa15b9f6a773147577aa3203..133633f9daadb40963923e56cd1c906643d5c11a 100644
--- a/frontend-js/src/main/js/gui/admin/GenomeAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/GenomeAdminPanel.js
@@ -1,15 +1,18 @@
 "use strict";
 
-/* exported Promise*/
-
 var AbstractAdminPanel = require('./AbstractAdminPanel');
+var EditGenomeDialog = require('./EditGenomeDialog');
 
 var Functions = require('../../Functions');
+var GuiConnector = require('../../GuiConnector');
 var PrivilegeType = require('../../map/data/PrivilegeType');
+var ReferenceGenome = require('../../map/data/ReferenceGenome');
 
 // noinspection JSUnusedLocalSymbols
 var logger = require('../../logger');
 
+var Promise = require('bluebird');
+
 /**
  *
  * @param {Configuration} params.configuration
@@ -88,6 +91,24 @@ GenomeAdminPanel.prototype._createGui = function () {
     }
   });
 
+  $(genomesTable).on("click", "[name='removeGenome']", function () {
+    var button = this;
+    return self.askConfirmRemoval({
+      title: "INFO",
+      content: "Do you really want to remove this genome?",
+      input: false
+    }).then(function (param) {
+      if (param.status) {
+        return self.getServerConnector().removeReferenceGenome({genomeId: $(button).attr("data")});
+      }
+    }).catch(GuiConnector.alert);
+  });
+
+  $(genomesTable).on("click", "[name='editGenome']", function () {
+    var button = this;
+    return self.showEditDialog($(button).attr("data")).catch(GuiConnector.alert);
+  });
+
 };
 
 /**
@@ -163,7 +184,7 @@ GenomeAdminPanel.prototype.genomeToTableRow = function (genome, user) {
   if (user.hasPrivilege(self.getConfiguration().getPrivilegeType(PrivilegeType.MANAGE_GENOMES))) {
     disabled = "";
   }
-  row[5] = "<button name='showEditDialog' data='" + genome.getId() + "'" + disabled + "><i class='fa fa-edit' style='font-size:17px'></i></button>";
+  row[5] = "<button name='editGenome' data='" + genome.getId() + "'" + disabled + "><i class='fa fa-edit' style='font-size:17px'></i></button>";
   row[6] = "<button name='removeGenome' data='" + genome.getId() + "'" + disabled + "><i class='fa fa-trash-o' style='font-size:17px'></button>";
 
   return row;
@@ -180,7 +201,68 @@ GenomeAdminPanel.prototype.destroy = function () {
   if ($.fn.DataTable.isDataTable(table)) {
     $(table).DataTable().destroy();
   }
-  return AbstractAdminPanel.prototype.destroy.call(self);
+  var promises = [];
+  for (var key in self._dialogs) {
+    if (self._dialogs.hasOwnProperty(key)) {
+      promises.push(self._dialogs[key].destroy());
+    }
+  }
+  promises.push(AbstractAdminPanel.prototype.destroy.call(self));
+
+  return Promise.all(promises);
 };
 
+/**
+ *
+ * @param {ReferenceGenome} [genome]
+ * @returns {Promise}
+ */
+GenomeAdminPanel.prototype.getDialog = function (genome) {
+  var self = this;
+  if (self._dialogs === undefined) {
+    self._dialogs = [];
+  }
+  var id = genome.getId();
+  var dialog = self._dialogs[id];
+  if (dialog === undefined) {
+    dialog = new EditGenomeDialog({
+      element: Functions.createElement({
+        type: "div"
+      }),
+      configuration: self.getConfiguration(),
+      referenceGenome: genome,
+      customMap: null
+    });
+    self._dialogs[id] = dialog;
+    if (id === "null") {
+      dialog.addListener("onSave", function () {
+        return self.onRefreshClicked();
+      });
+    }
+    return dialog.init().then(function () {
+      return dialog;
+    });
+  } else {
+    return Promise.resolve(dialog);
+  }
+};
+
+GenomeAdminPanel.prototype.showEditDialog = function (id) {
+  var self = this;
+  GuiConnector.showProcessing();
+  return self.getServerConnector().getReferenceGenome({genomeId: id}).then(function (referenceGenome) {
+    if (referenceGenome === null) {
+      referenceGenome = new ReferenceGenome();
+    }
+    return self.getDialog(referenceGenome);
+  }).then(function (dialog) {
+    dialog.open();
+    GuiConnector.hideProcessing();
+  }).catch(function (error) {
+    GuiConnector.hideProcessing();
+    return Promise.reject(error);
+  });
+};
+
+
 module.exports = GenomeAdminPanel;
diff --git a/frontend-js/src/test/js/gui/admin/EditGenomeDialog-test.js b/frontend-js/src/test/js/gui/admin/EditGenomeDialog-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..40544872deb3d50c62aa656d88ce6e3b1d8ed7c0
--- /dev/null
+++ b/frontend-js/src/test/js/gui/admin/EditGenomeDialog-test.js
@@ -0,0 +1,38 @@
+"use strict";
+
+require("../../mocha-config");
+
+var EditGenomeDialog = require('../../../../main/js/gui/admin/EditGenomeDialog');
+var ReferenceGenome = require('../../../../main/js/map/data/ReferenceGenome');
+var ValidationError = require('../../../../main/js/ValidationError');
+var ServerConnector = require('../../ServerConnector-mock');
+
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+var expect = chai.expect;
+
+describe('EditGenomeDialog', function () {
+
+  describe('init', function () {
+    it('new genome', function () {
+      var dialog;
+      var project;
+      var genome = new ReferenceGenome();
+      return ServerConnector.getProject().then(function (result) {
+        project = result;
+        dialog = new EditGenomeDialog({
+          element: testDiv,
+          project: project,
+          referenceGenome: genome,
+          customMap: null
+        });
+        return dialog.init();
+      }).then(function () {
+        dialog.destroy();
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/gui/admin/GenomeAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/GenomeAdminPanel-test.js
index a1a4567a41efe66be04531e05f10c49a5464d76a..0c0b1b69591f990aee296392fcbd36166d4fd0a8 100644
--- a/frontend-js/src/test/js/gui/admin/GenomeAdminPanel-test.js
+++ b/frontend-js/src/test/js/gui/admin/GenomeAdminPanel-test.js
@@ -6,6 +6,7 @@ var GenomeAdminPanel = require('../../../../main/js/gui/admin/GenomeAdminPanel')
 var ConfigurationType = require('../../../../main/js/ConfigurationType');
 var ServerConnector = require('../../ServerConnector-mock');
 var logger = require('../../logger');
+var Promise = require('bluebird');
 
 var chai = require('chai');
 var assert = chai.assert;
@@ -28,4 +29,44 @@ describe('GenomeAdminPanel', function () {
       });
     });
   });
+  it('open edit dialog', function () {
+    helper.loginAsAdmin();
+    var mapTab;
+    return ServerConnector.getConfiguration().then(function (configuration) {
+      mapTab = new GenomeAdminPanel({
+        element: testDiv,
+        configuration: configuration,
+        serverConnector: ServerConnector
+      });
+      return mapTab.init();
+    }).then(function () {
+      assert.equal(0, logger.getWarnings().length);
+      var element = $("[name='editGenome']")[0];
+      return helper.triggerJqueryEvent(element, "click");
+    }).then(function () {
+      return mapTab.destroy();
+    });
+  });
+
+  it('remove genome', function () {
+    helper.loginAsAdmin();
+    var mapTab;
+    return ServerConnector.getConfiguration().then(function (configuration) {
+      mapTab = new GenomeAdminPanel({
+        element: testDiv,
+        configuration: configuration,
+        serverConnector: ServerConnector
+      });
+      return mapTab.init();
+    }).then(function () {
+      mapTab.askConfirmRemoval = function () {
+        return Promise.resolve({status: true});
+      };
+      assert.equal(0, logger.getWarnings().length);
+      var element = $("[name='removeGenome']")[0];
+      return helper.triggerJqueryEvent(element, "click");
+    }).then(function () {
+      return mapTab.destroy();
+    });
+  });
 });
diff --git a/frontend-js/testFiles/apiCalls/genomics/43/DELETE_token=ADMIN_TOKEN_ID& b/frontend-js/testFiles/apiCalls/genomics/43/DELETE_token=ADMIN_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..9e26dfeeb6e641a33dae4961196235bdb965b21b
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/genomics/43/DELETE_token=ADMIN_TOKEN_ID&
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeController.java b/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeController.java
index 51342dd986d13258b352f1d76087517dea660e20..b8c950515a2726d63ff106aed1b03ba30ac2833e 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeController.java
@@ -1,5 +1,6 @@
 package lcsb.mapviewer.api.genomics;
 
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -67,5 +68,13 @@ public class ReferenceGenomeController extends BaseController {
   ) throws SecurityException, QueryException, ObjectNotFoundException {
     return referenceGenomeController.getReferenceGenomes(token);
   }
+  
+  @RequestMapping(value = "/genomics/{genomeId}/", method = { RequestMethod.DELETE }, produces = { MediaType.APPLICATION_JSON_VALUE })
+  public Map<String, Object> removeGenome(//
+      @PathVariable(value = "genomeId") String genomeId, //
+      @CookieValue(value = Configuration.AUTH_TOKEN) String token //
+  ) throws SecurityException, IOException {
+    return referenceGenomeController.removeGenome(genomeId, token);
+  }
 
 }
\ No newline at end of file
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeRestImpl.java
index a47b01f80e3029e457ad8a9b4965d476e3a7b248..cedb3cc467f21ed1c7d78cbcdd53bc5f8d345c39 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeRestImpl.java
@@ -1,6 +1,7 @@
 package lcsb.mapviewer.api.genomics;
 
 import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -23,6 +24,8 @@ import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.map.layout.ReferenceGenome;
 import lcsb.mapviewer.model.map.layout.ReferenceGenomeGeneMapping;
 import lcsb.mapviewer.model.map.layout.ReferenceGenomeType;
+import lcsb.mapviewer.model.user.PrivilegeType;
+import lcsb.mapviewer.model.user.User;
 import lcsb.mapviewer.services.SecurityException;
 import lcsb.mapviewer.services.interfaces.IReferenceGenomeService;
 
@@ -178,4 +181,13 @@ public class ReferenceGenomeRestImpl extends BaseRestImpl {
     return result;
   }
 
+  public Map<String, Object> removeGenome(String genomeId, String token) throws SecurityException, IOException {
+    if (!getUserService().userHasPrivilege(token, PrivilegeType.MANAGE_GENOMES)) {
+      throw new SecurityException("Access denied");
+    }
+    ReferenceGenome genome = referenceGenomeService.getReferenceGenomeById(Integer.parseInt(genomeId), token);
+    referenceGenomeService.removeGenome(genome);
+    return okStatus();
+  }
+
 }
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ReferenceGenomeService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ReferenceGenomeService.java
index b3bc006549d1391246bc18d19aead5a5caeea55e..b7c1d54c7cf902a28928bacde42af146d56458ae 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ReferenceGenomeService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ReferenceGenomeService.java
@@ -143,4 +143,9 @@ public class ReferenceGenomeService implements IReferenceGenomeService {
     return null;
   }
 
+  @Override
+  public ReferenceGenome getReferenceGenomeById(int id, String authenticationToken) {
+    return referenceGenomeDao.getById(id);
+  }
+
 }
diff --git a/service/src/main/java/lcsb/mapviewer/services/interfaces/IReferenceGenomeService.java b/service/src/main/java/lcsb/mapviewer/services/interfaces/IReferenceGenomeService.java
index c87597d001d25c1ba154cbac89389ebdf9d9f7d1..71af2fae75eedd66a5a6b5648d7d85eb0b1f0d73 100644
--- a/service/src/main/java/lcsb/mapviewer/services/interfaces/IReferenceGenomeService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/interfaces/IReferenceGenomeService.java
@@ -142,4 +142,6 @@ public interface IReferenceGenomeService {
    */
   ReferenceGenome getReferenceGenomeViewByParams(MiriamData organism, ReferenceGenomeType genomeType, String version,
       String authenticationToken);
+
+  ReferenceGenome getReferenceGenomeById(int id, String authenticationToken);
 }