diff -rupN gallery23.1/modules/core/classes/GalleryDataItem.class gallery2/modules/core/classes/GalleryDataItem.class
--- gallery23.1/modules/core/classes/GalleryDataItem.class	2009-12-26 16:47:35.700548434 +0530
+++ gallery2/modules/core/classes/GalleryDataItem.class	2009-12-28 15:24:47.096394289 +0530
@@ -374,12 +374,12 @@ class GalleryDataItem extends GalleryIte
 	    $target = $this;
 	}
 
-	list ($ret, $containerPath) = $target->fetchContainerPath();
+	list ($ret, $containerPath) = $target->fetchContainerPath(false);
 	if ($ret) {
 	    return array($ret, null);
 	}
 
-	return array(null, $containerPath . $target->getPathComponent());
+	return array(null, $containerPath . $target->getPathComponent(false));
     }
 
     /**
diff -rupN gallery23.1/modules/core/classes/GalleryFileSystemEntity.class gallery2/modules/core/classes/GalleryFileSystemEntity.class
--- gallery23.1/modules/core/classes/GalleryFileSystemEntity.class	2009-12-26 16:47:35.710557807 +0530
+++ gallery2/modules/core/classes/GalleryFileSystemEntity.class	2009-12-28 15:35:52.826393699 +0530
@@ -59,7 +59,11 @@ class GalleryFileSystemEntity extends Ga
      */
     var $pathComponent;
 
-
+    /**
+	 * language specific path component, introduced for the multilanguage URL feature
+	 */
+    var $pathLangComponent;
+	
     /**
      * Create a new instance of this FileSystemEntity in the persistent store.
      * Let the parent do its work, then add any initialization specific to this class.
@@ -271,10 +275,13 @@ class GalleryFileSystemEntity extends Ga
      *
      * @return array GalleryStatus a status code,
      *               string a path where children can store their data files
-     */
-    function fetchContainerPath() {
+     *               
+     * $multilang is introduced for multlanguage URL feature,
+     * if the value is TRUE returns the multilang path, false returns the default path,
+     * which is required for physical path of the file */
+    function fetchContainerPath($multilang=true) {
 	if ($this->isContainer()) {
-	    list ($ret, $path) = $this->fetchPath();
+	    list ($ret, $path) = $this->fetchPath($multilang);
 	    if ($ret) {
 		return array($ret, null);
 	    }
@@ -286,7 +293,7 @@ class GalleryFileSystemEntity extends Ga
 	    }
 
 	    if (isset($parent)) {
-		list ($ret, $path) = $parent->fetchContainerPath();
+		list ($ret, $path) = $parent->fetchContainerPath($multilang);
 		if ($ret) {
 		    return array($ret, null);
 		}
@@ -312,8 +319,11 @@ class GalleryFileSystemEntity extends Ga
      *
      * @return array GalleryStatus a status code,
      *         array path component names
-     */
-    function fetchLogicalPath() {
+     *
+     * $multilang is introduced for multlanguage URL feature,
+     * if the value is TRUE returns the multilang path, false returns the default path,
+     * which is required for physical path of the file */
+    function fetchLogicalPath($multilang=true) {
 	$parentId = $this->getParentId();
 	if (!empty($parentId)) {
 	    list ($ret, $parent) = $this->fetchParent();
@@ -321,7 +331,7 @@ class GalleryFileSystemEntity extends Ga
 		return array($ret, null);
 	    }
 
-	    list ($ret, $parentPath) = $parent->fetchLogicalPath();
+	    list ($ret, $parentPath) = $parent->fetchLogicalPath($multilang);
 	    if ($ret) {
 		return array($ret, null);
 	    }
@@ -329,7 +339,7 @@ class GalleryFileSystemEntity extends Ga
 	    $parentPath = '';
 	}
 
-	$path = $parentPath . $this->getPathComponent();
+	$path = $parentPath . $this->getPathComponent($multilang);
 	if ($this->isContainer()) {
 	    $path .= '/';
 	}
@@ -343,18 +353,18 @@ class GalleryFileSystemEntity extends Ga
      *
      * @return array a GalleryStatus status, string a path
      */
-    function fetchPath() {
+    function fetchPath($multilang=true) {
 	global $gallery;
 	$absolutePath = $gallery->getConfig('data.gallery.albums');
 
 	if ($this->isLinked()) {
 	    $linkedEntity = $this->getLinkedEntity();
-	    list ($ret, $logicalPath) = $linkedEntity->fetchLogicalPath();
+	    list ($ret, $logicalPath) = $linkedEntity->fetchLogicalPath($multilang);
 	    if ($ret) {
 		return array($ret, null);
 	    }
 	} else {
-	    list ($ret, $logicalPath) = $this->fetchLogicalPath();
+	    list ($ret, $logicalPath) = $this->fetchLogicalPath($multilang);
 	    if ($ret) {
 		return array($ret, null);
 	    }
@@ -385,12 +395,22 @@ class GalleryFileSystemEntity extends Ga
 	return 'GalleryFileSystemEntity';
     }
 
-    function getPathComponent() {
-	return $this->pathComponent;
+    function getPathComponent($multilang=true) {
+		if ($multilang && !empty($this->pathLangComponent)) {
+			return $this->pathLangComponent;
+		}
+		else {
+			return $this->pathComponent;
+		}
     }
 
-    function setPathComponent($pathComponent) {
-	$this->pathComponent = $pathComponent;
-    }
+    function setPathComponent($pathComponent, $multilang=false) {
+		if ($multilang){
+		   $this->pathLangComponent = $pathComponent;
+		}
+		else{
+			$this->pathComponent = $pathComponent;
+		}
+	}
 }
 ?>
diff -rupN gallery23.1/modules/multilang/classes/GalleryStorage/schema.tpl gallery2/modules/multilang/classes/GalleryStorage/schema.tpl
--- gallery23.1/modules/multilang/classes/GalleryStorage/schema.tpl	2009-12-26 16:47:35.620564109 +0530
+++ gallery2/modules/multilang/classes/GalleryStorage/schema.tpl	2009-12-26 11:35:57.245094057 +0530
@@ -6,6 +6,7 @@ CREATE TABLE DB_TABLE_PREFIXMultiLangIte
  DB_COLUMN_PREFIXtitle varchar(128),
  DB_COLUMN_PREFIXsummary varchar(255),
  DB_COLUMN_PREFIXdescription text,
+ DB_COLUMN_PREFIXpathComponent varchar(128),
  PRIMARY KEY(DB_COLUMN_PREFIXitemId, DB_COLUMN_PREFIXlanguage)
 ) DB_TABLE_TYPE
 /*!40100 DEFAULT CHARACTER SET utf8 */;
@@ -23,7 +24,8 @@ CREATE TABLE DB_TABLE_PREFIXMultiLangIte
  DB_COLUMN_PREFIXlanguage VARCHAR(32) NOT NULL,
  DB_COLUMN_PREFIXtitle VARCHAR(128),
  DB_COLUMN_PREFIXsummary VARCHAR(255),
- DB_COLUMN_PREFIXdescription text
+ DB_COLUMN_PREFIXdescription text,
+ DB_COLUMN_PREFIXpathComponent VARCHAR(128)
 );
 
 ALTER TABLE DB_TABLE_PREFIXMultiLangItemMap ADD PRIMARY KEY (DB_COLUMN_PREFIXitemId, DB_COLUMN_PREFIXlanguage);
@@ -41,7 +43,8 @@ CREATE TABLE DB_TABLE_PREFIXMultiLangIte
  DB_COLUMN_PREFIXlanguage VARCHAR2(32) NOT NULL,
  DB_COLUMN_PREFIXtitle VARCHAR2(128),
  DB_COLUMN_PREFIXsummary VARCHAR2(255),
- DB_COLUMN_PREFIXdescription VARCHAR2(4000)
+ DB_COLUMN_PREFIXdescription VARCHAR2(4000),
+ DB_COLUMN_PREFIXpathComponent VARCHAR2(128)
 );
 
 ALTER TABLE DB_TABLE_PREFIXMultiLangItemMap
@@ -61,7 +64,8 @@ CREATE TABLE DB_TABLE_PREFIXMultiLangIte
  DB_COLUMN_PREFIXlanguage VARCHAR(32) NOT NULL,
  DB_COLUMN_PREFIXtitle VARCHAR(128),
  DB_COLUMN_PREFIXsummary VARCHAR(255),
- DB_COLUMN_PREFIXdescription VARCHAR(10000)
+ DB_COLUMN_PREFIXdescription VARCHAR(10000),
+ DB_COLUMN_PREFIXpathComponent VARCHAR(128)
 );
 
 ALTER TABLE DB_TABLE_PREFIXMultiLangItemMap ADD PRIMARY KEY (DB_COLUMN_PREFIXitemId, DB_COLUMN_PREFIXlanguage);
@@ -79,7 +83,8 @@ CREATE TABLE DB_TABLE_PREFIXMultiLangIte
  DB_COLUMN_PREFIXlanguage NVARCHAR(32) NOT NULL,
  DB_COLUMN_PREFIXtitle NVARCHAR(128) NULL,
  DB_COLUMN_PREFIXsummary NVARCHAR(255) NULL,
- DB_COLUMN_PREFIXdescription NVARCHAR(MAX) NULL
+ DB_COLUMN_PREFIXdescription NVARCHAR(MAX) NULL,
+ DB_COLUMN_PREFIXpathComponent NVARCHAR(128) NULL
 );
 
 ALTER TABLE DB_TABLE_PREFIXMultiLangItemMap ADD PRIMARY KEY (DB_COLUMN_PREFIXitemId, DB_COLUMN_PREFIXlanguage);
@@ -97,7 +102,8 @@ CREATE TABLE DB_TABLE_PREFIXMultiLangIte
  DB_COLUMN_PREFIXlanguage TEXT NOT NULL,
  DB_COLUMN_PREFIXtitle TEXT,
  DB_COLUMN_PREFIXsummary TEXT,
- DB_COLUMN_PREFIXdescription TEXT
+ DB_COLUMN_PREFIXdescription TEXT,
+ DB_COLUMN_PREFIXpathComponent TEXT
 );
 
 CREATE UNIQUE INDEX DB_TABLE_PREFIXMultiLangItemMap_pkey ON DB_TABLE_PREFIXMultiLangItemMap(DB_COLUMN_PREFIXitemId, DB_COLUMN_PREFIXlanguage);
diff -rupN gallery23.1/modules/multilang/classes/Maps.inc gallery2/modules/multilang/classes/Maps.inc
--- gallery23.1/modules/multilang/classes/Maps.inc	2009-12-26 16:47:35.620564109 +0530
+++ gallery2/modules/multilang/classes/Maps.inc	2009-12-26 11:35:57.245094057 +0530
@@ -1,4 +1,4 @@
 <?php
 /* This file is automatically generated from Maps.xml by lib/tools/bin/generate-maps.php */
-$mapInfo['MultiLangItemMap'] = array('itemId'=>array('type'=>STORAGE_TYPE_INTEGER,'size'=>STORAGE_SIZE_MEDIUM,'notNull'=>true),'language'=>array('type'=>STORAGE_TYPE_STRING,'size'=>STORAGE_SIZE_SMALL,'notNull'=>true),'title'=>array('type'=>STORAGE_TYPE_STRING,'size'=>STORAGE_SIZE_MEDIUM),'summary'=>array('type'=>STORAGE_TYPE_STRING,'size'=>STORAGE_SIZE_LARGE),'description'=>array('type'=>STORAGE_TYPE_TEXT,'size'=>STORAGE_SIZE_SMALL));
+$mapInfo['MultiLangItemMap'] = array('itemId'=>array('type'=>STORAGE_TYPE_INTEGER,'size'=>STORAGE_SIZE_MEDIUM,'notNull'=>true),'language'=>array('type'=>STORAGE_TYPE_STRING,'size'=>STORAGE_SIZE_SMALL,'notNull'=>true),'title'=>array('type'=>STORAGE_TYPE_STRING,'size'=>STORAGE_SIZE_MEDIUM),'summary'=>array('type'=>STORAGE_TYPE_STRING,'size'=>STORAGE_SIZE_LARGE),'description'=>array('type'=>STORAGE_TYPE_TEXT,'size'=>STORAGE_SIZE_SMALL), 'pathComponent'=>array('type'=>STORAGE_TYPE_STRING,'size'=>STORAGE_SIZE_MEDIUM));
 ?>
diff -rupN gallery23.1/modules/multilang/classes/Maps.xml gallery2/modules/multilang/classes/Maps.xml
--- gallery23.1/modules/multilang/classes/Maps.xml	2009-12-26 16:47:35.620564109 +0530
+++ gallery2/modules/multilang/classes/Maps.xml	2009-12-26 11:35:57.285105567 +0530
@@ -32,6 +32,11 @@
       <member-type>TEXT</member-type>
       <member-size>SMALL</member-size>
     </member>
+    <member>
+      <member-name>pathComponent</member-name>
+      <member-type>STRING</member-type>
+      <member-size>MEDIUM</member-size>
+    </member>
     <key primary="true">
       <member-name>itemId</member-name>
       <member-name>language</member-name>
diff -rupN gallery23.1/modules/multilang/classes/MultilangExtHelper.class gallery2/modules/multilang/classes/MultilangExtHelper.class
--- gallery23.1/modules/multilang/classes/MultilangExtHelper.class	1970-01-01 05:30:00.000000000 +0530
+++ gallery2/modules/multilang/classes/MultilangExtHelper.class	2009-12-26 15:45:19.871796636 +0530
@@ -0,0 +1,122 @@
+<?php
+/*
+ * Gallery - a web based photo album viewer and editor
+ * Copyright (C) 2000-2008 Bharat Mediratta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+/**
+ * This class provides basic URL keyword functions
+ * @package Multilang
+ * @subpackage Classes
+ * @author gopu <gopo@mywingsoflove.com>
+ * @version $Revision: 17581 $
+ * @static
+ */
+class MultilangExtHelper {
+
+    /**
+     * This is an onLoad function called by RewriteUrlGenerator::init if there's a path keyword
+     * that needs to be parsed to an itemId. Used by other modules that has %path%.
+     *
+     * @return GalleryStatus a status code
+     */
+    function fetchItemIdByPath($path) {
+	global $gallery;
+	if (empty($path)) {
+	    return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER), null);
+	}
+
+	list ($ret, $rootId) = GalleryCoreApi::getPluginParameter('module', 'core', 'id.rootAlbum');
+	if ($ret) {
+	    return array($ret, null);
+	}
+	$rootId = (int)$rootId;
+
+	if ($path == '/') {
+	    return array(null, $rootId);
+	}
+
+	$currentId = $rootId;
+	GalleryCoreApi::requireOnce(
+	    'modules/core/classes/helpers/GalleryFileSystemEntityHelper_simple.class');
+	
+	foreach (preg_split('|/|', $path, -1, PREG_SPLIT_NO_EMPTY) as $pathComponent) {
+	    $curId = $currentId;
+	    list ($ret, $currentId) =
+		GalleryCoreApi::fetchChildIdByPathComponent($currentId, $pathComponent);
+	    if ($ret)
+	    {
+	        $currentId = $curId;
+		list ($ret, $currentId) =
+		    MultilangExtHelper::fetchChildIdByPathComponent($currentId, $pathComponent);
+		if ($ret) {
+		    return array($ret, null);
+		}
+	    }
+	}
+
+	return array(null, $currentId);
+    }
+    
+    function fetchChildIdByPathComponent($parentId, $pathComponent) {
+	global $gallery;
+
+	if (empty($parentId) || empty($pathComponent)) {
+	    return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER),
+			 null);
+	}
+
+	$storage =& $gallery->getStorage();
+
+	$query = '
+	SELECT
+	  [GalleryMultiLangItemMap::itemId]
+	FROM
+	  [GalleryMultiLangItemMap], [GalleryChildEntity]
+	WHERE
+	  [GalleryChildEntity::parentId] = ?
+	  AND
+	  [GalleryChildEntity::id] = [GalleryMultiLangItemMap::itemId]
+	  AND
+	  [GalleryMultiLangItemMap::pathComponent] = ?
+	';
+	$data = array();
+	$data[] = (int)$parentId;
+	$data[] = $pathComponent;
+
+	list ($ret, $searchResults) = $gallery->search($query, $data);
+	if ($ret) {
+	    return array($ret, null);
+	}
+
+	if ($searchResults->resultCount() == 0) {
+	    return array(GalleryCoreApi::error(ERROR_MISSING_OBJECT, __FILE__, __LINE__,
+					      "Parent $parentId path $pathComponent"), null);
+	}
+
+	if ($searchResults->resultCount() > 1) {
+	    return array(GalleryCoreApi::error(ERROR_COLLISION), null);
+	}
+
+	$data = array();
+	$result = $searchResults->nextResult();
+	$targetId = (int)$result[0];
+
+	return array(null, $targetId);
+    }
+}
+?>
diff -rupN gallery23.1/modules/multilang/classes/MultiLangHelper.class gallery2/modules/multilang/classes/MultiLangHelper.class
--- gallery23.1/modules/multilang/classes/MultiLangHelper.class	2009-12-26 16:47:35.620564109 +0530
+++ gallery2/modules/multilang/classes/MultiLangHelper.class	2009-12-28 15:40:18.756410644 +0530
@@ -37,7 +37,7 @@ class MultiLangHelper {
      */
     function getItemData($itemId) {
 	list ($ret, $searchResults) = GalleryCoreApi::getMapEntry('MultiLangItemMap',
-	    array('language', 'title', 'summary', 'description'),
+	    array('language', 'title', 'summary', 'description', 'pathComponent'),
 	    array('itemId' => (int)$itemId));
 	if ($ret) {
 	    return array($ret, null);
@@ -46,7 +46,7 @@ class MultiLangHelper {
 	$data = array();
 	while ($result = $searchResults->nextResult()) {
 	    $data[$result[0]] = array('title' => $result[1], 'summary' => $result[2],
-				      'description' => $result[3]);
+				      'description' => $result[3], 'pathComponent' => $result[4]);
 	}
 	return array(null, $data);
     }
@@ -61,14 +61,14 @@ class MultiLangHelper {
      * @param string $description (optional)
      * @return GalleryStatus a status code
      */
-    function setItemData($item, $language, $title=null, $summary=null, $description=null) {
+    function setItemData($item, $language, $title=null, $summary=null, $description=null, $pathComponent=null) {
 	$itemId = $item->getId();
 	list ($ret, $data) = MultiLangHelper::getItemData($itemId);
 	if ($ret) {
 	    return $ret;
 	}
 
-	if (empty($title) && empty($summary) && empty($description)) {
+	if (empty($title) && empty($summary) && empty($description) && empty($pathComponent)) {
 	    /* Remove data for this item/language (if there is any to remove) */
 	    if (isset($data[$language])) {
 		$ret = GalleryCoreApi::removeMapEntry(
@@ -101,7 +101,7 @@ class MultiLangHelper {
 		$ret = GalleryCoreApi::updateMapEntry(
 		    'MultiLangItemMap',
 		    array('itemId' => $itemId, 'language' => $language),
-		    array('title' => $title, 'summary' => $summary, 'description' => $description));
+		    array('title' => $title, 'summary' => $summary, 'description' => $description, 'pathComponent' => $pathComponent));
 		if ($ret) {
 		    return $ret;
 		}
@@ -109,7 +109,7 @@ class MultiLangHelper {
 		$ret = GalleryCoreApi::addMapEntry(
 		    'MultiLangItemMap',
 		    array('itemId' => $itemId, 'language' => $language,
-			  'title' => $title, 'summary' => $summary, 'description' => $description));
+			  'title' => $title, 'summary' => $summary, 'description' => $description, 'pathComponent' => $pathComponent));
 		if ($ret) {
 		    return $ret;
 		}
@@ -168,6 +168,7 @@ class MultiLangHelper {
 	    $item->setTitle($data[$language]['title']);
 	    $item->setSummary($data[$language]['summary']);
 	    $item->setDescription($data[$language]['description']);
+	    $item->setPathComponent($data[$language]['pathComponent'], true);
 	}
 
 	return null;
diff -rupN gallery23.1/modules/multilang/MultiLangItemEdit.inc gallery2/modules/multilang/MultiLangItemEdit.inc
--- gallery23.1/modules/multilang/MultiLangItemEdit.inc	2009-12-26 16:47:35.620564109 +0530
+++ gallery2/modules/multilang/MultiLangItemEdit.inc	2009-12-26 11:35:57.285105567 +0530
@@ -46,7 +46,14 @@ class MultiLangItemEdit extends ItemEdit
 
 	    if (($item->getId() == $rootAlbumId) && empty($form['title'])) {
 		$error[] = 'form[error][title][missingRootTitle]';
-	    } else {
+	    }
+	    else if (empty($form['pathComponent'])){
+		$error[] = 'form[error][pathComponent][missing]';
+	    }
+	    else if (!$gallery->getPlatform()->isLegalPathComponent($form['pathComponent'], true)) {
+		$error[] = 'form[error][pathComponent][invalid]';
+	    }
+	    else {
 		list ($ret, $markup) =
 		    GalleryCoreApi::getPluginParameter('module', 'core', 'misc.markup');
 		if ($ret) {
@@ -60,7 +67,7 @@ class MultiLangItemEdit extends ItemEdit
 		}
 
 		$ret = MultiLangHelper::setItemData($item, $form['language'],
-			$form['title'], $form['summary'], $form['description']);
+			$form['title'], $form['summary'], $form['description'], $form['pathComponent']);
 		if ($ret) {
 		    return array($ret, null, null, null);
 		}
@@ -94,6 +101,7 @@ class MultiLangItemEdit extends ItemEdit
 	$form['mainTitle'] = $item->getTitle();
 	$form['mainSummary'] = $item->getSummary();
 	$form['mainDescription'] = $item->getDescription();
+	$form['mainPathComponent'] = $item->getPathComponent();
 	list ($ret, $form['languageData']) = MultiLangHelper::getItemData($item->getId());
 	if ($ret) {
 	    return array($ret, null, null);
@@ -106,6 +114,7 @@ class MultiLangItemEdit extends ItemEdit
 	    $form['languageData'][$form['language']]['title'] = $form['title'];
 	    $form['languageData'][$form['language']]['summary'] = $form['summary'];
 	    $form['languageData'][$form['language']]['description'] = $form['description'];
+	    $form['languageData'][$form['language']]['pathComponent'] = $form['pathComponent'];
 	}
 
 	$supportedLanguages = GalleryCoreApi::getSupportedLanguages();
diff -rupN gallery23.1/modules/multilang/templates/MultiLangItemEdit.tpl gallery2/modules/multilang/templates/MultiLangItemEdit.tpl
--- gallery23.1/modules/multilang/templates/MultiLangItemEdit.tpl	2009-12-26 16:47:35.620564109 +0530
+++ gallery2/modules/multilang/templates/MultiLangItemEdit.tpl	2009-12-26 11:35:57.315088987 +0530
@@ -17,6 +17,8 @@ function pick(idx) {
   o.value = document.getElementById('sum_' + idx).value;
   o = document.getElementById('description');
   o.value = document.getElementById('dsc_' + idx).value;
+  o = document.getElementById('pathComponent');
+  o.value = document.getElementById('path_' + idx).value;
   index = idx;
   isChanged = 0;
 }
@@ -30,10 +32,12 @@ function changed() { isChanged = 1; }
 <input id="ttl_{$idx}" type="hidden" value="{$form.languageData[$language].title}"/>
 <input id="sum_{$idx}" type="hidden" value="{$form.languageData[$language].summary}"/>
 <input id="dsc_{$idx}" type="hidden" value="{$form.languageData[$language].description}"/>
+<input id="path_{$idx}" type="hidden" value="{$form.languageData[$language].pathComponent}"/>
 {else}
 <input id="ttl_{$idx}" type="hidden" value=""/>
 <input id="sum_{$idx}" type="hidden" value=""/>
 <input id="dsc_{$idx}" type="hidden" value=""/>
+<input id="path_{$idx}" type="hidden" value=""/>
 {/if}
 {/foreach}
 </div>
@@ -49,6 +53,9 @@ function changed() { isChanged = 1; }
     <td> {g->text text="Title"} </td>
     <td> {$form.mainTitle|markup} </td>
   </tr><tr>
+    <td> {g->text text="pathComponent"} </td>
+    <td> {$form.mainPath|markup} </td>
+  </tr><tr>
     <td> {g->text text="Summary"} </td>
     <td> {$form.mainSummary|markup} </td>
   </tr><tr>
@@ -78,6 +85,20 @@ function changed() { isChanged = 1; }
     {g->text text="The root album must have a title."}
   </div>
   {/if}
+  
+  <h4> {g->text text="URL"} </h4>
+  {strip}
+  {foreach from=$ItemAdmin.parents item=parent}
+  {if empty($parent.parentId)}
+  /
+  {else}
+  {$parent.pathComponent}/
+  {/if}
+  {/foreach}
+  {/strip}
+  
+  <input type="text" id="pathComponent" size="40" onchange="changed()"
+   name="{g->formVar var="form[pathComponent]"}" value=""/>
 
   <h4> {g->text text="Summary"} </h4>
   <p class="giDescription">
diff -rupN gallery23.1/modules/rewrite/classes/RewriteSimpleHelper.class gallery2/modules/rewrite/classes/RewriteSimpleHelper.class
--- gallery23.1/modules/rewrite/classes/RewriteSimpleHelper.class	2009-12-26 16:47:35.640544651 +0530
+++ gallery2/modules/rewrite/classes/RewriteSimpleHelper.class	2009-12-26 11:05:09.355090161 +0530
@@ -42,7 +42,9 @@ class RewriteSimpleHelper {
 		$path = substr($path, 0, -5);
 	    }
 
-	    list ($ret, $itemId) = GalleryCoreApi::fetchItemIdByPath($path);
+	    GalleryCoreApi::requireOnce(
+	    'modules/multilang/classes/MultilangExtHelper.class');
+        list ($ret, $itemId) = MultilangExtHelper::fetchItemIdByPath($path);
 	    if ($ret) {
 		return $ret;
 	    }

