Friendly URL is missing for vulnerability detail view page
Please consider the configuration for URL mapper:
- vulnerability detail view page

Currently if I open a vulnerability the URL looks like:
`https://localhost:8443/group/guest/vulnerabilities?p_p_id=vulnerabilities_WAR_sw360portlet&p_p_lifecycle=0&p_p_col_id=column-1&p_p_col_count=1&_vulnerabilities_WAR_sw360portlet_pagename=detail&_vulnerabilities_WAR_sw360portlet_vulnerabilityId=45101`
diff --git a/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/licenses/LicensesPortlet.java b/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/licenses/LicensesPortlet.java
index 6624c320..dff6c8f4 100644
--- a/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/licenses/LicensesPortlet.java
+++ b/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/licenses/LicensesPortlet.java
@@ -1,5 +1,5 @@
 /*
- * Copyright Siemens AG, 2013-2017. Part of the SW360 Portal Project.
+ * Copyright Siemens AG, 2013-2017, 2019. Part of the SW360 Portal Project.
  * With contributions by Bosch Software Innovations GmbH, 2016.
  *
  * SPDX-License-Identifier: EPL-1.0
@@ -15,9 +15,8 @@ import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
 import com.liferay.portal.kernel.portlet.PortletResponseUtil;
 import com.liferay.portal.kernel.servlet.SessionMessages;
-import org.apache.commons.lang.enums.EnumUtils;
+
 import org.eclipse.sw360.datahandler.common.CommonUtils;
-import org.eclipse.sw360.datahandler.common.ThriftEnumUtils;
 import org.eclipse.sw360.datahandler.permissions.PermissionUtils;
 import org.eclipse.sw360.datahandler.thrift.RequestStatus;
 import org.eclipse.sw360.datahandler.thrift.SW360Exception;
@@ -31,11 +30,13 @@ import org.eclipse.sw360.portal.common.PortalConstants;
 import org.eclipse.sw360.portal.common.UsedAsLiferayAction;
 import org.eclipse.sw360.portal.portlets.Sw360Portlet;
 import org.eclipse.sw360.portal.users.UserCacheHolder;
+
 import org.apache.log4j.Logger;
 import org.apache.thrift.TException;
 
 import javax.portlet.*;
 import javax.servlet.http.HttpServletResponse;
+
 import java.io.IOException;
 import java.util.*;
 import java.util.function.Function;
@@ -234,7 +235,7 @@ public class LicensesPortlet extends Sw360Portlet {
         } else {
             response.setRenderParameter(LICENSE_ID, licenseId);
             response.setRenderParameter(PAGENAME, PAGENAME_DETAIL);
-            response.setRenderParameter(SELECTED_TAB, "Details");
+            request.setAttribute(SELECTED_TAB, "tab-Details");
             setSessionMessage(request, requestStatus, "License", "update");
         }
     }
@@ -354,7 +355,7 @@ public class LicensesPortlet extends Sw360Portlet {
 
         response.setRenderParameter(LICENSE_ID, licenseId);
         response.setRenderParameter(PAGENAME, PAGENAME_DETAIL);
-        response.setRenderParameter(SELECTED_TAB, "Todos");
+        request.setAttribute(SELECTED_TAB, "tab-TodosAndObligations");
     }
 
     @UsedAsLiferayAction
@@ -378,7 +379,7 @@ public class LicensesPortlet extends Sw360Portlet {
         }
         response.setRenderParameter(LICENSE_ID, licenseId);
         response.setRenderParameter(PAGENAME, PAGENAME_DETAIL);
-        response.setRenderParameter(SELECTED_TAB, "LicenseText");
+        request.setAttribute(SELECTED_TAB, "tab-LicenseText");
     }
 
     @UsedAsLiferayAction
@@ -430,7 +431,7 @@ public class LicensesPortlet extends Sw360Portlet {
         }
         response.setRenderParameter(LICENSE_ID, licenseID);
         response.setRenderParameter(PAGENAME, PAGENAME_DETAIL);
-        response.setRenderParameter(SELECTED_TAB, "Todos");
+        request.setAttribute(SELECTED_TAB, "tab-TodosAndObligations");
     }
 
     @UsedAsLiferayAction
@@ -474,6 +475,6 @@ public class LicensesPortlet extends Sw360Portlet {
         }
         response.setRenderParameter(LICENSE_ID, licenseId);
         response.setRenderParameter(PAGENAME, PAGENAME_DETAIL);
-        response.setRenderParameter(SELECTED_TAB, "Details");
+        request.setAttribute(SELECTED_TAB, "tab-Details");
     }
 }
diff --git a/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/projects/ProjectPortlet.java b/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/projects/ProjectPortlet.java
index b1c31221..71e36a39 100644
--- a/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/projects/ProjectPortlet.java
+++ b/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/projects/ProjectPortlet.java
@@ -14,32 +14,19 @@ package org.eclipse.sw360.portal.portlets.projects;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Strings;
 import com.google.common.collect.*;
-import com.liferay.portal.kernel.json.JSONArray;
-import com.liferay.portal.kernel.json.JSONException;
-import com.liferay.portal.kernel.json.JSONFactoryUtil;
-import com.liferay.portal.kernel.json.JSONObject;
+import com.liferay.portal.kernel.json.*;
 import com.liferay.portal.kernel.portlet.PortletResponseUtil;
 import com.liferay.portal.kernel.servlet.SessionMessages;
 import com.liferay.portal.model.Organization;
 import com.liferay.portal.util.PortalUtil;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-import org.apache.thrift.TException;
-import org.apache.thrift.TSerializer;
-import org.apache.thrift.protocol.TSimpleJSONProtocol;
-import org.eclipse.sw360.datahandler.common.CommonUtils;
-import org.eclipse.sw360.datahandler.common.SW360Constants;
-import org.eclipse.sw360.datahandler.common.SW360Utils;
-import org.eclipse.sw360.datahandler.common.ThriftEnumUtils;
+
+import org.eclipse.sw360.datahandler.common.*;
 import org.eclipse.sw360.datahandler.common.WrappedException.WrappedTException;
 import org.eclipse.sw360.datahandler.couchdb.lucene.LuceneAwareDatabaseConnector;
 import org.eclipse.sw360.datahandler.permissions.PermissionUtils;
 import org.eclipse.sw360.datahandler.thrift.*;
 import org.eclipse.sw360.datahandler.thrift.attachments.*;
-import org.eclipse.sw360.datahandler.thrift.components.ComponentService;
-import org.eclipse.sw360.datahandler.thrift.components.Release;
-import org.eclipse.sw360.datahandler.thrift.components.ReleaseClearingStatusData;
-import org.eclipse.sw360.datahandler.thrift.components.ReleaseLink;
+import org.eclipse.sw360.datahandler.thrift.components.*;
 import org.eclipse.sw360.datahandler.thrift.cvesearch.CveSearchService;
 import org.eclipse.sw360.datahandler.thrift.cvesearch.VulnerabilityUpdateStatus;
 import org.eclipse.sw360.datahandler.thrift.licenseinfo.*;
@@ -57,20 +44,24 @@ import org.eclipse.sw360.portal.portlets.FossologyAwarePortlet;
 import org.eclipse.sw360.portal.users.LifeRayUserSession;
 import org.eclipse.sw360.portal.users.UserCacheHolder;
 import org.eclipse.sw360.portal.users.UserUtils;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.apache.thrift.TException;
+import org.apache.thrift.TSerializer;
+import org.apache.thrift.protocol.TSimpleJSONProtocol;
 import org.jetbrains.annotations.NotNull;
 
 import javax.portlet.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URLConnection;
 import java.util.*;
 import java.util.Map.Entry;
-import java.util.function.BiConsumer;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-import java.util.function.Predicate;
+import java.util.function.*;
 import java.util.stream.Collector;
 import java.util.stream.Collectors;
 
diff --git a/frontend/sw360-portlet/src/main/webapp/html/components/detail.jsp b/frontend/sw360-portlet/src/main/webapp/html/components/detail.jsp
index bf2c5262..c41bb69c 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/components/detail.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/components/detail.jsp
@@ -41,7 +41,6 @@
 </portlet:actionURL>
 <c:catch var="attributeNotFoundException">
     <jsp:useBean id="component" class="org.eclipse.sw360.datahandler.thrift.components.Component" scope="request"/>
-    <jsp:useBean id="selectedTab" class="java.lang.String" scope="request"/>
     <jsp:useBean id="usingProjects" type="java.util.Set<org.eclipse.sw360.datahandler.thrift.projects.Project>" scope="request"/>
     <jsp:useBean id="usingComponents" type="java.util.Set<org.eclipse.sw360.datahandler.thrift.components.Component>" scope="request"/>
     <jsp:useBean id="allUsingProjectsCount" type="java.lang.Integer" scope="request"/>
diff --git a/frontend/sw360-portlet/src/main/webapp/html/components/editRelease.jsp b/frontend/sw360-portlet/src/main/webapp/html/components/editRelease.jsp
index 4063f9fa..1c82d181 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/components/editRelease.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/components/editRelease.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2018. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -90,7 +90,7 @@
     <div id="content">
         <div class="container-fluid">
             <form id="releaseEditForm" name="releaseEditForm" action="<%=updateReleaseURL%>" method="post">
-                <div id="myTab" class="row-fluid">
+                <div id="myTab" class="row-fluid" <core_rt:if test="${not empty selectedTab}"> data-initial-tab="${selectedTab}" </core_rt:if>>
                     <ul class="nav nav-tabs span2">
                         <li><a href="#tab-ReleaseInformation">Summary</a></li>
                         <li><a href="#tab-ReleaseLinks">Linked Releases</a></li>
@@ -168,22 +168,9 @@
 <%@include file="/html/components/includes/vendors/searchVendor.jspf" %>
 
 <script>
-    var tabView; // we still need this global variable, until invalidHandlerShowErrorTab is modularized
-
-    YUI().use(
-            'aui-tabview',
-            function (Y) {
-                tabView = new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-            }
-    );
+    require(['jquery', 'modules/sw360Validate', 'components/includes/vendors/searchVendor', 'modules/confirm', 'modules/autocomplete', 'modules/tabview', /* jquery-plugins */ 'jquery-ui' ], function($, sw360Validate, vendorsearch, confirm, autocomplete, tabview) {
 
-    require(['jquery', 'modules/sw360Validate', 'components/includes/vendors/searchVendor', 'modules/confirm', 'modules/autocomplete', /* jquery-plugins */ 'jquery-ui' ], function($, sw360Validate, vendorsearch, confirm, autocomplete) {
+        tabview.create('myTab');
 
         Liferay.on('allPortletsReady', function() {
             autocomplete.prepareForMultipleHits('programminglanguages', ${programmingLanguages});
diff --git a/frontend/sw360-portlet/src/main/webapp/html/components/includes/components/clearingStatus.jspf b/frontend/sw360-portlet/src/main/webapp/html/components/includes/components/clearingStatus.jspf
index fe64c8a4..42aa706d 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/components/includes/components/clearingStatus.jspf
+++ b/frontend/sw360-portlet/src/main/webapp/html/components/includes/components/clearingStatus.jspf
@@ -146,30 +146,30 @@
         function deleteRelease(id, name, linkedReleasesSize, attachmentsSize) {
 
             function deleteReleaseInternal() {
-                jQuery.ajax({
+                $.ajax({
                     type: 'POST',
                     url: '<%=deleteReleaseAjaxURL%>',
                     cache: false,
                     data: {
                         <portlet:namespace/>releaseId: id,
-                <portlet:namespace/><%=PortalConstants.MODERATION_REQUEST_COMMENT%>:btoa($("#moderationDeleteCommentField").val())
-            },
-                success: function(data) {
-                    if (data.result == 'SUCCESS') {
-                        releaseTable.row('#' + id).remove().draw(false);
-                    }
-                    else if (data.result == 'SENT_TO_MODERATOR') {
-                        $.alert("You may not delete the release, but a request was sent to a moderator!");
-                    } else if (data.result == 'IN_USE') {
-                        $.alert("I could not delete the release, since it is used by another component (release) or project");
-                    } else {
+                        <portlet:namespace/><%=PortalConstants.MODERATION_REQUEST_COMMENT%>:btoa($("#moderationDeleteCommentField").val())
+                    },
+                    success: function(data) {
+                        if (data.result == 'SUCCESS') {
+                            releaseTable.row('#' + id).remove().draw(false);
+                        }
+                        else if (data.result == 'SENT_TO_MODERATOR') {
+                            $.alert("You may not delete the release, but a request was sent to a moderator!");
+                        } else if (data.result == 'IN_USE') {
+                            $.alert("I could not delete the release, since it is used by another component (release) or project");
+                        } else {
+                            $.alert("I could not delete the release!");
+                        }
+                    },
+                    error: function() {
                         $.alert("I could not delete the release!");
                     }
-                },
-                error: function() {
-                    $.alert("I could not delete the release!");
-                }
-            });
+                });
             }
 
             var confirmMessage = "Do you really want to delete the release <b>" + name + "</b> ?";
diff --git a/frontend/sw360-portlet/src/main/webapp/html/components/includes/components/detailOverview.jspf b/frontend/sw360-portlet/src/main/webapp/html/components/includes/components/detailOverview.jspf
index 969fcd2f..94d47ce2 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/components/includes/components/detailOverview.jspf
+++ b/frontend/sw360-portlet/src/main/webapp/html/components/includes/components/detailOverview.jspf
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2016. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2016, 2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -10,11 +10,11 @@
   --%>
 <div id="content">
     <div class="container-fluid">
-        <div id="myTab" class="row-fluid">
+        <div id="myTab" class="row-fluid" <core_rt:if test="${not empty selectedTab}"> data-initial-tab="${selectedTab}" </core_rt:if>>
             <ul class="nav nav-tabs span2">
-                <li <core_rt:if test="${selectedTab == 'Summary' || empty selectedTab}"> class="active" </core_rt:if> ><a href="#tab-Summary">Summary</a></li>
-                <li <core_rt:if test="${selectedTab == 'Clearing'}"> class="active" </core_rt:if>><a href="#tab-ClearingStatus">Release Overview</a></li>
-                <li <core_rt:if test="${selectedTab == 'Attachments'}"> class="active" </core_rt:if>><a href="#tab-Attachments">Attachments</a></li>
+                <li><a href="#tab-Summary">Summary</a></li>
+                <li><a href="#tab-ClearingStatus">Release Overview</a></li>
+                <li><a href="#tab-Attachments">Attachments</a></li>
                 <core_rt:if test="${inComponentDetailsContext}">
                     <%@include file="/html/utils/includes/vulnerabilityTab.jspf" %>
                 </core_rt:if>
diff --git a/frontend/sw360-portlet/src/main/webapp/html/components/includes/releases/detailOverview.jspf b/frontend/sw360-portlet/src/main/webapp/html/components/includes/releases/detailOverview.jspf
index 5126d1e9..4a97355d 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/components/includes/releases/detailOverview.jspf
+++ b/frontend/sw360-portlet/src/main/webapp/html/components/includes/releases/detailOverview.jspf
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2017. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2017, 2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -11,12 +11,12 @@
 
 <div id="content">
     <div class="container-fluid">
-        <div id="myTab" class="row-fluid">
+        <div id="myTab" class="row-fluid" <core_rt:if test="${not empty selectedTab}"> data-initial-tab="${selectedTab}" </core_rt:if>>
             <ul class="nav nav-tabs span2">
-                <li <core_rt:if test="${selectedTab == 'Summary' || empty selectedTab}"> class="active" </core_rt:if> id="Summary" >    <a href="#tab-Summary">Summary</a></li>
-                <li <core_rt:if test="${selectedTab == 'Linked Releases'}">              class="active" </core_rt:if>  >                <a href="#tab-linkedReleases">Linked Releases</a></li>
-                <li <core_rt:if test="${selectedTab == 'Clearing'}">                     class="active" </core_rt:if> id="Clearing" >   <a href="#tab-ClearingDetails">Clearing Details</a></li>
-                <li <core_rt:if test="${selectedTab == 'ECC Details'}">                  class="active" </core_rt:if> id="ECC-Details"> <a href="#tab-ECCDetails">ECC Details
+                <li id="Summary"><a href="#tab-Summary">Summary</a></li>
+                <li><a href="#tab-linkedReleases">Linked Releases</a></li>
+                <li id="Clearing"><a href="#tab-ClearingDetails">Clearing Details</a></li>
+                <li id="ECC-Details"><a href="#tab-ECCDetails">ECC Details
                     <div id="eccStatusDiv"
                         <core_rt:if test="${release.eccInformation.eccStatus.value == 0 || release.eccInformation.eccStatus.value == 3}"> class="notificationBulletSpan backgroundAlert" </core_rt:if> <%--ECCStatus.OPEN || ECCStatus.REJECTED--%>
                         <core_rt:if test="${release.eccInformation.eccStatus.value == 1}"> class="notificationBulletSpan backgroundWarning" </core_rt:if> <%--ECCStatus.IN_PROGRESS--%>
@@ -24,9 +24,9 @@
                         <core_rt:if test="${release.eccInformation.eccStatus.value == 3}">!</core_rt:if> <%--ECCStatus.REJECTED--%>
                         <core_rt:if test="${release.eccInformation.eccStatus.value != 3}">&nbsp;</core_rt:if> <%--ECCStatus.REJECTED--%>
                     </div></a></li>
-                <li <core_rt:if test="${selectedTab == 'Attachments'}">                  class="active" </core_rt:if>  >                <a href="#tab-Attachments">Attachments</a></li>
+                <li><a href="#tab-Attachments">Attachments</a></li>
                 <core_rt:if test="${cotsMode}">
-                    <li <core_rt:if test="${selectedTab == 'COTSDetails'}"> class="active" </core_rt:if>  ><a href="#tab-CommercialDetails">Commercial Details</a></li>
+                    <li><a href="#tab-CommercialDetails">Commercial Details</a></li>
                 </core_rt:if>
                 <core_rt:if test="${inReleaseDetailsContext}">
                     <%@include file="/html/utils/includes/vulnerabilityTab.jspf" %>
diff --git a/frontend/sw360-portlet/src/main/webapp/html/licenses/detail.jsp b/frontend/sw360-portlet/src/main/webapp/html/licenses/detail.jsp
index 529f8f18..397d35c4 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/licenses/detail.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/licenses/detail.jsp
@@ -1,6 +1,6 @@
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 <%--
-  ~ Copyright Siemens AG, 2013-2015. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2015, 2019. Part of the SW360 Portal Project.
   ~ With modifications by Bosch Software Innovations GmbH, 2016.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
@@ -18,7 +18,6 @@
 <portlet:defineObjects/>
 <liferay-theme:defineObjects/>
 <c:catch var="attributeNotFoundException">
-    <jsp:useBean id="selectedTab" class="java.lang.String" scope="request"/>
     <jsp:useBean id="licenseDetail" class="org.eclipse.sw360.datahandler.thrift.licenses.License" scope="request"/>
     <jsp:useBean id="moderationLicenseDetail" class="org.eclipse.sw360.datahandler.thrift.licenses.License"
                  scope="request"/>
@@ -63,45 +62,37 @@
         </span>
         <core_rt:if test="${isUserAtLeastClearingAdmin == 'Yes' || licenseDetail.checked == false}">
          <span class="pull-right">
-             <input type="button" onclick="editLicense()" id="edit" value="Edit License Details and Text"
-                    class="addButton">
+             <input type="button" id="edit" value="Edit License Details and Text" class="addButton">
          </span>
         </core_rt:if>
     </p>
     <core_rt:set var="editMode" value="true" scope="request"/>
     <%@include file="includes/detailOverview.jspf" %>
 </core_rt:if>
+
+<%@ include file="/html/utils/includes/requirejs.jspf" %>
 <script>
-    var Y = YUI().use(
-            'aui-tabview',
-            function (Y) {
-                new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-            }
-    );
+	require(['jquery', 'modules/tabview'], function($, tabview) {
+	    tabview.create('myTab');
 
-    function cancelEditWhitelist() {
-        $(':checkbox').prop('checked', true);
-        Y.all('table.todosFromModerationRequest').hide();
-        Y.all('table.db_table').show();
-    }
+        $('#cancelEditWhitelistButton').on('click', function(event) {
+            $(':checkbox').prop('checked', true);
+            $('table.todosFromModerationRequest').hide();
+            $('table.db_table').show();
+        });
 
-    function showWhiteListOptions() {
-        Y.all('table.todosFromModerationRequest').show();
-        Y.all('table.db_table').hide();
-    }
+        $('#EditWhitelist').on('click', function(event) {
+            $('table.todosFromModerationRequest').show();
+            $('table.db_table').hide();
+        });
 
-    function editLicense() {
-        window.location = '<portlet:renderURL >'
-                             +'<portlet:param name="<%=PortalConstants.LICENSE_ID%>" value="${licenseDetail.id}"/>'
-                             +'<portlet:param name="<%=PortalConstants.PAGENAME%>" value="<%=PortalConstants.PAGENAME_EDIT%>"/>'
-                         +'</portlet:renderURL>'
-    }
+	    $('#edit').on('click', function(event) {
+            window.location = '<portlet:renderURL>'
+                                + '<portlet:param name="<%=PortalConstants.LICENSE_ID%>" value="${licenseDetail.id}"/>'
+                                + '<portlet:param name="<%=PortalConstants.PAGENAME%>" value="<%=PortalConstants.PAGENAME_EDIT%>"/>'
+                            + '</portlet:renderURL>'
+        });
+	});
 </script>
 
 <link rel="stylesheet" href="<%=request.getContextPath()%>/css/sw360.css">
diff --git a/frontend/sw360-portlet/src/main/webapp/html/licenses/edit.jsp b/frontend/sw360-portlet/src/main/webapp/html/licenses/edit.jsp
index fd6c2529..9287b866 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/licenses/edit.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/licenses/edit.jsp
@@ -73,20 +73,6 @@
     </div>
 
     <script>
-        var Y = YUI().use(
-                'aui-tabview',
-                function(Y) {
-                    new Y.TabView(
-                            {
-                                srcNode: '#myTab',
-                                stacked: true,
-                                type: 'tab'
-                            }
-                    ).render();
-                }
-
-        );
-
         var contextpath;
 
         Liferay.on('allPortletsReady', function() {
@@ -107,10 +93,6 @@
             });
         });
 
-        function editLicense() {
-            window.location ='<portlet:renderURL ><portlet:param name="<%=PortalConstants.LICENSE_ID%>" value="${licenseDetail.id}"/><portlet:param name="<%=PortalConstants.PAGENAME%>" value="<%=PortalConstants.PAGENAME_EDIT%>"/></portlet:renderURL>'
-        }
-
         function deleteLicense() {
             window.location.href = '<%=deleteURL%>';
         }
@@ -128,7 +110,6 @@
                     .setParameter('<%=PortalConstants.LICENSE_ID%>','${licenseDetail.id}');
             window.location = portletURL.toString();
         }
-
     </script>
 </core_rt:if>
 
diff --git a/frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailOverview.jspf b/frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailOverview.jspf
index 3131289a..ea21b779 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailOverview.jspf
+++ b/frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailOverview.jspf
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2016. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2016, 2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -10,14 +10,14 @@
   --%>
 <div id="content">
     <div class="container-fluid">
-        <div id="myTab" class="row-fluid">
+        <div id="myTab" class="row-fluid" <core_rt:if test="${not empty selectedTab}"> data-initial-tab="${selectedTab}" </core_rt:if>>
             <ul class="nav nav-tabs span2">
-                <li <core_rt:if test="${selectedTab == 'Details' || empty selectedTab}"> class="active" </core_rt:if> ><a href="#tab-Details">Details</a></li>
-                <li <core_rt:if test="${selectedTab == 'LicenseText'}"> class="active" </core_rt:if> ><a href="#tab-LicenseText">Text</a></li>
-                <li <core_rt:if test="${selectedTab == 'Risks'}"> class="active" </core_rt:if> ><a href="#tab-Risks">Risks</a></li>
-                <li <core_rt:if test="${selectedTab == 'Todos'}"> class="active" </core_rt:if> ><a href="#tab-TodosAndObligations">TODOs and Obligations</a></li>
+                <li><a href="#tab-Details">Details</a></li>
+                <li><a href="#tab-LicenseText">Text</a></li>
+                <li><a href="#tab-Risks">Risks</a></li>
+                <li><a href="#tab-TodosAndObligations">TODOs and Obligations</a></li>
                 <core_rt:if test="${editMode}">
-                    <li <core_rt:if test="${selectedTab == 'AddTodo'}"> class="active" </core_rt:if> ><a href="#tab-AddTodo">Add a Todo</a></li>
+                    <li><a href="#tab-AddTodo">Add a Todo</a></li>
                 </core_rt:if>
             </ul>
             <div class="tab-content span10">
diff --git a/frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailTodos.jspf b/frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailTodos.jspf
index e80880ae..6112d472 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailTodos.jspf
+++ b/frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailTodos.jspf
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2017. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2017, 2019. Part of the SW360 Portal Project.
   ~ With modifications by Bosch Software Innovations GmbH, 2016.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
@@ -22,13 +22,12 @@
     <tr>
         <th colspan="8">Todos and Obligations Details:
             <core_rt:if test="${editMode}">
-                                    <span class="pull-right">
-                                        <core_rt:if
-                                                test="${not empty licenseDetail.todos || not empty added_todos_from_moderation_request}">
-                                            <input id="EditWhitelist" class="addButton" type="button"
-                                                   onclick="showWhiteListOptions()" value="Edit WhiteList">
-                                        </core_rt:if>
-                                    </span>
+                <span class="pull-right">
+                    <core_rt:if
+                            test="${not empty licenseDetail.todos || not empty added_todos_from_moderation_request}">
+                        <input id="EditWhitelist" class="addButton" type="button" value="Edit WhiteList">
+                    </core_rt:if>
+                </span>
             </core_rt:if>
         </th>
     </tr>
@@ -81,7 +80,7 @@
                 <span class="pull-right">
                     <core_rt:if test="${not empty moderationLicenseDetail.todos || not empty added_todos_from_moderation_request}">
                         <input type="button" class="addButton" id="SubmitWhitelist" value="Submit" onclick="submitFormWhiteList()">
-                        <input type="button" class="addButton" id="cancelEditWhitelistButton" value="Cancel" onclick="cancelEditWhitelist()">
+                        <input type="button" class="addButton" id="cancelEditWhitelistButton" value="Cancel">
                     </core_rt:if>
                 </span>
             </core_rt:if>
diff --git a/frontend/sw360-portlet/src/main/webapp/html/moderation/components/delete.jsp b/frontend/sw360-portlet/src/main/webapp/html/moderation/components/delete.jsp
index ba5b9c38..5e7092e3 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/moderation/components/delete.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/moderation/components/delete.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2016. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2016, 2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -24,7 +24,6 @@
 
 <jsp:useBean id="moderationRequest" class="org.eclipse.sw360.datahandler.thrift.moderation.ModerationRequest" scope="request"/>
 <jsp:useBean id="actual_component" class="org.eclipse.sw360.datahandler.thrift.components.Component" scope="request"/>
-<jsp:useBean id="selectedTab" class="java.lang.String" scope="request"/>
 <jsp:useBean id="usingProjects" type="java.util.Set<org.eclipse.sw360.datahandler.thrift.projects.Project>" scope="request"/>
 
 <core_rt:set var="component" value="${actual_component}" scope="request"/>
@@ -50,19 +49,9 @@
 <%@include file="/html/components/includes/components/detailOverview.jspf"%>
 
 <script>
-    var tabView;
-    var Y = YUI().use(
-            'aui-tabview',
-            function (Y) {
-                tabView = new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-            }
-    );
+    require(['jquery', 'modules/tabview'], function($, tabview) {
+        tabview.create('myTab');
+    });
 
     function getBaseURL(){
         var baseUrl = '<%= PortletURLFactoryUtil.create(request, portletDisplay.getId(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE) %>';
diff --git a/frontend/sw360-portlet/src/main/webapp/html/moderation/components/merge.jsp b/frontend/sw360-portlet/src/main/webapp/html/moderation/components/merge.jsp
index 9a77b792..90eb6f48 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/moderation/components/merge.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/moderation/components/merge.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2018. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -24,7 +24,6 @@
 
 <jsp:useBean id="moderationRequest" class="org.eclipse.sw360.datahandler.thrift.moderation.ModerationRequest" scope="request"/>
 <jsp:useBean id="actual_component" class="org.eclipse.sw360.datahandler.thrift.components.Component" scope="request"/>
-<jsp:useBean id="selectedTab" class="java.lang.String" scope="request"/>
 <jsp:useBean id="usingProjects" type="java.util.Set<org.eclipse.sw360.datahandler.thrift.projects.Project>" scope="request"/>
 <jsp:useBean id="allUsingProjectsCount" type="java.lang.Integer" scope="request"/>
 
@@ -66,19 +65,9 @@
 <%@include file="/html/components/includes/components/detailOverview.jspf"%>
 
 <script>
-    var tabView;
-    var Y = YUI().use(
-            'aui-tabview',
-            function (Y) {
-                tabView = new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-            }
-    );
+    require(['jquery', 'modules/tabview'], function($, tabview) {
+        tabview.create('myTab');
+    });
 
     function getBaseURL() {
         var baseUrl = '<%= PortletURLFactoryUtil.create(request, portletDisplay.getId(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE) %>';
diff --git a/frontend/sw360-portlet/src/main/webapp/html/moderation/licenses/merge.jsp b/frontend/sw360-portlet/src/main/webapp/html/moderation/licenses/merge.jsp
index b9ac81c9..9e3c67c1 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/moderation/licenses/merge.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/moderation/licenses/merge.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2016. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2016, 2019. Part of the SW360 Portal Project.
   ~ With modifications by Bosch Software Innovations GmbH, 2016.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
@@ -74,32 +74,23 @@
 
 <%@include file="/html/licenses/includes/detailOverview.jspf"%>
 
+<%@ include file="/html/utils/includes/requirejs.jspf" %>
 <script>
-    var tabView;
-    var Y = YUI().use(
-            'aui-tabview',
-            function(Y) {
-                tabView = new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-
-                Y.all('td.addToWhiteListCheckboxes').hide();
-                Y.all('td.addToWhiteListCheckboxesPlaceholder').show();
-            }
-    );
-
-    function showWhiteListOptions() {
-        Y.all('td.addToWhiteListCheckboxes').show();
-        Y.all('td.addToWhiteListCheckboxesPlaceholder').hide();
-        Y.all('tr.dependentOnWhiteList').show();
-        Y.one('#EditWhitelist').hide();
-        Y.one('#cancelEditWhitelistButton').show();
-        Y.one('#SubmitWhitelist').show();
-    }
+    require(['jquery', 'modules/tabview'], function($, tabview) {
+        tabview.create('myTab');
+
+        $('td.addToWhiteListCheckboxes').hide();
+        $('td.addToWhiteListCheckboxesPlaceholder').show();
+
+        $('#EditWhitelist').on('click', function(event) {
+            $('td.addToWhiteListCheckboxes').show();
+            $('td.addToWhiteListCheckboxesPlaceholder').hide();
+            $('tr.dependentOnWhiteList').show();
+            $('#EditWhitelist').hide();
+            $('#cancelEditWhitelistButton').show();
+            $('#SubmitWhitelist').show();
+        });
+    });
 
     function getBaseURL(){
         var baseUrl = '<%= PortletURLFactoryUtil.create(request, portletDisplay.getId(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE) %>';
diff --git a/frontend/sw360-portlet/src/main/webapp/html/moderation/projects/delete.jsp b/frontend/sw360-portlet/src/main/webapp/html/moderation/projects/delete.jsp
index 6b906665..9bc3a5f7 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/moderation/projects/delete.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/moderation/projects/delete.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2016. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2016, 2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -22,7 +22,6 @@
 
 <jsp:useBean id="usingProjects" type="java.util.Set<org.eclipse.sw360.datahandler.thrift.projects.Project>" scope="request"/>
 <jsp:useBean id="moderationRequest" class="org.eclipse.sw360.datahandler.thrift.moderation.ModerationRequest" scope="request"/>
-<jsp:useBean id="selectedTab" class="java.lang.String" scope="request" />
 <jsp:useBean id="actual_project" class="org.eclipse.sw360.datahandler.thrift.projects.Project" scope="request" />
 <core_rt:set var="project" value="${actual_project}" scope="request"/>
 
@@ -45,19 +44,9 @@
 <%@include file="/html/utils/includes/requirejs.jspf" %>
 <%@include file="/html/projects/includes/detailOverview.jspf"%>
 <script>
-    var tabView;
-    var Y = YUI().use(
-            'aui-tabview',
-            function(Y) {
-                tabView = new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-            }
-    );
+    require(['jquery', 'modules/tabview'], function($, tabview) {
+        tabview.create('myTab');
+    });
 
     function getBaseURL(){
         var baseUrl = '<%= PortletURLFactoryUtil.create(request, portletDisplay.getId(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE) %>';
diff --git a/frontend/sw360-portlet/src/main/webapp/html/moderation/projects/merge.jsp b/frontend/sw360-portlet/src/main/webapp/html/moderation/projects/merge.jsp
index fe720b96..65e456b5 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/moderation/projects/merge.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/moderation/projects/merge.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2018. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -22,7 +22,6 @@
 <jsp:useBean id="usingProjects" type="java.util.Set<org.eclipse.sw360.datahandler.thrift.projects.Project>" scope="request"/>
 <jsp:useBean id="allUsingProjectsCount" type="java.lang.Integer" scope="request"/>
 <jsp:useBean id="moderationRequest" class="org.eclipse.sw360.datahandler.thrift.moderation.ModerationRequest" scope="request"/>
-<jsp:useBean id="selectedTab" class="java.lang.String" scope="request" />
 <jsp:useBean id="actual_project" class="org.eclipse.sw360.datahandler.thrift.projects.Project" scope="request" />
 <jsp:useBean id="defaultLicenseInfoHeaderText" class="java.lang.String" scope="request" />
 <core_rt:set var="project" value="${actual_project}" scope="request"/>
@@ -61,19 +60,9 @@
 <%@include file="/html/projects/includes/detailOverview.jspf"%>
 
 <script>
-    var tabView;
-    var Y = YUI().use(
-            'aui-tabview',
-            function(Y) {
-                tabView = new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-            }
-    );
+    require(['jquery', 'modules/tabview'], function($, tabview) {
+        tabview.create('myTab');
+    });
 
     function getBaseURL(){
         var baseUrl = '<%= PortletURLFactoryUtil.create(request, portletDisplay.getId(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE) %>';
diff --git a/frontend/sw360-portlet/src/main/webapp/html/moderation/releases/delete.jsp b/frontend/sw360-portlet/src/main/webapp/html/moderation/releases/delete.jsp
index 0ec1c7c6..dd444a7e 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/moderation/releases/delete.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/moderation/releases/delete.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2016. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2016, 2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -66,19 +66,9 @@
 <%@include file="/html/components/includes/releases/detailOverview.jspf"%>
 
 <script>
-    var tabView;
-    var Y = YUI().use(
-            'aui-tabview',
-            function (Y) {
-                tabView = new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-            }
-    );
+    require(['jquery', 'modules/tabview'], function($, tabview) {
+        tabview.create('myTab');
+    });
 
     function getBaseURL(){
         var baseUrl = '<%= PortletURLFactoryUtil.create(request, portletDisplay.getId(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE) %>';
diff --git a/frontend/sw360-portlet/src/main/webapp/html/moderation/releases/merge.jsp b/frontend/sw360-portlet/src/main/webapp/html/moderation/releases/merge.jsp
index dd3ec344..0dddc06b 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/moderation/releases/merge.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/moderation/releases/merge.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2018. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -83,19 +83,10 @@
 <%@include file="/html/components/includes/releases/detailOverview.jspf"%>
 
 <script>
-    var tabView;
-    var Y = YUI().use(
-            'aui-tabview',
-            function (Y) {
-                tabView = new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-            }
-    );
+    require(['jquery', 'modules/tabview'], function($, tabview) {
+        tabview.create('myTab');
+    });
+
     function getBaseURL(){
         var baseUrl = '<%= PortletURLFactoryUtil.create(request, portletDisplay.getId(), themeDisplay.getPlid(), PortletRequest.RENDER_PHASE) %>';
         var portletURL = Liferay.PortletURL.createURL(baseUrl)
diff --git a/frontend/sw360-portlet/src/main/webapp/html/moderation/view.jsp b/frontend/sw360-portlet/src/main/webapp/html/moderation/view.jsp
index 2e6ba6bb..474b32e3 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/moderation/view.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/moderation/view.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2018. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -44,7 +44,7 @@
 
 <div id="content">
     <div class="container-fluid">
-        <div id="myTab" class="row-fluid">
+        <div id="myTab" class="row-fluid" <core_rt:if test="${not empty selectedTab}"> data-initial-tab="${selectedTab}" </core_rt:if>>
             <ul class="nav nav-tabs span2">
                 <div id="searchInput">
                     <%@ include file="/html/utils/includes/quickfilter.jspf" %>
@@ -80,18 +80,12 @@
 <%--for javascript library loading --%>
 <%@ include file="/html/utils/includes/requirejs.jspf" %>
 <script>
-    YUI().use('aui-tabview', function (Y) {
-           new Y.TabView({
-            srcNode: '#myTab',
-            stacked: true,
-            type: 'tab'
-        }).render();
-    });
-
-    require(['jquery', 'utils/includes/quickfilter', 'modules/confirm', /* jquery-plugins: */ 'datatables.net', 'datatables.net-buttons', 'datatables.net-buttons.print', 'jquery-confirm'], function($, quickfilter, confirm) {
+    require(['jquery', 'utils/includes/quickfilter', 'modules/confirm', 'modules/tabview', /* jquery-plugins: */ 'datatables.net', 'datatables.net-buttons', 'datatables.net-buttons.print'], function($, quickfilter, confirm, tabview) {
         var moderationsDataTable,
             closedModerationsDataTable;
 
+        tabview.create('myTab');
+
         Liferay.on('allPortletsReady', function() {
             moderationsDataTable = createModerationsTable("#moderationsTable", prepareModerationsData());
             closedModerationsDataTable = createModerationsTable("#closedModerationsTable", prepareClosedModerationsData());
diff --git a/frontend/sw360-portlet/src/main/webapp/html/projects/detail.jsp b/frontend/sw360-portlet/src/main/webapp/html/projects/detail.jsp
index 945e588f..bb8a130f 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/projects/detail.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/projects/detail.jsp
@@ -25,7 +25,6 @@
     <jsp:useBean id="usingProjects" type="java.util.Set<org.eclipse.sw360.datahandler.thrift.projects.Project>"
                  scope="request"/>
     <jsp:useBean id="allUsingProjectsCount" type="java.lang.Integer" scope="request"/>
-    <jsp:useBean id="selectedTab" class="java.lang.String" scope="request"/>
     <jsp:useBean id="numberOfUncheckedVulnerabilities" type="java.lang.Integer" scope="request"/>
     <jsp:useBean id="numberOfVulnerabilities" type="java.lang.Integer" scope="request"/>
     <jsp:useBean id="defaultLicenseInfoHeaderText" class="java.lang.String" scope="request" />
diff --git a/frontend/sw360-portlet/src/main/webapp/html/projects/edit.jsp b/frontend/sw360-portlet/src/main/webapp/html/projects/edit.jsp
index b2bdc1ad..e562d6f5 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/projects/edit.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/projects/edit.jsp
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2018. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -82,7 +82,7 @@
 <div id="content" >
     <div class="container-fluid">
         <form  id="projectEditForm" name="projectEditForm" action="<%=updateURL%>" method="post" >
-            <div id="myTab" class="row-fluid">
+            <div id="myTab" class="row-fluid" <core_rt:if test="${not empty selectedTab}"> data-initial-tab="${selectedTab}" </core_rt:if>>
                 <ul class="nav nav-tabs span2">
                     <li class="active"><a href="#tab-Summary">Summary</a></li>
                     <li><a href="#tab-Administration">Administration</a></li>
@@ -144,22 +144,9 @@
 </core_rt:if>
 
 <script>
-var tabView;
-var Y = YUI().use(
-    'aui-tabview',
-    function(Y) {
-        tabView = new Y.TabView(
-            {
-                srcNode: '#myTab',
-                stacked: true,
-                type: 'tab'
-            }
-        ).render();
-    }
-);
-
+require(['jquery', 'modules/sw360Validate', 'modules/confirm', 'modules/tabview' ], function($, sw360Validate, confirm, tabview) {
 
-require(['jquery', 'modules/sw360Validate', 'modules/confirm' ], function($, sw360Validate, confirm) {
+    tabview.create('myTab');
 
     Liferay.on('allPortletsReady', function() {
         var contextpath = '<%=request.getContextPath()%>',
diff --git a/frontend/sw360-portlet/src/main/webapp/html/projects/includes/detailOverview.jspf b/frontend/sw360-portlet/src/main/webapp/html/projects/includes/detailOverview.jspf
index 46730209..f1ef39b5 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/projects/includes/detailOverview.jspf
+++ b/frontend/sw360-portlet/src/main/webapp/html/projects/includes/detailOverview.jspf
@@ -1,5 +1,5 @@
 <%--
-  ~ Copyright Siemens AG, 2013-2018. Part of the SW360 Portal Project.
+  ~ Copyright Siemens AG, 2013-2019. Part of the SW360 Portal Project.
   ~
   ~ SPDX-License-Identifier: EPL-1.0
   ~
@@ -10,21 +10,21 @@
   --%>
 <div id="content" >
     <div class="container-fluid">
-        <div id="myTab" class="row-fluid">
+        <div id="myTab" class="row-fluid" <core_rt:if test="${selectedTab}"> data-initial-tab="${selectedTab}" </core_rt:if>>
             <ul class="nav nav-tabs span2">
-                <li <core_rt:if test="${selectedTab == 'Summary' || empty selectedTab}"> class="active" </core_rt:if> ><a href="#tab-Summary">Summary</a></li>
-                <li <core_rt:if test="${selectedTab == 'Administration'}"> class="active" </core_rt:if>><a href="#tab-Administration">Administration</a></li>
-                <li <core_rt:if test="${selectedTab == 'Linked Projects'}"> class="active" </core_rt:if>><a href="#tab-linkedProjects">Linked Releases And Projects</a></li>
-                <li <core_rt:if test="${selectedTab == 'Linked Releases'}"> class="active" </core_rt:if>><a href="#tab-linkedReleases">Linked Releases Hierarchy</a></li>
+                <li><a href="#tab-Summary">Summary</a></li>
+                <li><a href="#tab-Administration">Administration</a></li>
+                <li><a href="#tab-linkedProjects">Linked Releases And Projects</a></li>
+                <li><a href="#tab-linkedReleases">Linked Releases Hierarchy</a></li>
                 <core_rt:if test="${inProjectDetailsContext}">
-                <li <core_rt:if test="${selectedTab == 'Attachment Usages'}"> class="active" </core_rt:if>><a href="#tab-attachmentUsages">Attachment Usages</a></li>
+                <li><a href="#tab-attachmentUsages">Attachment Usages</a></li>
                 </core_rt:if>
-                <li <core_rt:if test="${selectedTab == 'Clearing Status'}"> class="active" </core_rt:if>><a href="#tab-ClearingStatus">Clearing Status</a></li>
-                <li <core_rt:if test="${selectedTab == 'ECC Status'}"> class="active" </core_rt:if>><a href="#tab-ECCStatus">ECC Status</a></li>
-                <li <core_rt:if test="${selectedTab == 'Attachments'}"> class="active" </core_rt:if>><a href="#tab-Attachments">Attachments</a></li>
+                <li><a href="#tab-ClearingStatus">Clearing Status</a></li>
+                <li><a href="#tab-ECCStatus">ECC Status</a></li>
+                <li><a href="#tab-Attachments">Attachments</a></li>
                 <core_rt:if test="${inProjectDetailsContext}">
-                    <li <core_rt:if test="${selectedTab == 'Vulnerabilities'}"> class="active" </core_rt:if>>
-                        <a href="#tab-Vulnerabilites">
+                    <li>
+                        <a href="#tab-Vulnerabilities">
                             Vulnerabilities
                             <div id="numberOfVulnerabilitiesDiv"
                                     <core_rt:if
diff --git a/frontend/sw360-portlet/src/main/webapp/html/projects/includes/projects/administrationEdit.jspf b/frontend/sw360-portlet/src/main/webapp/html/projects/includes/projects/administrationEdit.jspf
index 2c30c6da..8483afb7 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/projects/includes/projects/administrationEdit.jspf
+++ b/frontend/sw360-portlet/src/main/webapp/html/projects/includes/projects/administrationEdit.jspf
@@ -176,7 +176,7 @@
 </table>
 
 <script>
-    require(['jquery'], function ($) {
+    require(['jquery', /* jquery-plugins */ 'jquery-ui'], function ($) {
 
         Liferay.on('allPortletsReady', function() {
             <core_rt:if test="${addMode}" >
diff --git a/frontend/sw360-portlet/src/main/webapp/html/utils/includes/requirejs.jspf b/frontend/sw360-portlet/src/main/webapp/html/utils/includes/requirejs.jspf
index ca20cbd4..1681d737 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/utils/includes/requirejs.jspf
+++ b/frontend/sw360-portlet/src/main/webapp/html/utils/includes/requirejs.jspf
@@ -30,6 +30,7 @@
         },
         shim: {
             // only for libraries that do not support RequireJS out of the box
+            "jquery-confirm":                       [ "jquery" ],
             "jquery-treetable": 					[ "jquery" ],
             "datatables-plugins-sorting.natural": 	[ "jquery" ]
         }
diff --git a/frontend/sw360-portlet/src/main/webapp/html/utils/includes/vulnerabilityTab.jspf b/frontend/sw360-portlet/src/main/webapp/html/utils/includes/vulnerabilityTab.jspf
index 183ac2f6..f6ae1152 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/utils/includes/vulnerabilityTab.jspf
+++ b/frontend/sw360-portlet/src/main/webapp/html/utils/includes/vulnerabilityTab.jspf
@@ -10,8 +10,8 @@
   ~ http://www.eclipse.org/legal/epl-v10.html
   --%>
 
-<li <core_rt:if test="${selectedTab == 'Vulnerabilities'}"> class="active" </core_rt:if>>
-    <a href="#tab-Vulnerabilites">
+<li>
+    <a href="#tab-Vulnerabilities">
         Vulnerabilities
         <div id="numberOfVulnerabilitiesDiv" class="notificationBulletSpan backgroundGrey">
             ${numberOfCheckedOrUncheckedVulnerabilities}
diff --git a/frontend/sw360-portlet/src/main/webapp/html/vulnerabilities/detail.jsp b/frontend/sw360-portlet/src/main/webapp/html/vulnerabilities/detail.jsp
index 9a69dc0e..90519b2f 100644
--- a/frontend/sw360-portlet/src/main/webapp/html/vulnerabilities/detail.jsp
+++ b/frontend/sw360-portlet/src/main/webapp/html/vulnerabilities/detail.jsp
@@ -14,7 +14,6 @@
 <liferay-theme:defineObjects />
 
 <jsp:useBean id="vulnerability" class="org.eclipse.sw360.datahandler.thrift.vulnerabilities.Vulnerability" scope="request" />
-<jsp:useBean id="selectedTab" class="java.lang.String" scope="request" />
 
 <link rel="stylesheet" href="<%=request.getContextPath()%>/css/sw360.css">
 <link rel="stylesheet" href="<%=request.getContextPath()%>/webjars/jquery-ui/themes/base/jquery-ui.min.css">
@@ -26,11 +25,11 @@
 
 <div id="content" >
     <div class="container-fluid">
-        <div id="myTab" class="row-fluid">
+        <div id="myTab" class="row-fluid" <core_rt:if test="${not empty selectedTab}"> data-initial-tab="${selectedTab}" </core_rt:if>>
             <ul class="nav nav-tabs span2">
-                <li <core_rt:if test="${selectedTab == 'Summary' || empty selectedTab}"> class="active" </core_rt:if> ><a href="#tab-Summary">Summary</a></li>
-                <li <core_rt:if test="${selectedTab == 'Meta data'}"> class="active" </core_rt:if>><a href="#tab-metaData">Meta data</a></li>
-                <li <core_rt:if test="${selectedTab == 'References'}"> class="active" </core_rt:if>><a href="#tab-references">References</a></li>
+                <li><a href="#tab-Summary">Summary</a></li>
+                <li><a href="#tab-metaData">Meta data</a></li>
+                <li><a href="#tab-references">References</a></li>
             </ul>
             <div class="tab-content span10">
                 <div id="tab-Summary" class="tab-pane" >
@@ -47,18 +46,9 @@
     </div>
 </div>
 
+<%@ include file="/html/utils/includes/requirejs.jspf" %>
 <script>
-    var tabView;
-    var Y = YUI().use(
-            'aui-tabview',
-            function(Y) {
-                tabView = new Y.TabView(
-                        {
-                            srcNode: '#myTab',
-                            stacked: true,
-                            type: 'tab'
-                        }
-                ).render();
-            }
-    );
+    require(['jquery', 'modules/tabview'], function($, tabview) {
+        tabview.create('myTab');
+    });
 </script>
diff --git a/frontend/sw360-portlet/src/main/webapp/js/main.js b/frontend/sw360-portlet/src/main/webapp/js/main.js
index 232173f2..e0e955d0 100644
--- a/frontend/sw360-portlet/src/main/webapp/js/main.js
+++ b/frontend/sw360-portlet/src/main/webapp/js/main.js
@@ -91,6 +91,9 @@ function bindkeyPressToClick(keyed, clicked) {
 }
 
 function choosePane($pane) {
+    // some hack for not having to put the tabView in the global namespace. currently all tabviews have the same id which
+    // is why this hack works.
+    var tabView = $('#myTab');
     if (typeof tabView != "undefined" && typeof tabView.getTabs == "function") {
         var indexOfErrorPane = $pane.parent().children().index($pane[0]);
         try {
diff --git a/frontend/sw360-portlet/src/main/webapp/js/modules/tabview.js b/frontend/sw360-portlet/src/main/webapp/js/modules/tabview.js
index ee5fae38..5a87e2a6 100644
--- a/frontend/sw360-portlet/src/main/webapp/js/modules/tabview.js
+++ b/frontend/sw360-portlet/src/main/webapp/js/modules/tabview.js
@@ -1,5 +1,5 @@
 /*
- * Copyright Siemens AG, 2017.
+ * Copyright Siemens AG, 2017, 2019.
  * Part of the SW360 Portal Project.
  *
  * SPDX-License-Identifier: EPL-1.0
@@ -11,20 +11,78 @@
  */
 define('modules/tabview', [ 'jquery' ], function($) {
 
-    function createTabView(id, options) {
-        var tabView;
+    var tabView;
 
+    /**
+     * This tab view component is managing its state via the url hash. This way it generates bookmarkable urls, supports
+     * back and forward browser actions and also has a mechanism through which the server can set an initial tab (the
+     * data attribute 'data-initial-tab' has to be set on the root dom node of this tabview which is identified by the
+     * id parameter of this method).
+     */
+    function createTabView(id, options) {
         YUI().use('aui-tabview', function(Y) {
-            options = options || {
-                stacked: true,
-                type: 'tab'
-            };
-            options.srcNode = '#' + id;
+            tabView = renderTabView(Y, id, options);
+
+            window.addEventListener('hashchange', onHashChanges, true);
+
+            tabView.after('selectionChange', onTabChanges);
 
-            tabView = new Y.TabView(options).render();
+            setInitialTab(id);
         });
     }
 
+    function renderTabView(Y, id, options) {
+        options = options || {
+            stacked: true,
+            type: 'tab'
+        };
+        options.srcNode = '#' + id;
+
+        return new Y.TabView(options).render();
+    }
+
+    function onHashChanges() {
+        var hash = location.hash,
+            idx;
+        if (tabView.get('selection').get('srcNode').getDOMNode().getAttribute('href') !== hash) {
+            // since we get this event as well when the user clicks a tab, we only want to select a tab if the
+            // hash does not reflect the selected tab (which will be in case that the back/forward button was used)
+            idx = $('> div > div', $(tabView.get('srcNode').getDOMNode())).index( $(hash) );
+            tabView.selectChild(idx >= 0 ? idx : 0);
+        }
+        // in some browsers the hash change might invoke a scroll to the anchor in every case - which we want to revoke
+        window.scrollTo(0, 0);
+    }
+
+    function onTabChanges(e) {
+        var tabId = e.newVal.get('srcNode').getDOMNode().getAttribute('href');
+        location.hash = tabId;
+    }
+
+    function setInitialTab(id) {
+        // set default tab after initialization
+        // url hash currently overrules server setting on default tab but this might be changed
+        var initialIdx = 0,
+            hash = location.hash;
+        if (hash) {
+            initialIdx = $('#' + id + ' > div > div').index( $(hash) );
+        } else if ($('#' + id).data('initialTab')) {
+            initialIdx = $('#' + id + ' > div > div').index( $('#' + $('#' + id).data('initialTab')) );
+        }
+
+        initialIdx = initialIdx >= 0 ? initialIdx : 0;
+        tabView.selectChild(initialIdx);
+
+        if (initialIdx === 0) {
+            // normally an initialIdx of 0 means no one set a special tab. Which means that we do not have a hash.
+            // just to be consistent we set the hash of the first tab in this case.
+            location.hash = tabView.get('selection').get('srcNode').getDOMNode().getAttribute('href');
+        }
+
+        // lets scroll to top if someone used a direct link with an anchor (the browser might have scrolled to the anchor)
+        window.scrollTo(0, 0);
+    }
+
     return {
         create: createTabView
     };
['frontend/sw360-portlet/src/main/webapp/html/moderation/licenses/merge.jsp', 'frontend/sw360-portlet/src/main/webapp/html/moderation/components/merge.jsp', 'frontend/sw360-portlet/src/main/webapp/html/utils/includes/requirejs.jspf', 'frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/licenses/LicensesPortlet.java', 'frontend/sw360-portlet/src/main/webapp/js/modules/tabview.js', 'frontend/sw360-portlet/src/main/webapp/html/moderation/projects/delete.jsp', 'frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailTodos.jspf', 'frontend/sw360-portlet/src/main/webapp/html/moderation/projects/merge.jsp', 'frontend/sw360-portlet/src/main/webapp/html/moderation/components/delete.jsp', 'frontend/sw360-portlet/src/main/webapp/html/components/includes/components/detailOverview.jspf', 'frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/projects/ProjectPortlet.java', 'frontend/sw360-portlet/src/main/webapp/html/projects/includes/projects/administrationEdit.jspf', 'frontend/sw360-portlet/src/main/webapp/html/licenses/edit.jsp', 'frontend/sw360-portlet/src/main/webapp/html/components/includes/releases/detailOverview.jspf', 'frontend/sw360-portlet/src/main/webapp/html/components/editRelease.jsp', 'frontend/sw360-portlet/src/main/webapp/html/projects/detail.jsp', 'frontend/sw360-portlet/src/main/webapp/html/projects/edit.jsp', 'frontend/sw360-portlet/src/main/webapp/html/projects/includes/detailOverview.jspf', 'frontend/sw360-portlet/src/main/webapp/html/components/includes/components/clearingStatus.jspf', 'frontend/sw360-portlet/src/main/webapp/html/components/detail.jsp', 'frontend/sw360-portlet/src/main/webapp/html/moderation/releases/merge.jsp', 'frontend/sw360-portlet/src/main/webapp/html/licenses/includes/detailOverview.jspf', 'frontend/sw360-portlet/src/main/webapp/html/licenses/detail.jsp', 'frontend/sw360-portlet/src/main/webapp/html/vulnerabilities/detail.jsp', 'frontend/sw360-portlet/src/main/webapp/html/utils/includes/vulnerabilityTab.jspf', 'frontend/sw360-portlet/src/main/webapp/js/main.js', 'frontend/sw360-portlet/src/main/webapp/html/moderation/releases/delete.jsp', 'frontend/sw360-portlet/src/main/webapp/html/moderation/view.jsp']