diff --git a/interface/web/sites/aps_do_operation.php b/interface/web/sites/aps_do_operation.php
index ff0705f9bbb722114029f4f4a4db957e31ca64a8..8de3ed4e29b012793c8055a83b08173c8445030c 100644
--- a/interface/web/sites/aps_do_operation.php
+++ b/interface/web/sites/aps_do_operation.php
@@ -64,6 +64,9 @@ if($_GET['action'] == 'change_status')
 }
 else if($_GET['action'] == 'delete_instance')
 	{
+		// Check CSRF Token
+		$app->auth->csrf_token_check('GET');
+		
 		// Make sure a valid package ID is given (also corresponding to the calling user)
 		$client_id = 0;
 		$is_admin = ($_SESSION['s']['user']['typ'] == 'admin') ? true : false;
diff --git a/interface/web/sites/aps_install_package.php b/interface/web/sites/aps_install_package.php
index 4739e25b8a69798e2d253a059e10a12f0e2652c3..1a38190a9f2590f5070c6e75c5073cfd4dd96893 100644
--- a/interface/web/sites/aps_install_package.php
+++ b/interface/web/sites/aps_install_package.php
@@ -93,6 +93,9 @@ if(!empty($domains_assoc)) foreach($domains_assoc as $domain) $domains[] = $doma
 	$result['input'] = array();
 if(count($_POST) > 1)
 {
+	// Check CSRF Token
+	$app->auth->csrf_token_check();
+	
 	$result = $gui->validateInstallerInput($_POST, $details, $domains, $settings);
 	if(empty($result['error']))
 	{
@@ -117,13 +120,16 @@ foreach($details as $key => $value)
 	else if($key == 'Requirements PHP settings') $app->tpl->setLoop('pkg_requirements_php_settings', $details['Requirements PHP settings']);
 }
 
+// get new csrf token
+$csrf_token = $app->auth->csrf_token_get('aps_install_package');
+$app->tpl->setVar('_csrf_id', $csrf_token['csrf_id']);
+$app->tpl->setVar('_csrf_key', $csrf_token['csrf_key']);
+
 // Parse the template as far as possible, then do the rest manually
 $app->tpl_defaults();
 $parsed_tpl = $app->tpl->grab();
 
 
-// ISPConfig has a very old and functionally limited template engine. We have to style parts on our own...
-
 // Print the domain list
 $domains_tpl = '';
 if(!empty($domains))
diff --git a/interface/web/sites/aps_installedpackages_list.php b/interface/web/sites/aps_installedpackages_list.php
index 28f334019f5706f617602af096a7beb055e41d52..32849ad740f12f67f662a43cd7bca77532e866e5 100644
--- a/interface/web/sites/aps_installedpackages_list.php
+++ b/interface/web/sites/aps_installedpackages_list.php
@@ -112,12 +112,16 @@ if(!$is_admin) {
 $records = $app->db->queryAllRecords($query);
 $app->listform_actions->DataRowColor = '#FFFFFF';
 
+$csrf_token = $app->auth->csrf_token_get($app->listform->listDef['name']);
+$_csrf_id = $csrf_token['csrf_id'];
+$_csrf_key = $csrf_token['csrf_key'];
+
 // Re-form all result entries and add extra entries
 $records_new = array();
 if(is_array($records))
 {
 	$app->listform_actions->idx_key = $app->listform->listDef["table_idx"];
-	foreach($records as $rec)
+	foreach($records as $key => $rec)
 	{
 		// Set an abbreviated install location to beware the page layout
 		$ils = '';
@@ -129,7 +133,9 @@ if(is_array($records))
 		if($rec['instance_status'] != INSTANCE_REMOVE && $rec['instance_status'] != INSTANCE_INSTALL)
 			$rec['delete_possible'] = 'true';
 
-		$records_new[] = $app->listform_actions->prepareDataRow($rec);
+		$records_new[$key] = $app->listform_actions->prepareDataRow($rec);
+		$records_new[$key]['csrf_id'] = $_csrf_id;
+		$records_new[$key]['csrf_key'] = $_csrf_key;
 	}
 }
 $app->tpl->setLoop('records', $records_new);
diff --git a/interface/web/sites/templates/aps_instances_list.htm b/interface/web/sites/templates/aps_instances_list.htm
index cfde591b195398190f7afa2f43023847da3b1d0e..ae3d095e7b1d8ab4f6d1064ed9bd387b1201ec2e 100644
--- a/interface/web/sites/templates/aps_instances_list.htm
+++ b/interface/web/sites/templates/aps_instances_list.htm
@@ -40,7 +40,7 @@
                             <td><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='instance_status'}</span></td>
                             <td class="text-right">
                                 <tmpl_if name='delete_possible'>
-                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/aps_do_operation.php?action=delete_instance&id={tmpl_var name='id'}','{tmpl_var name='pkg_delete_confirmation'}')"><span class="icon icon-delete"></span></button>
+                                    <a class="btn btn-default formbutton-danger formbutton-narrow" href="javascript: ISPConfig.confirm_action('sites/aps_do_operation.php?action=delete_instance&id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}','{tmpl_var name='pkg_delete_confirmation'}')"><span class="icon icon-delete"></span></button>
                                 </tmpl_if>
                             </td>        
                         </tr>
diff --git a/interface/web/sites/templates/aps_packages_list.htm b/interface/web/sites/templates/aps_packages_list.htm
index 501e7aeeddfacd0eaadef6b6a6a3edfae1be1733..fa3582ed7435709debb13b750e4a1007676cfc6b 100644
--- a/interface/web/sites/templates/aps_packages_list.htm
+++ b/interface/web/sites/templates/aps_packages_list.htm
@@ -31,7 +31,7 @@
                             <td>{tmpl_var name='version'}-{tmpl_var name='release'}</td>
                             <td>{tmpl_var name='category'}</td>
                                 <tmpl_if name='is_admin'>
-                                    <td><a href="javascript:ISPConfig.loadContentInto('status_content{tmpl_var name='__ROWNUM__'}', 'sites/aps_do_operation.php?action=change_status&id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}');"><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='package_status'}</span></a></td>
+                                    <td><a href="javascript:ISPConfig.loadContentInto('status_content{tmpl_var name='__ROWNUM__'}', 'sites/aps_do_operation.php?action=change_status&id={tmpl_var name='id'}&_csrf_id={tmpl_var name='csrf_id'}&_csrf_key={tmpl_var name='csrf_key'}&phpsessid={tmpl_var name='phpsessid'}');"><span id="status_content{tmpl_var name='__ROWNUM__'}">{tmpl_var name='package_status'}</span></a></td>
                                 </tmpl_if>
                             <td class="text-right">&nbsp;</td>
                         </tr>