Index: plugins/maintenance/_admin.php
===================================================================
--- plugins/maintenance/_admin.php	(revision 1984)
+++ plugins/maintenance/_admin.php	(revision 1989)
@@ -18,5 +18,5 @@
 	'index.php?pf=maintenance/icon.png',
 	preg_match('/plugin.php\?p=maintenance(&.*)?$/', $_SERVER['REQUEST_URI']),
-	$core->auth->isSuperAdmin()
+	$core->auth->check('admin', $core->blog->id)
 );
 
@@ -192,9 +192,9 @@
 		'<p><label for="maintenance_dashboard_icon" class="classic">'.
 		form::checkbox('maintenance_dashboard_icon', 1, $core->auth->user_prefs->maintenance->dashboard_icon).
-		__('Display count of expired tasks on maintenance dashboard icon').'</label></p>'.
+		__('Display count of late tasks on maintenance dashboard icon').'</label></p>'.
 
 		'<p><label for="maintenance_dashboard_item" class="classic">'.
 		form::checkbox('maintenance_dashboard_item', 1, $core->auth->user_prefs->maintenance->dashboard_item).
-		__('Display list of expired tasks on dashboard items').'</label></p>'.
+		__('Display list of late tasks on dashboard items').'</label></p>'.
 
 		'</div>';
Index: plugins/maintenance/_define.php
===================================================================
--- plugins/maintenance/_define.php	(revision 1925)
+++ plugins/maintenance/_define.php	(revision 1989)
@@ -16,4 +16,5 @@
 	/* Description*/		"Maintain your installation",
 	/* Author */			"Olivier Meunier & Association Dotclear",
-	/* Version */			'1.3'
+	/* Version */			'1.3.1',
+	/* Permission */		'admin'
 );
Index: plugins/maintenance/inc/class.dc.maintenance.php
===================================================================
--- plugins/maintenance/inc/class.dc.maintenance.php	(revision 1984)
+++ plugins/maintenance/inc/class.dc.maintenance.php	(revision 1989)
@@ -77,5 +77,11 @@
 			}
 
-			$this->tasks[$task] = new $task($this, 'plugin.php?p=maintenance');
+			if (($t = new $task($this, 'plugin.php?p=maintenance')) === null
+			|| $t->perm() === null && !$this->core->auth->isSuperAdmin()
+			|| !$this->core->auth->check($t->perm(), $this->core->blog->id)) {
+				continue;
+			}
+
+			$this->tasks[$task] = $t;
 		}
 
Index: plugins/maintenance/inc/class.dc.maintenance.task.php
===================================================================
--- plugins/maintenance/inc/class.dc.maintenance.task.php	(revision 1984)
+++ plugins/maintenance/inc/class.dc.maintenance.task.php	(revision 1989)
@@ -29,4 +29,5 @@
 	protected $ajax = false;
 	protected $blog = false;
+	protected $perm = null;
 
 	protected $id;
@@ -55,4 +56,9 @@
 		$this->init();
 
+		if ($this->perm() === null && !$this->core->auth->isSuperAdmin()
+		|| !$this->core->auth->check($this->perm(), $this->core->blog->id)) {
+			return null;
+		}
+
 		$this->p_url = $p_url;
 		$this->id = get_class($this);
@@ -72,4 +78,6 @@
 
 		$this->ts = abs((integer) $ts);
+
+		return true;
 	}
 
@@ -83,4 +91,29 @@
 	{
 		return null;
+	}
+
+	/**
+	 * Get task permission.
+	 *
+	 * Return user permission required to run this task 
+	 * or null for super admin.
+	 *
+	 * @return <b>mixed</b> Permission.
+	 */
+	public function perm()
+	{
+		return $this->perm;
+	}
+
+	/**
+	 * Get task scope.
+	 *.
+	 * Is task limited to current blog.
+	 *
+	 * @return <b>boolean</b> Limit to blog
+	 */
+	public function blog()
+	{
+		return $this->blog;
 	}
 
Index: plugins/maintenance/inc/tasks/class.dc.maintenance.indexcomments.php
===================================================================
--- plugins/maintenance/inc/tasks/class.dc.maintenance.indexcomments.php	(revision 1984)
+++ plugins/maintenance/inc/tasks/class.dc.maintenance.indexcomments.php	(revision 1989)
@@ -22,5 +22,5 @@
 	{
 		$this->name 		= __('Search engine index');
-		$this->task 		= __('Index all comments');
+		$this->task 		= __('Index all comments for search engine');
 		$this->step_task 	= __('Next');
 		$this->step 		= __('Indexing comment %d to %d.');
Index: plugins/maintenance/inc/tasks/class.dc.maintenance.indexposts.php
===================================================================
--- plugins/maintenance/inc/tasks/class.dc.maintenance.indexposts.php	(revision 1984)
+++ plugins/maintenance/inc/tasks/class.dc.maintenance.indexposts.php	(revision 1989)
@@ -22,5 +22,5 @@
 	{
 		$this->name 		= __('Search engine index');
-		$this->task 		= __('Index all posts');
+		$this->task 		= __('Index all entries for search engine');
 		$this->step_task	= __('Next');
 		$this->step 		= __('Indexing entry %d to %d.');
Index: plugins/maintenance/inc/tasks/class.dc.maintenance.zipmedia.php
===================================================================
--- plugins/maintenance/inc/tasks/class.dc.maintenance.zipmedia.php	(revision 1984)
+++ plugins/maintenance/inc/tasks/class.dc.maintenance.zipmedia.php	(revision 1989)
@@ -14,4 +14,5 @@
 class dcMaintenanceZipmedia extends dcMaintenanceTask
 {
+	protected $perm = 'admin';
 	protected $blog = true;
 	protected $tab = 'backup';
Index: plugins/maintenance/inc/tasks/class.dc.maintenance.ziptheme.php
===================================================================
--- plugins/maintenance/inc/tasks/class.dc.maintenance.ziptheme.php	(revision 1984)
+++ plugins/maintenance/inc/tasks/class.dc.maintenance.ziptheme.php	(revision 1989)
@@ -14,4 +14,5 @@
 class dcMaintenanceZiptheme extends dcMaintenanceTask
 {
+	protected $perm = 'admin';
 	protected $blog = true;
 	protected $tab = 'backup';
Index: plugins/maintenance/index.php
===================================================================
--- plugins/maintenance/index.php	(revision 1985)
+++ plugins/maintenance/index.php	(revision 1989)
@@ -12,12 +12,10 @@
 if (!defined('DC_CONTEXT_ADMIN')) { return; }
 
-dcPage::checkSuper();
-
-// main class
+// Set env
+
+$core->blog->settings->addNamespace('maintenance');
 
 $maintenance = new dcMaintenance($core);
-$core->blog->settings->addNamespace('maintenance');
-
-// Set var
+$tasks = $maintenance->getTasks();
 
 $msg = '';
@@ -28,5 +26,5 @@
 
 $code = empty($_POST['code']) ? null : (integer) $_POST['code'];
-$tab = empty($_REQUEST['tab']) ? 'maintenance' : $_REQUEST['tab'];
+$tab = empty($_REQUEST['tab']) ? '' : $_REQUEST['tab'];
 
 // Save settings
@@ -39,10 +37,10 @@
 			!empty($_POST['settings_plugin_message']), 
 			'boolean', 
-			'Display alert message of expired tasks on plugin page', 
+			'Display alert message of late tasks on plugin page', 
 			true, 
 			true
 		);
 
-		foreach($maintenance->getTasks() as $t) {
+		foreach($tasks as $t) {
 			if (!empty($_POST['settings_recall_time']) && $_POST['settings_recall_time'] == 'seperate') {
 				$ts = empty($_POST['settings_ts_'.$t->id()]) ? 0 : $_POST['settings_ts_'.$t->id()];
@@ -57,5 +55,5 @@
 				sprintf('Recall time for task %s', $t->id()), 
 				true, 
-				true
+				$t->blog()
 			);
 		}
@@ -138,4 +136,19 @@
 </head>
 <body>';
+
+// Check if there is somthing to display according to user permissions
+if (empty($tasks)) {
+	echo dcPage::breadcrumb(
+		array(
+			__('Plugins') => '',
+			'<a href="'.$p_url.'">'.__('Maintenance').'</a>' => '',
+			'<span class="page-title">'.html::escapeHTML($task->name()).'</span>' => ''
+		)
+	).
+	'<p class="warn">'.__('You have not sufficient permissions to view this page.').'</p>'.
+	'</body></html>';
+
+	return null;
+}
 
 // Success message
@@ -201,8 +214,8 @@
 	{
 		$res_group = '';
-		foreach($maintenance->getGroups($core) as $group_id => $group_name)
+		foreach($maintenance->getGroups() as $group_id => $group_name)
 		{
 			$res_task = '';
-			foreach($maintenance->getTasks($core) as $t)
+			foreach($tasks as $t)
 			{
 				if ($t->group() != $group_id || $t->tab() != $tab_id) {
@@ -256,5 +269,5 @@
 			form::hidden(array('tab'), $tab_id).
 			$core->formNonce().'</p>'.
-			'<p class="form-note info">'.__('This may take a very long time.').'.</p>'.
+			'<p class="form-note info">'.__('This may take a very long time.').'</p>'.
 			'</form>'.
 			'</div>';
@@ -264,5 +277,5 @@
 	// Advanced tasks (that required a tab)
 
-	foreach($maintenance->getTasks($core) as $t)
+	foreach($tasks as $t)
 	{
 		if ($t->group() !== null) {
@@ -292,5 +305,5 @@
 	'<p><label for="settings_plugin_message" class="classic">'.
 	form::checkbox('settings_plugin_message', 1, $core->blog->settings->maintenance->plugin_message).
-	__('Display alert messages on expired tasks').'</label></p>'.
+	__('Display alert messages on late tasks').'</label></p>'.
 
 	'<p><label for="settings_recall_time">'.__('Recall time for all tasks:').'</label>'.
@@ -300,5 +313,5 @@
 	'<p>'.__('Recall time per task:').'</p>';
 
-	foreach($maintenance->getTasks($core) as $t)
+	foreach($tasks as $t)
 	{
 		echo
@@ -319,5 +332,5 @@
 	'</form>'.
 	'<p class="info">'.sprintf(
-		__('You can place list of expired tasks on your %s.'),
+		__('You can place list of late tasks on your %s.'),
 		'<a href="preferences.php#user-favorites">'.__('Dashboard').'</a>'
 	).'</a></p>'.
