diff --git a/3rdparty/when/When.php b/3rdparty/when/When.php
index f8bb9db0f670e94f117db12e9a48329233534863..d54f296ed610b997c15ab7196ddff857d66ce462 100755
--- a/3rdparty/when/When.php
+++ b/3rdparty/when/When.php
@@ -621,7 +621,13 @@ class When
 		
 		if($interval == "month")
 		{
-			$this->try_date->modify('+1 month');
+			
+			$this->try_date->modify('first day of next month');
+			if((int) date('t', $this->try_date->format('U')) > (int) $this->start_date->format('j')){
+				$this->try_date->modify('+' . (int) $this->start_date->format('j') - 1 . ' day'); 
+			}else{
+				$this->try_date->modify('+' . (int) date('t', $this->try_date->format('U')) - 1 . ' day'); 
+			}
 		}
 		else
 		{
diff --git a/apps/admin_dependencies_chk/settings.php b/apps/admin_dependencies_chk/settings.php
index 34028056dbea1457c164b8de30c6da17d2617aad..ce90dd604ca46d549dbbcab54a2f921e7ed89f81 100644
--- a/apps/admin_dependencies_chk/settings.php
+++ b/apps/admin_dependencies_chk/settings.php
@@ -44,12 +44,6 @@ $modules[] =array(
 	'modules'=> array('gallery'),
 	'message'=> $l->t('The php-gd module is needed to create thumbnails of your images'));
 
-$modules[] =array(
-	'status' => OC_Helper::canExecute("mp3info") ? 'ok' : 'warning',
-	'part'=> 'mp3info',
-	'modules'=> array('media'),
-	'message'=> $l->t('The program mp3info is useful to discover ID3 tags of your music files'));
-
 $modules[] =array(
 	'status' => function_exists("ldap_bind") ? 'ok' : 'error',
 	'part'=> 'php-ldap',
diff --git a/apps/calendar/l10n/xgettextfiles b/apps/calendar/l10n/xgettextfiles
index 27b8e457193f5c340125bcc3e4e17b9980abc10e..a8c2601045f2e6da215fdaef9a7a3621056000f7 100644
--- a/apps/calendar/l10n/xgettextfiles
+++ b/apps/calendar/l10n/xgettextfiles
@@ -8,4 +8,5 @@
 ../templates/part.eventform.php
 ../templates/part.import.php
 ../templates/part.newevent.php
-../templates/settings.php
\ No newline at end of file
+../templates/settings.php
+../templates/lAfix.php
\ No newline at end of file
diff --git a/apps/calendar/templates/calendar.php b/apps/calendar/templates/calendar.php
index 92c1b8a778a27ea41ef13a8b500f1c0aa0b3e1e3..50d3d70347a791716d8f1a090b281f6410ee39cc 100755
--- a/apps/calendar/templates/calendar.php
+++ b/apps/calendar/templates/calendar.php
@@ -25,6 +25,7 @@
 					$date = substr($data['startdate'], 0, 10);
 					list($year, $month, $day) = explode('-', $date);
 					echo '$(\'#calendar_holder\').fullCalendar(\'gotoDate\', ' . $year . ', ' . --$month . ', ' . $day . ');';
+					echo '$(\'#dialog_holder\').load(OC.filePath(\'calendar\', \'ajax\', \'editeventform.php\') + \'?id=\' +  ' . $_['showevent'] . ' , Calendar.UI.startEventDialog);';
 				}
 				?>
 				});
diff --git a/apps/calendar/templates/lAfix.php b/apps/calendar/templates/lAfix.php
new file mode 100644
index 0000000000000000000000000000000000000000..61025ae6dea4350de23fccbc9f7bf11b674c6429
--- /dev/null
+++ b/apps/calendar/templates/lAfix.php
@@ -0,0 +1,39 @@
+<?php
+$l->t('Sunday');
+$l->t('Monday');
+$l->t('Tuesday');
+$l->t('Wednesday');
+$l->t('Thursday');
+$l->t('Friday');
+$l->t('Saturday');
+$l->t('Sun.');
+$l->t('Mon.');
+$l->t('Tue.');
+$l->t('Wed.');
+$l->t('Thu.');
+$l->t('Fri.');
+$l->t('Sat.');
+$l->t('January');
+$l->t('February');
+$l->t('March');
+$l->t('April');
+$l->t('May');
+$l->t('June');
+$l->t('July');
+$l->t('August');
+$l->t('September');
+$l->t('October');
+$l->t('November');
+$l->t('December');
+$l->t('Jan.');
+$l->t('Feb.');
+$l->t('Mar.');
+$l->t('Apr.');
+$l->t('May.');
+$l->t('Jun.');
+$l->t('Jul.');
+$l->t('Aug.');
+$l->t('Sep.');
+$l->t('Oct.');
+$l->t('Nov.');
+$l->t('Dec.');
\ No newline at end of file
diff --git a/apps/gallery/ajax/cover.php b/apps/gallery/ajax/cover.php
index d83f4daaa52ef0f0fac5f6b58b4aef2e9f33ec0e..181a919375db977f3eb1d20604343648887e44c6 100644
--- a/apps/gallery/ajax/cover.php
+++ b/apps/gallery/ajax/cover.php
@@ -1,4 +1,26 @@
 <?php
+
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('../../../lib/base.php');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
diff --git a/apps/gallery/ajax/createAlbum.php b/apps/gallery/ajax/createAlbum.php
index 9413b54718abf46a9393ce957e6740182bb0b067..152f5834bcb4130d7f0f1db203c13f0aa521bbf0 100644
--- a/apps/gallery/ajax/createAlbum.php
+++ b/apps/gallery/ajax/createAlbum.php
@@ -1,4 +1,26 @@
 <?php
+
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('../../../lib/base.php');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
diff --git a/apps/gallery/ajax/galleryOp.php b/apps/gallery/ajax/galleryOp.php
index 8a006dda63700923886c192d44fc7e6d87292f75..3d1ed1f33cbc26e063be9ddc976e2d9efc144741 100644
--- a/apps/gallery/ajax/galleryOp.php
+++ b/apps/gallery/ajax/galleryOp.php
@@ -1,4 +1,26 @@
 <?
+
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('../../../lib/base.php');
 require_once(OC::$CLASSPATH['OC_Gallery_Album']);
 OC_JSON::checkLoggedIn();
diff --git a/apps/gallery/ajax/getAlbums.php b/apps/gallery/ajax/getAlbums.php
index e4736076fed346f5d30c4ea1d661b958f53f7551..9e9c6ef496c7b6a889db143a0ec1443da6d3341b 100644
--- a/apps/gallery/ajax/getAlbums.php
+++ b/apps/gallery/ajax/getAlbums.php
@@ -1,4 +1,26 @@
 <?php
+
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('../../../lib/base.php');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
diff --git a/apps/gallery/ajax/getCovers.php b/apps/gallery/ajax/getCovers.php
index db7c8e9fcdec977aff344fe630741e46a0dc7f8d..4db73d0fbf3594dd510da0566f308f912f719ba3 100644
--- a/apps/gallery/ajax/getCovers.php
+++ b/apps/gallery/ajax/getCovers.php
@@ -1,4 +1,26 @@
 <?php
+
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('../../../lib/base.php');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
diff --git a/apps/gallery/ajax/scanForAlbums.php b/apps/gallery/ajax/scanForAlbums.php
index b1f0a433a42c6906d1352a105df07b8162aca917..b8ed639d9dc20ee5da64b26b73050f428bf25b24 100644
--- a/apps/gallery/ajax/scanForAlbums.php
+++ b/apps/gallery/ajax/scanForAlbums.php
@@ -1,5 +1,26 @@
 <?php
 
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('../../../lib/base.php');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
diff --git a/apps/gallery/ajax/thumbnail.php b/apps/gallery/ajax/thumbnail.php
index d937691fa036607b94b8b4a80d2213a5964d872b..6d25c7a2536ad146f352e26b73cd67ea4d39b1ae 100644
--- a/apps/gallery/ajax/thumbnail.php
+++ b/apps/gallery/ajax/thumbnail.php
@@ -1,4 +1,26 @@
 <?php
+
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('../../../lib/base.php');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
diff --git a/apps/gallery/appinfo/app.php b/apps/gallery/appinfo/app.php
index 3a2dbcb43adca1d5e10f7e1739d80715804d5de7..9c665fd3500f34b6ffb3554a01d4a2ece3654cdf 100644
--- a/apps/gallery/appinfo/app.php
+++ b/apps/gallery/appinfo/app.php
@@ -1,4 +1,26 @@
 <?php
+
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 OC::$CLASSPATH['OC_Gallery_Album'] = 'apps/gallery/lib/album.php';
 OC::$CLASSPATH['OC_Gallery_Photo'] = 'apps/gallery/lib/photo.php';
 OC::$CLASSPATH['OC_Gallery_Scanner'] = 'apps/gallery/lib/scanner.php';
diff --git a/apps/gallery/appinfo/info.xml b/apps/gallery/appinfo/info.xml
index ba51bf0bd55f63e42d41db384bcd344cd3e9adb5..c275f39bb253c39a5772a2d05057d697427d01bf 100644
--- a/apps/gallery/appinfo/info.xml
+++ b/apps/gallery/appinfo/info.xml
@@ -6,6 +6,6 @@
 	<licence>AGPL</licence>
 	<author>Bartek Przybylski</author>
 	<require>2</require>
-	<description></description>
+	<description>Gallery application for ownCloud</description>
 	<default_enable/>
 </info>
diff --git a/apps/gallery/index.php b/apps/gallery/index.php
index 0cd795bac0137d470dae0bca4d9e4d05e0927801..822a5b8e143ec8d595837dc8b97177287064e612 100644
--- a/apps/gallery/index.php
+++ b/apps/gallery/index.php
@@ -1,4 +1,26 @@
 <?php
+
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('../../lib/base.php');
 
 OC_Util::checkLoggedIn();
diff --git a/apps/gallery/lib/album.php b/apps/gallery/lib/album.php
index 98876b891c592b57c3505a60bee0f06495c49960..a94eff3acd7864abf4907883cd6a2b94672e7616 100644
--- a/apps/gallery/lib/album.php
+++ b/apps/gallery/lib/album.php
@@ -1,5 +1,26 @@
 <?php
 
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 class OC_Gallery_Album {
 	public static function create($owner, $name, $path){
 		$stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_albums (uid_owner, album_name, album_path) VALUES (?, ?, ?)');
diff --git a/apps/gallery/lib/hooks_handlers.php b/apps/gallery/lib/hooks_handlers.php
index 1bddaf363e3531061094db02182486f5784c573d..65f3faaeeaf3f57559289a9797c2d1e46b0b0e1c 100644
--- a/apps/gallery/lib/hooks_handlers.php
+++ b/apps/gallery/lib/hooks_handlers.php
@@ -1,5 +1,26 @@
 <?php
 
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 OC_Hook::connect("OC_Filesystem", "post_write", "OC_Gallery_Hooks_Handlers", "addPhotoFromPath");
 OC_Hook::connect("OC_Filesystem", "delete", "OC_Gallery_Hooks_Handlers", "removePhoto");
 OC_Hook::connect("OC_Filesystem", "post_rename", "OC_Gallery_Hooks_Handlers", "renamePhoto");
@@ -11,6 +32,7 @@ class OC_Gallery_Hooks_Handlers {
   private static $APP_TAG = "Gallery";
 
   private static function isPhoto($filename) {
+    OC_Log::write(self::$APP_TAG, "Checking file ".$filename." with mimetype ".OC_Filesystem::getMimeType($filename), OC_Log::DEBUG);
     if (substr(OC_Filesystem::getMimeType($filename), 0, 6) == "image/")
       return 1;
     return 0;
@@ -18,7 +40,8 @@ class OC_Gallery_Hooks_Handlers {
 
   private static function createAlbum($path) {
     $new_album_name = trim(str_replace('/', '.', $path), '.');
-    if ($new_album_name == '') $new_album_name = 'main';
+    if ($new_album_name == '')
+      $new_album_name = 'main';
 
     OC_Log::write(self::$APP_TAG, 'Creating new album '.$new_album_name, OC_Log::DEBUG);
     OC_Gallery_Album::create(OC_User::getUser(), $new_album_name, $path);
@@ -31,6 +54,7 @@ class OC_Gallery_Hooks_Handlers {
     $fullpath = $params['path'];
     OC_Log::write(self::$APP_TAG, 'Adding file with path '. $fullpath, OC_Log::DEBUG);
     $path = substr($fullpath, 0, strrpos($fullpath, '/'));
+    if ($path == '') $path = '/';
     $album = OC_Gallery_Album::find(OC_User::getUser(), null, $path);
 
     if ($album->numRows() == 0) {
@@ -55,7 +79,10 @@ class OC_Gallery_Hooks_Handlers {
   public static function renamePhoto($params) {
     $olddir = substr($params['oldpath'], 0, strrpos($params['oldpath'], '/'));
     $newdir = substr($params['newpath'], 0, strrpos($params['newpath'], '/'));
+    if ($olddir == '') $olddir = '/';
+    if ($newdir == '') $newdir = '/';
     if (!self::isPhoto($params['newpath'])) return;
+    OC_Log::write(self::$APP_TAG, 'Moving photo from '.$params['oldpath'].' to '.$params['newpath'], OC_Log::DEBUG);
     $album;
     $newAlbumId;
     $oldAlbumId;
diff --git a/apps/gallery/lib/images_utils.php b/apps/gallery/lib/images_utils.php
index cb46bf3f16093bbf66487502079561cacf5e5f56..0cfa52eb56431f8510d637882c0c93cda8c77e74 100644
--- a/apps/gallery/lib/images_utils.php
+++ b/apps/gallery/lib/images_utils.php
@@ -1,4 +1,26 @@
 <?php
+
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('../../../lib/base.php');
 OC_JSON::checkLoggedIn();
 OC_JSON::checkAppEnabled('gallery');
diff --git a/apps/gallery/lib/photo.php b/apps/gallery/lib/photo.php
index f8a640819a1fe15340fc731aabb6fd862a65d611..23887098e0fe87c5d2b27dc43cf933634550c0d8 100644
--- a/apps/gallery/lib/photo.php
+++ b/apps/gallery/lib/photo.php
@@ -1,5 +1,26 @@
 <?php
 
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 class OC_Gallery_Photo{
 	public static function create($albumId, $img){
 		$stmt = OC_DB::prepare('INSERT INTO *PREFIX*gallery_photos (album_id, file_path) VALUES (?, ?)');
diff --git a/apps/gallery/lib/scanner.php b/apps/gallery/lib/scanner.php
index f754f913001ccd06bc1de010f0bfd591596fcb3c..3eba9260ac7ff30f294fc6d1ee285a4159163901 100644
--- a/apps/gallery/lib/scanner.php
+++ b/apps/gallery/lib/scanner.php
@@ -1,5 +1,26 @@
 <?php
 
+/**
+* ownCloud - gallery application
+*
+* @author Bartek Przybylski
+* @copyright 2012 Bartek Przybylski bart.p.pl@gmail.com
+* 
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either 
+* version 3 of the License, or any later version.
+* 
+* This library 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 AFFERO GENERAL PUBLIC LICENSE for more details.
+*  
+* You should have received a copy of the GNU Lesser General Public 
+* License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+* 
+*/
+
 require_once('base.php'); // base lib
 require_once('images_utils.php');
 
diff --git a/apps/media/css/music.css b/apps/media/css/music.css
index a6738058be3fe4f868b3ee1adbd5d678931fa86a..41ade44a66f15ae3488c948632e9755a5792eb3c 100644
--- a/apps/media/css/music.css
+++ b/apps/media/css/music.css
@@ -22,11 +22,11 @@ div.jp-volume-bar-value { background:#ccc; width:0; height:0.4em; }
 #collection li.album,#collection li.song { margin-left:3em; }
 #leftcontent img.remove { display:none; float:right; cursor:pointer; }
 #leftcontent li:hover img.remove { display:inline; }
-#leftcontent li {white-space: normal; }
+#leftcontent li div.label { float: left; width: 200px; overflow: hidden; text-overflow: ellipsis; }
 #collection li button { float:right; }
 #collection li,#playlist li { list-style-type:none; }
 .template { display:none; }
-.collection_playing { background:#eee; }
+.collection_playing { background:#eee; font-weight: bold; }
 
 #collection li { padding-right:10px; }
 #searchresults input.play, #searchresults input.add { float:left; height:1em; width:1em; }
diff --git a/apps/media/js/player.js b/apps/media/js/player.js
index 3c022e9f8c48ebf69a57ceaf37d54c0645fca1bd..1f76356fd9798de6870261b26a6b6adf0e4d44c7 100644
--- a/apps/media/js/player.js
+++ b/apps/media/js/player.js
@@ -93,9 +93,11 @@ var PlayList={
 			ended:PlayList.next,
 			pause:function(){
 				localStorage.setItem(oc_current_user+'oc_playlist_playing','false');
+				document.title = "ownCloud";
 			},
-			play:function(){
+			play:function(event){
 				localStorage.setItem(oc_current_user+'oc_playlist_playing','true');
+				document.title = "\u25b8 " + event.jPlayer.status.media.name + " - " + event.jPlayer.status.media.artist + " - ownCloud";
 			},
 			supplied:type,
 			ready:function(){
diff --git a/apps/media/js/playlist.js b/apps/media/js/playlist.js
index 57180b3be7b6323742105a896ad0e043f58e35fe..089065989aef2c3ba9f163ede2190a31d0357f7b 100644
--- a/apps/media/js/playlist.js
+++ b/apps/media/js/playlist.js
@@ -1,11 +1,23 @@
 PlayList.render=function(){
 	$('#playlist').show();
+
+	/*
+	 * We should not empty() PlayList.parent() but thorougly manage its
+	 * elements instead because some code might be attached to those.
+	 * JQuery tipsies are one of them. The following line make sure they
+	 * are all removed before we delete the associated <li/>.
+	 */
+	$(".tipsy").remove();
+
 	PlayList.parent.empty();
 	for(var i=0;i<PlayList.items.length;i++){
 		var item=PlayList.items[i];
 		var li=$('<li/>');
-		li.append(item.name);
-                li.attr('class', 'jp-playlist-' + i);
+		li.attr('class', 'jp-playlist-' + i);
+		li.attr('title', item.artist + ' - ' + item.name + '<br/>(' + item.album + ')');
+		var div = $('<div class="label">' + item.name + '</div>');
+		li.append(div);
+		$('.jp-playlist-' + i).tipsy({gravity:'w', fade:true, live:true, html:true});
 		var img=$('<img class="remove svg action" src="'+OC.imagePath('core','actions/delete')+'"/>');
 		img.click(function(event){
 			event.stopPropagation();
diff --git a/apps/media/lib_scanner.php b/apps/media/lib_scanner.php
index 320b1f79199aefc06a814d1d7d915ee77c5d5443..4039cce09ee60b8767ec1d3b7272129b78db2f49 100644
--- a/apps/media/lib_scanner.php
+++ b/apps/media/lib_scanner.php
@@ -30,7 +30,6 @@ class OC_MEDIA_SCANNER{
 	//these are used to store which artists and albums we found, it can save a lot of addArtist/addAlbum calls
 	static private $artists=array();
 	static private $albums=array();//stored as "$artist/$album" to allow albums with the same name from different artists
-	static private $useMp3Info=null;
 	
 	/**
 	 * scan a folder for music
@@ -70,72 +69,55 @@ class OC_MEDIA_SCANNER{
 	 * @return boolean
 	 */
 	public static function scanFile($path){
-		if(is_null(self::$useMp3Info)){
-			self::$useMp3Info=OC_Helper::canExecute("mp3info");
-		}
 		$file=OC_Filesystem::getLocalFile($path);
-		if(substr($path,-3)=='mp3' and self::$useMp3Info){//use the command line tool id3info if possible
-			$output=array();
-			$size=filesize($file);
-			exec('mp3info -p "%a\n%l\n%t\n%n\n%S" "'.$file.'"',$output);
-			if(count($output)>4){
-				$artist=$output[0];
-				$album=$output[1];
-				$title=$output[2];
-				$track=$output[3];
-				$length=$output[4];
-			}else{
-				return; //invalid mp3 file
-			}
+		if(!self::isMusic($path)){
+			return;
+		}
+		if(!self::$getID3){
+			self::$getID3=@new getID3();
+			self::$getID3->encoding='UTF-8';
+		}
+		$data=@self::$getID3->analyze($file);
+		getid3_lib::CopyTagsToComments($data);
+		if(!isset($data['comments'])){
+			OC_Log::write('media',"error reading id3 tags in '$file'",OC_Log::WARN);
+			return;
+		}
+		if(!isset($data['comments']['artist'])){
+			OC_Log::write('media',"error reading artist tag in '$file'",OC_Log::WARN);
+			$artist='unknown';
 		}else{
-			if(!self::isMusic($path)){
-				return;
-			}
-			if(!self::$getID3){
-				self::$getID3=@new getID3();
-				self::$getID3->encoding='UTF-8';
-			}
-			$data=@self::$getID3->analyze($file);
-			getid3_lib::CopyTagsToComments($data);
-			if(!isset($data['comments'])){
-				OC_Log::write('media',"error reading id3 tags in '$file'",OC_Log::WARN);
-				return;
-			}
-			if(!isset($data['comments']['artist'])){
-				OC_Log::write('media',"error reading artist tag in '$file'",OC_Log::WARN);
-				$artist='unknown';
-			}else{
-				$artist=stripslashes($data['comments']['artist'][0]);
-			}
-			if(!isset($data['comments']['album'])){
-				OC_Log::write('media',"error reading album tag in '$file'",OC_Log::WARN);
-				$album='unknown';
-			}else{
-				$album=stripslashes($data['comments']['album'][0]);
-			}
-			if(!isset($data['comments']['title'])){
-				OC_Log::write('media',"error reading title tag in '$file'",OC_Log::WARN);
-				$title='unknown';
-			}else{
-				$title=stripslashes($data['comments']['title'][0]);
-			}
-			$size=$data['filesize'];
-			if (isset($data['comments']['track']))
-			{
-				$track = $data['comments']['track'][0];
-			}
-			else if (isset($data['comments']['track_number']))
-			{
-				$track = $data['comments']['track_number'][0];
-				$track = explode('/',$track);
-				$track = $track[0];
-			}
-			else
-			{
-				$track = 0;
-			}
-			$length=isset($data['playtime_seconds'])?round($data['playtime_seconds']):0;
+			$artist=stripslashes($data['comments']['artist'][0]);
 		}
+		if(!isset($data['comments']['album'])){
+			OC_Log::write('media',"error reading album tag in '$file'",OC_Log::WARN);
+			$album='unknown';
+		}else{
+			$album=stripslashes($data['comments']['album'][0]);
+		}
+		if(!isset($data['comments']['title'])){
+			OC_Log::write('media',"error reading title tag in '$file'",OC_Log::WARN);
+			$title='unknown';
+		}else{
+			$title=stripslashes($data['comments']['title'][0]);
+		}
+		$size=$data['filesize'];
+		if (isset($data['comments']['track']))
+		{
+			$track = $data['comments']['track'][0];
+		}
+		else if (isset($data['comments']['track_number']))
+		{
+			$track = $data['comments']['track_number'][0];
+			$track = explode('/',$track);
+			$track = $track[0];
+		}
+		else
+		{
+			$track = 0;
+		}
+		$length=isset($data['playtime_seconds'])?round($data['playtime_seconds']):0;
+
 		if(!isset(self::$artists[$artist])){
 			$artistId=OC_MEDIA_COLLECTION::addArtist($artist);
 			self::$artists[$artist]=$artistId;
diff --git a/l10n/templates/calendar.pot b/l10n/templates/calendar.pot
index 56fce2285ece4bcbd155e7b29aedef39d26526f7..7941082926bc81e2852ce08c19fb2a5eecd131f3 100644
--- a/l10n/templates/calendar.pot
+++ b/l10n/templates/calendar.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-10-22 13:05+0200\n"
+"POT-Creation-Date: 2012-01-07 18:29+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,8 +17,8 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ajax/editeventform.php:26
-msgid "Wrong calendar"
+#: ajax/guesstimezone.php:42
+msgid "New Timezone:"
 msgstr ""
 
 #: ajax/settimezone.php:22
@@ -29,171 +29,391 @@ msgstr ""
 msgid "Invalid request"
 msgstr ""
 
-#: appinfo/app.php:21 templates/calendar.php:11
-#: templates/part.eventform.php:21
+#: appinfo/app.php:20 templates/calendar.php:13
+#: templates/part.eventform.php:20
 msgid "Calendar"
 msgstr ""
 
-#: js/calendar.js:153
-msgid "ddd d MMMM[ yyyy]{ -[ddd d] MMMM yyyy}"
-msgstr ""
-
-#: js/calendar.js:155
-msgid "ddd d MMMM[ yyyy] HH:mm{ -[ ddd d MMMM yyyy] HH:mm}"
+#: lib/app.php:19
+msgid "Wrong calendar"
 msgstr ""
 
-#: lib/object.php:344
+#: lib/app.php:60 lib/object.php:332
 msgid "Birthday"
 msgstr ""
 
-#: lib/object.php:345
+#: lib/app.php:61 lib/object.php:333
 msgid "Business"
 msgstr ""
 
-#: lib/object.php:346
+#: lib/app.php:62 lib/object.php:334
 msgid "Call"
 msgstr ""
 
-#: lib/object.php:347
+#: lib/app.php:63 lib/object.php:335
 msgid "Clients"
 msgstr ""
 
-#: lib/object.php:348
+#: lib/app.php:64 lib/object.php:336
 msgid "Deliverer"
 msgstr ""
 
-#: lib/object.php:349
+#: lib/app.php:65 lib/object.php:337
 msgid "Holidays"
 msgstr ""
 
-#: lib/object.php:350
+#: lib/app.php:66 lib/object.php:338
 msgid "Ideas"
 msgstr ""
 
-#: lib/object.php:351
+#: lib/app.php:67 lib/object.php:339
 msgid "Journey"
 msgstr ""
 
-#: lib/object.php:352
+#: lib/app.php:68 lib/object.php:340
 msgid "Jubilee"
 msgstr ""
 
-#: lib/object.php:353
+#: lib/app.php:69 lib/object.php:341
 msgid "Meeting"
 msgstr ""
 
-#: lib/object.php:354
+#: lib/app.php:70 lib/object.php:342
 msgid "Other"
 msgstr ""
 
-#: lib/object.php:355
+#: lib/app.php:71 lib/object.php:343
 msgid "Personal"
 msgstr ""
 
-#: lib/object.php:356
+#: lib/app.php:72 lib/object.php:344
 msgid "Projects"
 msgstr ""
 
-#: lib/object.php:357
+#: lib/app.php:73 lib/object.php:345
 msgid "Questions"
 msgstr ""
 
-#: lib/object.php:358
+#: lib/app.php:74 lib/object.php:346
 msgid "Work"
 msgstr ""
 
-#: lib/object.php:365
+#: lib/object.php:353
 msgid "Does not repeat"
 msgstr ""
 
-#: lib/object.php:366
+#: lib/object.php:354
 msgid "Daily"
 msgstr ""
 
-#: lib/object.php:367
+#: lib/object.php:355
 msgid "Weekly"
 msgstr ""
 
-#: lib/object.php:368
+#: lib/object.php:356
 msgid "Every Weekday"
 msgstr ""
 
-#: lib/object.php:369
+#: lib/object.php:357
 msgid "Bi-Weekly"
 msgstr ""
 
-#: lib/object.php:370
+#: lib/object.php:358
 msgid "Monthly"
 msgstr ""
 
-#: lib/object.php:371
+#: lib/object.php:359
 msgid "Yearly"
 msgstr ""
 
-#: lib/object.php:389
+#: lib/object.php:366
+msgid "never"
+msgstr ""
+
+#: lib/object.php:367
+msgid "by occurrences"
+msgstr ""
+
+#: lib/object.php:368
+msgid "by date"
+msgstr ""
+
+#: lib/object.php:375
+msgid "by monthday"
+msgstr ""
+
+#: lib/object.php:376
+msgid "by weekday"
+msgstr ""
+
+#: lib/object.php:383 templates/lAfix.php:3
+msgid "Monday"
+msgstr ""
+
+#: lib/object.php:384 templates/lAfix.php:4
+msgid "Tuesday"
+msgstr ""
+
+#: lib/object.php:385 templates/lAfix.php:5
+msgid "Wednesday"
+msgstr ""
+
+#: lib/object.php:386 templates/lAfix.php:6
+msgid "Thursday"
+msgstr ""
+
+#: lib/object.php:387 templates/lAfix.php:7
+msgid "Friday"
+msgstr ""
+
+#: lib/object.php:388 templates/lAfix.php:8
+msgid "Saturday"
+msgstr ""
+
+#: lib/object.php:389 templates/lAfix.php:2
+msgid "Sunday"
+msgstr ""
+
+#: lib/object.php:396
+msgid "events week of month"
+msgstr ""
+
+#: lib/object.php:397
+msgid "first"
+msgstr ""
+
+#: lib/object.php:398
+msgid "second"
+msgstr ""
+
+#: lib/object.php:399
+msgid "third"
+msgstr ""
+
+#: lib/object.php:400
+msgid "fourth"
+msgstr ""
+
+#: lib/object.php:401
+msgid "fifth"
+msgstr ""
+
+#: lib/object.php:402
+msgid "last"
+msgstr ""
+
+#: lib/object.php:424 templates/lAfix.php:16
+msgid "January"
+msgstr ""
+
+#: lib/object.php:425 templates/lAfix.php:17
+msgid "February"
+msgstr ""
+
+#: lib/object.php:426 templates/lAfix.php:18
+msgid "March"
+msgstr ""
+
+#: lib/object.php:427 templates/lAfix.php:19
+msgid "April"
+msgstr ""
+
+#: lib/object.php:428 templates/lAfix.php:20
+msgid "May"
+msgstr ""
+
+#: lib/object.php:429 templates/lAfix.php:21
+msgid "June"
+msgstr ""
+
+#: lib/object.php:430 templates/lAfix.php:22
+msgid "July"
+msgstr ""
+
+#: lib/object.php:431 templates/lAfix.php:23
+msgid "August"
+msgstr ""
+
+#: lib/object.php:432 templates/lAfix.php:24
+msgid "September"
+msgstr ""
+
+#: lib/object.php:433 templates/lAfix.php:25
+msgid "October"
+msgstr ""
+
+#: lib/object.php:434 templates/lAfix.php:26
+msgid "November"
+msgstr ""
+
+#: lib/object.php:435 templates/lAfix.php:27
+msgid "December"
+msgstr ""
+
+#: lib/object.php:441
+msgid "by events date"
+msgstr ""
+
+#: lib/object.php:442
+msgid "by yearday(s)"
+msgstr ""
+
+#: lib/object.php:443
+msgid "by weeknumber(s)"
+msgstr ""
+
+#: lib/object.php:444
+msgid "by day and month"
+msgstr ""
+
+#: lib/object.php:467
 msgid "Not an array"
 msgstr ""
 
-#: templates/calendar.php:8
+#: lib/search.php:32 lib/search.php:34 lib/search.php:37
+msgid "Date"
+msgstr ""
+
+#: lib/search.php:40
+msgid "Cal."
+msgstr ""
+
+#: templates/calendar.php:10
 msgid "All day"
 msgstr ""
 
-#: templates/calendar.php:9
+#: templates/calendar.php:11
 msgid "Missing fields"
 msgstr ""
 
-#: templates/calendar.php:10 templates/part.eventform.php:3
+#: templates/calendar.php:12 templates/part.eventform.php:3
 msgid "Title"
 msgstr ""
 
-#: templates/calendar.php:12
+#: templates/calendar.php:14
 msgid "From Date"
 msgstr ""
 
-#: templates/calendar.php:13
+#: templates/calendar.php:15
 msgid "From Time"
 msgstr ""
 
-#: templates/calendar.php:14
+#: templates/calendar.php:16
 msgid "To Date"
 msgstr ""
 
-#: templates/calendar.php:15
+#: templates/calendar.php:17
 msgid "To Time"
 msgstr ""
 
-#: templates/calendar.php:16
+#: templates/calendar.php:18
 msgid "The event ends before it starts"
 msgstr ""
 
-#: templates/calendar.php:17
+#: templates/calendar.php:19
 msgid "There was a database fail"
 msgstr ""
 
-#: templates/calendar.php:23
+#: templates/calendar.php:38
 msgid "Week"
 msgstr ""
 
-#: templates/calendar.php:24
+#: templates/calendar.php:39
 msgid "Month"
 msgstr ""
 
-#: templates/calendar.php:25
+#: templates/calendar.php:40
 msgid "List"
 msgstr ""
 
-#: templates/calendar.php:30
+#: templates/calendar.php:45
 msgid "Today"
 msgstr ""
 
-#: templates/calendar.php:31
+#: templates/calendar.php:46
 msgid "Calendars"
 msgstr ""
 
-#: templates/calendar.php:48
+#: templates/calendar.php:64
 msgid "There was a fail, while parsing the file."
 msgstr ""
 
+#: templates/lAfix.php:9
+msgid "Sun."
+msgstr ""
+
+#: templates/lAfix.php:10
+msgid "Mon."
+msgstr ""
+
+#: templates/lAfix.php:11
+msgid "Tue."
+msgstr ""
+
+#: templates/lAfix.php:12
+msgid "Wed."
+msgstr ""
+
+#: templates/lAfix.php:13
+msgid "Thu."
+msgstr ""
+
+#: templates/lAfix.php:14
+msgid "Fri."
+msgstr ""
+
+#: templates/lAfix.php:15
+msgid "Sat."
+msgstr ""
+
+#: templates/lAfix.php:28
+msgid "Jan."
+msgstr ""
+
+#: templates/lAfix.php:29
+msgid "Feb."
+msgstr ""
+
+#: templates/lAfix.php:30
+msgid "Mar."
+msgstr ""
+
+#: templates/lAfix.php:31
+msgid "Apr."
+msgstr ""
+
+#: templates/lAfix.php:32
+msgid "May."
+msgstr ""
+
+#: templates/lAfix.php:33
+msgid "Jun."
+msgstr ""
+
+#: templates/lAfix.php:34
+msgid "Jul."
+msgstr ""
+
+#: templates/lAfix.php:35
+msgid "Aug."
+msgstr ""
+
+#: templates/lAfix.php:36
+msgid "Sep."
+msgstr ""
+
+#: templates/lAfix.php:37
+msgid "Oct."
+msgstr ""
+
+#: templates/lAfix.php:38
+msgid "Nov."
+msgstr ""
+
+#: templates/lAfix.php:39
+msgid "Dec."
+msgstr ""
+
 #: templates/part.choosecalendar.php:1
 msgid "Choose active calendars"
 msgstr ""
@@ -216,7 +436,7 @@ msgid "Edit"
 msgstr ""
 
 #: templates/part.choosecalendar.rowfields.php:4
-#: templates/part.editevent.php:8
+#: templates/part.editevent.php:9
 msgid "Delete"
 msgstr ""
 
@@ -244,7 +464,7 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: templates/part.editcalendar.php:42 templates/part.editevent.php:7
+#: templates/part.editcalendar.php:42 templates/part.editevent.php:8
 #: templates/part.newevent.php:6
 msgid "Submit"
 msgstr ""
@@ -257,7 +477,7 @@ msgstr ""
 msgid "Edit an event"
 msgstr ""
 
-#: templates/part.editevent.php:9
+#: templates/part.editevent.php:10
 msgid "Export"
 msgstr ""
 
@@ -273,43 +493,83 @@ msgstr ""
 msgid "Select category"
 msgstr ""
 
-#: templates/part.eventform.php:39
+#: templates/part.eventform.php:37
 msgid "All Day Event"
 msgstr ""
 
-#: templates/part.eventform.php:43
+#: templates/part.eventform.php:41
 msgid "From"
 msgstr ""
 
-#: templates/part.eventform.php:51
+#: templates/part.eventform.php:49
 msgid "To"
 msgstr ""
 
-#: templates/part.eventform.php:59
+#: templates/part.eventform.php:57
 msgid "Advanced options"
 msgstr ""
 
-#: templates/part.eventform.php:64
+#: templates/part.eventform.php:61
 msgid "Repeat"
 msgstr ""
 
-#: templates/part.eventform.php:80
-msgid "Attendees"
+#: templates/part.eventform.php:68
+msgid "Advanced"
+msgstr ""
+
+#: templates/part.eventform.php:112
+msgid "Select weekdays"
 msgstr ""
 
-#: templates/part.eventform.php:87
+#: templates/part.eventform.php:125 templates/part.eventform.php:138
+msgid "Select days"
+msgstr ""
+
+#: templates/part.eventform.php:130
+msgid "and the events day of year."
+msgstr ""
+
+#: templates/part.eventform.php:143
+msgid "and the events day of month."
+msgstr ""
+
+#: templates/part.eventform.php:151
+msgid "Select months"
+msgstr ""
+
+#: templates/part.eventform.php:164
+msgid "Select weeks"
+msgstr ""
+
+#: templates/part.eventform.php:169
+msgid "and the events week of year."
+msgstr ""
+
+#: templates/part.eventform.php:175
+msgid "Interval"
+msgstr ""
+
+#: templates/part.eventform.php:181
+msgid "End"
+msgstr ""
+
+#: templates/part.eventform.php:193
+msgid "occurrences"
+msgstr ""
+
+#: templates/part.eventform.php:208
 msgid "Location"
 msgstr ""
 
-#: templates/part.eventform.php:89
+#: templates/part.eventform.php:210
 msgid "Location of the Event"
 msgstr ""
 
-#: templates/part.eventform.php:95
+#: templates/part.eventform.php:216
 msgid "Description"
 msgstr ""
 
-#: templates/part.eventform.php:96
+#: templates/part.eventform.php:218
 msgid "Description of the Event"
 msgstr ""
 
@@ -353,6 +613,10 @@ msgstr ""
 msgid "Timezone"
 msgstr ""
 
+#: templates/settings.php:30
+msgid "Check always for changes of the timezone"
+msgstr ""
+
 #: templates/settings.php:32
 msgid "Timeformat"
 msgstr ""
diff --git a/lib/base.php b/lib/base.php
index 83b14f2b970100806317d2c8ba2a9d31d96341ad..9ac6b6751a2daee8b57b50f7e2ece27feb05d142 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -152,14 +152,16 @@ class OC{
 			}
 		}
 
-		$installedVersion=OC_Config::getValue('version','0.0.0');
-		$currentVersion=implode('.',OC_Util::getVersion());
-		if (version_compare($currentVersion, $installedVersion, '>')) {
-			OC_DB::updateDbFromStructure('../db_structure.xml');
-			OC_Config::setValue('version',implode('.',OC_Util::getVersion()));
-		}
+		if(OC_Config::getValue('installed', false)){
+			$installedVersion=OC_Config::getValue('version','0.0.0');
+			$currentVersion=implode('.',OC_Util::getVersion());
+			if (version_compare($currentVersion, $installedVersion, '>')) {
+				OC_DB::updateDbFromStructure('../db_structure.xml');
+				OC_Config::setValue('version',implode('.',OC_Util::getVersion()));
+			}
 
-		OC_App::updateApps();
+			OC_App::updateApps();
+		}
 
 		ini_set('session.cookie_httponly','1;');
 		session_start();
diff --git a/lib/db.php b/lib/db.php
index 05ed8398b7b901ff23459fce56ecd9d42c9808c4..b901cc8b513bedd4980cf02a02a5c2a9c6cd82b3 100644
--- a/lib/db.php
+++ b/lib/db.php
@@ -71,7 +71,14 @@ class OC_DB {
 	/**
 	 * connect to the database using pdo
 	 */
-	private static function connectPDO(){
+	public static function connectPDO(){
+		if(self::$connection){
+			if(self::$backend==self::BACKEND_MDB2){
+				self::disconnect();
+			}else{
+				return;
+			}
+		}
 		// The global data we need
 		$name = OC_Config::getValue( "dbname", "owncloud" );
 		$host = OC_Config::getValue( "dbhost", "" );
@@ -113,7 +120,14 @@ class OC_DB {
 	/**
 	 * connect to the database using mdb2
 	 */
-	static private function connectMDB2(){
+	public static function connectMDB2(){
+		if(self::$connection){
+			if(self::$backend==self::BACKEND_PDO){
+				self::disconnect();
+			}else{
+				return;
+			}
+		}
 		// The global data we need
 		$name = OC_Config::getValue( "dbname", "owncloud" );
 		$host = OC_Config::getValue( "dbhost", "" );
@@ -255,8 +269,8 @@ class OC_DB {
 				self::$connection->disconnect();
 			}
 			self::$connection=false;
-			self::$mdb2=false;
-			self::$pdo=false;
+			self::$MDB2=false;
+			self::$PDO=false;
 		}
 
 		return true;
@@ -374,6 +388,8 @@ class OC_DB {
 	private static function connectScheme(){
 		// We need a mdb2 database connection
 		self::connectMDB2();
+		self::$MDB2->loadModule('Manager');
+		self::$MDB2->loadModule('Reverse');
 
 		// Connect if this did not happen before
 		if(!self::$schema){
diff --git a/lib/setup.php b/lib/setup.php
index d454c17599dfb6f93136fabaee4c580016769fb6..1b74e945196c5205fe25802e511448a2ad5ceab6 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -98,35 +98,45 @@ class OC_Setup {
 					);
 				}
 				else {
+					$oldUser=OC_Config::getValue('dbuser', false);
+					$oldPassword=OC_Config::getValue('dbpassword', false);
+					
 					$query="SELECT user FROM mysql.user WHERE user='$dbuser'"; //this should be enough to check for admin rights in mysql
 					if(mysql_query($query, $connection)) {
 						//use the admin login data for the new database user
 
 						//add prefix to the mysql user name to prevent collissions
-						$dbusername=substr('oc_mysql_'.$username,0,16);
-						//hash the password so we don't need to store the admin config in the config file
-						$dbpassword=md5(time().$password);
-						
-						self::createDBUser($dbusername, $dbpassword, $connection);
-						
-						OC_Config::setValue('dbuser', $dbusername);
-						OC_Config::setValue('dbpassword', $dbpassword);
+						$dbusername=substr('oc_'.$username,0,16);
+						if($dbusername!=$oldUser){
+							//hash the password so we don't need to store the admin config in the config file
+							$dbpassword=md5(time().$password);
+
+							self::createDBUser($dbusername, $dbpassword, $connection);
+
+							OC_Config::setValue('dbuser', $dbusername);
+							OC_Config::setValue('dbpassword', $dbpassword);
+						}
 
 						//create the database
 						self::createDatabase($dbname, $dbusername, $connection);
 					}
 					else {
-						OC_Config::setValue('dbuser', $dbuser);
-						OC_Config::setValue('dbpassword', $dbpass);
+						if($dbuser!=$oldUser){
+							OC_Config::setValue('dbuser', $dbuser);
+							OC_Config::setValue('dbpassword', $dbpass);
+						}
 
 						//create the database
 						self::createDatabase($dbname, $dbuser, $connection);
 					}
 
 					//fill the database if needed
-					$query="SELECT * FROM $dbname.{$dbtableprefix}users";
+					$query="select count(*) from information_schema.tables where table_schema='$dbname' AND table_name = '{$dbtableprefix}users';";
 					$result = mysql_query($query,$connection);
-					if(!$result) {
+					if($result){
+						$row=mysql_fetch_row($result);
+					}
+					if(!$result or $row[0]==0) {
 						OC_DB::createDbFromStructure('db_structure.xml');
 					}
 					mysql_close($connection);
@@ -180,9 +190,12 @@ class OC_Setup {
 					}
 
 					//fill the database if needed
-					$query = "SELECT relname FROM pg_class WHERE relname='{$dbtableprefix}users' limit 1";
+					$query = "select count(*) FROM pg_class WHERE relname='{$dbtableprefix}users' limit 1";
 					$result = pg_query($connection, $query);
-					if(!$result) {
+					if($result){
+						$row = pg_fetch_row($result);
+					}
+					if(!$result or $row[0]==0) {
 						OC_DB::createDbFromStructure('db_structure.xml');
 					}
 					pg_close($connection);