diff --git a/frontend-js/src/main/js/Configuration.js b/frontend-js/src/main/js/Configuration.js
index 230456ab5f1732e68be0c03752656d422b2ce697..e0245933d5ef9d7a15113dcb1070b74bf3f32425 100644
--- a/frontend-js/src/main/js/Configuration.js
+++ b/frontend-js/src/main/js/Configuration.js
@@ -322,6 +322,25 @@ Configuration.prototype.getSimpleElementTypeNames = function () {
   return result;
 };
 
+/**
+ *
+ * @return {string[]}
+ */
+Configuration.prototype.getReactionTypeNames = function () {
+  var classesToBeExcluded = {};
+  var i;
+  for (i = 0; i < this._reactionTypes.length; i++) {
+    classesToBeExcluded[this._reactionTypes[i].parentClass] = true;
+  }
+  var result = [];
+  for (i = 0; i < this._reactionTypes.length; i++) {
+    if (classesToBeExcluded[this._reactionTypes[i].className] === undefined) {
+      result.push(this._reactionTypes[i].name);
+    }
+  }
+  return result;
+};
+
 /**
  *
  * @param {BioEntityType[]} reactionTypes
diff --git a/frontend-js/src/main/js/gui/Panel.js b/frontend-js/src/main/js/gui/Panel.js
index c4fd1786b69d25393106452b42302af2791ffe52..8f21f244472e35c939fc871f140d85d0d38628e6 100644
--- a/frontend-js/src/main/js/gui/Panel.js
+++ b/frontend-js/src/main/js/gui/Panel.js
@@ -335,7 +335,10 @@ Panel.prototype.onresize = function () {
   var self = this;
   var footerPosition = window.innerHeight;
 
-  footerPosition -= Math.max(0, $(".minerva-logo-footer, .minerva-footer-table").outerHeight());
+  var footer =$(".minerva-logo-footer, .minerva-footer-table")
+  if (footer.length > 0) {
+    footerPosition -= Math.max(0, footer.outerHeight());
+  }
 
   // compute the width (we can only compute it for visible elements)
   var size = 100000;
diff --git a/frontend-js/src/main/js/gui/export/AbstractExportPanel.js b/frontend-js/src/main/js/gui/export/AbstractExportPanel.js
index 39cfcd95e1b58550053eb1a6f30eb0b045a6e40d..345bac1d5238bf2bf4f6ff34e65fa8a943464f9c 100644
--- a/frontend-js/src/main/js/gui/export/AbstractExportPanel.js
+++ b/frontend-js/src/main/js/gui/export/AbstractExportPanel.js
@@ -135,17 +135,21 @@ AbstractExportPanel.prototype.createDualListbox = function (selectElement) {
 /**
  *
  * @param {BioEntityType[]} elementTypes
+ * @param {string} [panelName]
  * @returns {HTMLElement}
  * @protected
  */
-AbstractExportPanel.prototype._createSelectTypeDiv = function (elementTypes) {
+AbstractExportPanel.prototype._createSelectTypeDiv = function (elementTypes, panelName) {
+  if (panelName === undefined) {
+    panelName = " TYPE:";
+  }
   var typeDiv = Functions.createElement({
     type: "div",
     name: "typeSelectDiv"
   });
   typeDiv.appendChild(Functions.createElement({
     type: "h4",
-    content: " TYPE:"
+    content: panelName
   }));
   var choicesContainer = Functions.createElement({
     type: "ul",
@@ -181,12 +185,16 @@ AbstractExportPanel.prototype._createSelectTypeDiv = function (elementTypes) {
 
 /**
  *
+ * @param {HTMLElement} [htmlElement]
  * @returns {Promise<BioEntityType[]>}
  */
-AbstractExportPanel.prototype.getSelectedTypes = function () {
+AbstractExportPanel.prototype.getSelectedTypes = function (htmlElement) {
   var self = this;
+  if (htmlElement === undefined) {
+    htmlElement = self.getElement();
+  }
 
-  var div = $("div[name='typeSelectDiv']", $(self.getElement()))[0];
+  var div = $("div[name='typeSelectDiv']", $(htmlElement))[0];
   var result = [];
   var selectedAll = false;
   $(":checked", $(div)).each(function (index, element) {
@@ -196,8 +204,11 @@ AbstractExportPanel.prototype.getSelectedTypes = function () {
     result.push(element.value);
   });
   if (selectedAll) {
-    return ServerConnector.getConfiguration().then(function (configuration) {
-      return configuration.getSimpleElementTypeNames();
+    result = [];
+    $("input[type='checkbox']", $(div)).each(function (index, element) {
+      if (element.value !== "ALL") {
+        result.push(element.value);
+      }
     });
   }
 
diff --git a/frontend-js/src/main/js/gui/export/NetworkExportPanel.js b/frontend-js/src/main/js/gui/export/NetworkExportPanel.js
index b681dad5c99cbbb7fc169da644b903b9755938e6..cc5941f29795fe8e83edca8eeb1b1e534ecc4edf 100644
--- a/frontend-js/src/main/js/gui/export/NetworkExportPanel.js
+++ b/frontend-js/src/main/js/gui/export/NetworkExportPanel.js
@@ -7,6 +7,7 @@ var AbstractExportPanel = require('./AbstractExportPanel');
 var Promise = require("bluebird");
 // noinspection JSUnusedLocalSymbols
 var logger = require('../../logger');
+var Functions = require('../../Functions');
 var GuiMessageError = require('../GuiMessageError');
 var Alias = require('../../map/data/Alias');
 
@@ -39,8 +40,12 @@ NetworkExportPanel.prototype.init = function () {
   var self = this;
   var element = self.getElement();
   var configuration = self.getConfiguration();
-  var typeDiv = self._createSelectTypeDiv(configuration.getElementTypes());
-  element.appendChild(typeDiv);
+  var elementTypeDiv = Functions.createElement({type: "div", name: "elementTypes"});
+  elementTypeDiv.appendChild(self._createSelectTypeDiv(configuration.getElementTypes(), "Element type"));
+  element.appendChild(elementTypeDiv);
+  var reactionTypeDiv = Functions.createElement({type: "div", name: "reactionTypes"});
+  reactionTypeDiv.appendChild(self._createSelectTypeDiv(configuration.getReactionTypes(), "Reaction type"));
+  element.appendChild(reactionTypeDiv);
   element.appendChild(self._createSelectColumnDiv(self.getAllColumns()));
   return self.getServerConnector().getProjectStatistics(self.getProject().getProjectId()).then(function (statistics) {
     return self._createMiriamTypeDiv(statistics.getReactionAnnotations());
@@ -118,6 +123,10 @@ NetworkExportPanel.prototype.getAllColumns = function () {
     "columnName": "subsystem",
     "method": "getSubsystem",
     "name": "Subsystem"
+  }, {
+    "columnName": "type",
+    "method": "getType",
+    "name": "Reaction type"
   }]);
 };
 
@@ -125,9 +134,13 @@ NetworkExportPanel.prototype.getAllColumns = function () {
  *
  * @param {Reaction} reaction
  * @param {Object<string,boolean>} elementIds
+ * @param {string[]} reactionTypes
  * @returns {boolean}
  */
-function matchReaction(reaction, elementIds) {
+function matchReaction(reaction, elementIds, reactionTypes) {
+  if ($.inArray(reaction.getType(), reactionTypes) === -1) {
+    return false;
+  }
   var count = 0;
   reaction.getElements().forEach(function (element) {
     if (elementIds[element.getId()]) {
@@ -143,18 +156,26 @@ function matchReaction(reaction, elementIds) {
  */
 NetworkExportPanel.prototype.createResponseString = function () {
   var self = this;
-  var types, miriamTypes;
+  var elementTypes, reactionTypes, miriamTypes;
   var includedCompartmentIds = [];
   var excludedCompartmentIds = [];
   var models = self.getProject().getModels();
 
   var elementIds = [];
   var reactions = [];
-  return self.getSelectedTypes().then(function (result) {
+  var elementTypesDiv = $("[name='elementTypes']", self.getElement())[0];
+  var reactionTypesDiv = $("[name='reactionTypes']", self.getElement())[0];
+  return self.getSelectedTypes(elementTypesDiv).then(function (result) {
+    if (result.length === 0) {
+      return Promise.reject(new GuiMessageError("You must select at least one element type"));
+    }
+    elementTypes = result;
+    return self.getSelectedTypes(reactionTypesDiv);
+  }).then(function (result) {
     if (result.length === 0) {
-      return Promise.reject(new GuiMessageError("You must select at least one type"));
+      return Promise.reject(new GuiMessageError("You must select at least one reaction type"));
     }
-    types = result;
+    reactionTypes = result;
     return self.getSelectedIncludedCompartments();
   }).then(function (result) {
     result.forEach(function (compartment) {
@@ -169,7 +190,7 @@ NetworkExportPanel.prototype.createResponseString = function () {
     var promises = [];
     for (var i = 0; i < models.length; i++) {
       promises.push(models[i].getAliases({
-        type: types,
+        type: elementTypes,
         complete: true,
         includedCompartmentIds: includedCompartmentIds,
         excludedCompartmentIds: excludedCompartmentIds
@@ -189,7 +210,7 @@ NetworkExportPanel.prototype.createResponseString = function () {
     for (var i = 0; i < models.length; i++) {
       for (var j = 0; j < reactionsByModel[i].length; j++) {
         var reaction = reactionsByModel[i][j];
-        if (matchReaction(reaction, elementIds)) {
+        if (matchReaction(reaction, elementIds, reactionTypes)) {
           reactions.push(reaction);
         }
       }
diff --git a/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js b/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js
index be02659da4ce6fae6acc7a9f322adfc661a1f46c..65a91982efe8e56d9ee6a180ed2f6908c7b190f6 100644
--- a/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js
+++ b/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js
@@ -42,9 +42,13 @@ describe('ElementExportPanel', function () {
     it('select all', function () {
       var exportObject;
       var project;
-      var elementTypes;
 
-      elementTypes = helper.getConfiguration().getSimpleElementTypeNames();
+      function onlyUnique(value, index, self) {
+        return self.indexOf(value) === index;
+      }
+
+      var elementTypes = helper.getConfiguration().getSimpleElementTypeNames().filter(onlyUnique);
+
       return ServerConnector.getProject().then(function (result) {
         project = result;
         exportObject = createExportPanel(project);