Index: admin/index.php
===================================================================
--- admin/index.php	(revision 2614)
+++ admin/index.php	(revision 2708)
@@ -325,5 +325,5 @@
 		'<div id="quick">'.
 		'<h3>'.__('Quick entry').'</h3>'.
-		'<form id="quick-entry" action="post.php" method="post" class="fieldset">'.
+		'<form id="quick-entry" action="'.$core->adminurl->get('admin.post').'" method="post" class="fieldset">'.
 		'<h4>'.__('New entry').'</h4>'.
 		'<p class="col"><label for="post_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label>'.
Index: admin/plugin.php
===================================================================
--- admin/plugin.php	(revision 2566)
+++ admin/plugin.php	(revision 2708)
@@ -36,4 +36,5 @@
 	$p_info = $core->plugins->getModules($p);
 
+	$p_name = $p;
 	$p_url = 'plugin.php?p='.$p;
 
Index: admin/post.php
===================================================================
--- admin/post.php	(revision 2705)
+++ admin/post.php	(revision 2711)
@@ -41,6 +41,6 @@
 $can_delete = false;
 
-$post_headlink = '<link rel="%s" title="%s" href="post.php?id=%s" />';
-$post_link = '<a href="post.php?id=%s" title="%s">%s</a>';
+$post_headlink = '<link rel="%s" title="%s" href="'.$core->adminurl->get('admin.post',array('id' => "%s"),'&').'" />';
+$post_link = '<a href="'.$core->adminurl->get('admin.post',array('id' => "%s"),'&').'" title="%s">%s</a>';
 
 $next_link = $prev_link = $next_headlink = $prev_headlink = null;
@@ -163,5 +163,5 @@
 }
 
-$comments_actions_page = new dcCommentsActionsPage($core,'post.php',array('id' => $post_id, '_ANCHOR'=>$anchor,'section' => $anchor));
+$comments_actions_page = new dcCommentsActionsPage($core,$core->adminurl->get('admin.post'),array('id' => $post_id, '_ANCHOR'=>$anchor,'section' => $anchor));
 
 if ($comments_actions_page->process()) {
@@ -190,5 +190,8 @@
 		if (!$core->error->flag()) {
 			dcPage::addSuccessNotice(__('All pings sent.'));
-			http::redirect('post.php?id='.$post_id.'&tb=1');
+			http::redirect($core->adminurl->get(
+				'admin.post',
+				array('id' => $post_id, 'tb'=> '1')
+			));
 		}
 	}
@@ -325,5 +328,8 @@
 			$core->callBehavior('adminAfterPostUpdate',$cur,$post_id);
 			dcPage::addSuccessNotice (sprintf(__('The post "%s" has been successfully updated'),html::escapeHTML($cur->post_title)));
-			http::redirect('post.php?id='.$post_id);
+			http::redirect($core->adminurl->get(
+				'admin.post',
+				array('id' => $post_id)
+			));
 		} catch (Exception $e) {
 			$core->error->add($e->getMessage());
@@ -346,5 +352,8 @@
 
 			dcPage::addSuccessNotice(__('Entry has been successfully created.'));
-			http::redirect('post.php?id='.$return_id);
+			http::redirect($core->adminurl->get(
+				'admin.post',
+				array('id' => $return_id)
+			));
 		} catch (Exception $e) {
 			$core->error->add($e->getMessage());
@@ -507,5 +516,7 @@
 					'<p>'.$post_format_field.'</p>'.
 					'<p class="format_control control_no_xhtml">'.
-					'<a id="convert-xhtml" class="button'.($post_id && $post_format != 'wiki' ? ' hide' : '').'" href="post.php?id='.$post_id.'&amp;xconv=1">'.
+					'<a id="convert-xhtml" class="button'.($post_id && $post_format != 'wiki' ? ' hide' : '').'" href="'.
+					$core->adminurl->get('admin.post',array('id'=> $post_id,'xconv'=> '1')).
+					'">'.
 					__('Convert to XHTML').'</a></p></div>')),
 		'metas-box' => array(
@@ -604,5 +615,5 @@
 
 	echo '<div class="multi-part" title="'.($post_id ? __('Edit entry') : __('New entry')).'" id="edit-entry">';
-	echo '<form action="post.php" method="post" id="entry-form">';
+	echo '<form action="'.$core->adminurl->get('admin.post').'" method="post" id="entry-form">';
 	echo '<div id="entry-wrapper">';
 	echo '<div id="entry-content"><div class="constrained">';
@@ -682,5 +693,5 @@
 
 	if ($has_action) {
-		echo '<form action="post.php" id="form-comments" method="post">';
+		echo '<form action="'.$core->adminurl->get('admin.post').'" id="form-comments" method="post">';
 	}
 
Index: inc/admin/lib.dc.adminurl.php
===================================================================
--- inc/admin/lib.dc.adminurl.php	(revision 2708)
+++ inc/admin/lib.dc.adminurl.php	(revision 2708)
@@ -0,0 +1,90 @@
+<?php
+# -- BEGIN LICENSE BLOCK ---------------------------------------
+#
+# This file is part of Dotclear 2.
+#
+# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
+# Licensed under the GPL version 2.0 license.
+# See LICENSE file or
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+#
+# -- END LICENSE BLOCK -----------------------------------------
+if (!defined('DC_RC_PATH')) { return; }
+
+
+/**
+@ingroup DC_CORE
+@nosubgrouping
+@brief URL Handler for admin urls
+
+*/
+class dcAdminURL
+{
+	/** @var dcCore dcCore instance */
+	protected $core;
+	protected $urls;
+
+	/**
+	Inits dcAdminURL object
+
+	@param	core		<b>dcCore</b>		Dotclear core reference
+	*/
+	public function __construct($core)
+	{
+		$this->core = $core;
+		$this->urls = new ArrayObject();
+	}
+
+	/**
+	 * Registers a new url
+	 * @param  string $name   the url name
+	 * @param  string $url    url value
+	 * @param  array  $params query string params (optional)
+	 */
+	public function register ($name,$url,$params = array()) {
+		$this->urls[$name] = array('url' => $url, 'qs' => $params);
+	}
+
+	/**
+	 * Registers a new url as a copy of an existing one
+	 * @param  string $name   url name
+	 * @param  streing $orig   url to copy information from
+	 * @param  array  $params extra parameters to add
+	 * @param  string $newurl new url if different from the original
+	 */
+	public function registercopy ($name,$orig,$params = array(),$newurl='') {
+		if (!isset($this->urls[$orig])) {
+			throw new exception ('Unknown URL handler for '.$orig);
+		}
+		$url = $this->urls[$orig];
+		$url['qs'] = array_merge($url['qs'],$params);
+		if ($newurl != '') {
+			$url['url'] = $newurl;
+		}
+		$this->urls[$name] = $url;
+
+	}
+
+	/**
+	 * retrieves a URL given its name, and optional parameters
+	 *
+	 * @param  string $name      URL Name
+	 * @param  array  $params    query string parameters, given as an associative array
+	 * @param  string $separator separator to use between QS parameters
+	 * @return string            the forged url
+	 */
+	public function get ($name,$params=array(),$separator='&amp;') {
+		if (!isset($this->urls[$name])) {
+			throw new exception ('Unknown URL handler for '.$name);
+		}
+		$url = $this->urls[$name];
+		$p = array_merge($url['qs'],$params);
+		$u = $url['url'];
+		if (!empty($p)) {
+			$u .= '?'.http_build_query($p,'',$separator);
+		}
+		return $u;
+	}
+
+}
+
Index: inc/admin/prepend.php
===================================================================
--- inc/admin/prepend.php	(revision 2566)
+++ inc/admin/prepend.php	(revision 2708)
@@ -174,4 +174,26 @@
 */
 }
+
+$core->adminurl = new dcAdminURL($core);
+
+$core->adminurl->register('admin.posts','posts.php');
+$core->adminurl->register('admin.post','post.php');
+$core->adminurl->register('admin.blog.theme','blog_theme.php');
+$core->adminurl->register('admin.blog.pref','blog_pref.php');
+$core->adminurl->register('admin.blogs','blogs.php');
+$core->adminurl->register('admin.categories','categories.php');
+$core->adminurl->register('admin.category','category.php');
+$core->adminurl->register('admin.comments','comments.php');
+$core->adminurl->register('admin.comments','comment.php');
+$core->adminurl->register('admin.help','help.php');
+$core->adminurl->register('admin.home','index.php');
+$core->adminurl->register('admin.langs','langs.php');
+$core->adminurl->register('admin.media','media.php');
+$core->adminurl->register('admin.media_item','media_item.php');
+$core->adminurl->register('admin.plugins','plugins.php');
+$core->adminurl->register('admin.plugin','plugin.php');
+$core->adminurl->register('admin.user.preferences','preferences.php');
+$core->adminurl->register('admin.user','user.php');
+$core->adminurl->register('admin.users','users.php');
 
 if ($core->auth->userID() && $core->blog !== null)
@@ -278,2 +300,3 @@
 	}
 }
+
Index: inc/core/class.dc.modules.php
===================================================================
--- inc/core/class.dc.modules.php	(revision 2566)
+++ inc/core/class.dc.modules.php	(revision 2708)
@@ -131,4 +131,5 @@
 			if ($ns == 'admin') {
 				$this->loadModuleL10Nresources($id,$lang);
+				$this->core->adminurl->register('admin.plugin.'.$id,'plugin.php',array('p'=>$id));
 			}
 			$this->loadNsFile($id,$ns);
Index: inc/prepend.php
===================================================================
--- inc/prepend.php	(revision 2710)
+++ inc/prepend.php	(revision 2711)
@@ -76,4 +76,5 @@
 $__autoload['context']               = dirname(__FILE__).'/public/lib.tpl.context.php';
 $__autoload['dcUrlHandlers']         = dirname(__FILE__).'/public/lib.urlhandlers.php';
+$__autoload['dcAdminURL']            = dirname(__FILE__).'/admin/lib.dc.adminurl.php';
 $__autoload['dcPostsActionsPage']    = dirname(__FILE__).'/admin/actions/class.dcactionposts.php';
 $__autoload['dcCommentsActionsPage'] = dirname(__FILE__).'/admin/actions/class.dcactioncomments.php';
