diff --git a/.gitignore b/.gitignore
index 33f8e0c524b5206b77d3abc976443ff851709b39..e9dbc1e3f62d7a75e9180cc4ed4969bddc8dfe3a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,6 @@ RCS/*
 # eclipse
 .project
 .settings
+
+# netbeans 
+nbproject
diff --git a/README b/README
index 4ad4f82f304ad77bc4e9c5813b51d0d653d3ef9a..60b18defd593f61777ff3a329eb5ac3097f716ba 100644
--- a/README
+++ b/README
@@ -4,7 +4,7 @@ It is alpha software in development and should be treated accordingly.
 
 http://ownCloud.org
 
-Installation instructions: http://owncloud.org/index.php/Installation
+Installation instructions: http://owncloud.org/install
 Source code: http://gitorious.org/owncloud
 
 Mailing list: http://mail.kde.org/mailman/listinfo/owncloud
diff --git a/apps/calendar/ajax/neweventform.php b/apps/calendar/ajax/neweventform.php
index 7a4c6f469e55dd11e67bd83e7f717ded5ccf3833..7099ea718e97a9ba27322a30e52cba1849ecc87d 100644
--- a/apps/calendar/ajax/neweventform.php
+++ b/apps/calendar/ajax/neweventform.php
@@ -29,6 +29,9 @@ if($starttime != 'undefined' && !is_nan($starttime) && !$allday){
 	$startminutes = '00';
 }else{
 	$starttime = date('H');
+	if(strlen($starttime) == 2 && $starttime <= 9){
+		$starttime = substr($starttime, 1, 1);
+	}
 	$startminutes = date('i');
 }
 
@@ -38,7 +41,18 @@ $endyear     = $startyear;
 $endtime     = $starttime;
 $endminutes  = $startminutes;
 if($endtime == 23) {
-	$endday++;
+	if($startday == date(t, mktime($starttime, $startminutes, 0, $startmonth, $startday, $startyear))){
+		$datetimestamp = mktime(0, 0, 0, $startmonth, $startday, $startyear);
+		$datetimestamp = $datetimestamp + 86400;
+		$endmonth = date("m", $datetimestamp);
+		$endday = date("d", $datetimestamp);
+		$endyear = date("Y", $datetimestamp);
+	}else{
+		$endday++;
+		if($endday <= 9){
+			$endday = "0" . $endday;
+		}
+	}
 	$endtime = 0;
 } else {
 	$endtime++;
diff --git a/apps/calendar/appinfo/info.xml b/apps/calendar/appinfo/info.xml
index c846fc1eebcc708de14adeb9f30f63f3420e8d39..6b1ecd2337f02282988d3b4fbc6540a871d8917e 100644
--- a/apps/calendar/appinfo/info.xml
+++ b/apps/calendar/appinfo/info.xml
@@ -7,4 +7,5 @@
 	<author>Georg Ehrke (Userinterface), Jakob Sack</author>
 	<require>2</require>
 	<description>Calendar with CalDAV support</description>
+	<default_enable/>
 </info>
diff --git a/apps/calendar/js/calendar.js b/apps/calendar/js/calendar.js
index f8d1c8e650e1a37dbdf831c3b3bfa4579c836eb0..1b345452912968531ddc22edaad4472f5e54e26e 100644
--- a/apps/calendar/js/calendar.js
+++ b/apps/calendar/js/calendar.js
@@ -352,6 +352,10 @@ Calendar={
 					}
 				},"json");
 		},
+		showadvancedoptions:function(){
+			$("#advanced_options").css("display", "block");
+			$("#advanced_options_button").css("display", "none");
+		},
 		createEventPopup:function(e){
 			var popup = $(this).data('popup');
 			if (!popup){
diff --git a/apps/calendar/templates/part.eventform.php b/apps/calendar/templates/part.eventform.php
index 5bb072cc23ba14f5930c0461da194358474a8324..4c34b3e1fcc02cc316ee1c0912f8dff3f7f527be 100644
--- a/apps/calendar/templates/part.eventform.php
+++ b/apps/calendar/templates/part.eventform.php
@@ -5,12 +5,6 @@
 			<input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Title of the Event");?>" value="<?php echo isset($_['title']) ? $_['title'] : '' ?>" maxlength="100" name="title"/>
 			</td>
 		</tr>
-		<tr>
-			<th width="75px"><?php echo $l->t("Location");?>:</th>
-			<td>
-			<input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Location of the Event");?>" value="<?php echo isset($_['location']) ? $_['location'] : '' ?>" maxlength="100"  name="location" />
-			</td>
-		</tr>
 	</table>
 	<table>
 		<tr>
@@ -60,7 +54,12 @@
 			&nbsp;&nbsp;
 			<input type="time" value="<?php echo $_['endtime'];?>" name="totime" id="totime">
 			</td><!--use jquery-->
-		</tr><!--
+		</tr>
+	</table>
+	<input type="button" class="submit" value="<?php echo $l->t("Advanced options"); ?>" onclick="Calendar.UI.showadvancedoptions();" id="advanced_options_button">
+	<div id="advanced_options" style="display: none;">
+	<!--
+	<table>
 		<tr>
 			<th width="75px"><?php echo $l->t("Repeat");?>:</th>
 			<td>
@@ -85,7 +84,16 @@
 	<hr>-->
 	<table>
 		<tr>
-			<th width="75px" style="vertical-align: top;"><?php echo $l->t("Description");?>:</th>
+			<th width="85px"><?php echo $l->t("Location");?>:</th>
+			<td>
+			<input type="text" style="width:350px;" size="100" placeholder="<?php echo $l->t("Location of the Event");?>" value="<?php echo isset($_['location']) ? $_['location'] : '' ?>" maxlength="100"  name="location" />
+			</td>
+		</tr>
+	</table>
+	<table>
+		<tr>
+			<th width="85px" style="vertical-align: top;"><?php echo $l->t("Description");?>:</th>
 			<td><textarea style="width:350px;height: 150px;" placeholder="<?php echo $l->t("Description of the Event");?>" name="description"><?php echo isset($_['description']) ? $_['description'] : '' ?></textarea></td>
 		</tr>
 	</table>
+	</div>
diff --git a/apps/contacts/appinfo/info.xml b/apps/contacts/appinfo/info.xml
index 77c9dc91bfc7420bef0b45de8fbf708b155d3a46..d18a19c3aeab1a8fd646262289c5ee927acec45b 100644
--- a/apps/contacts/appinfo/info.xml
+++ b/apps/contacts/appinfo/info.xml
@@ -7,4 +7,5 @@
 	<author>Jakob Sack</author>
 	<require>2</require>
 	<description>Address book with CardDAV support.</description>
+	<default_enable/>
 </info>
diff --git a/apps/files_imageviewer/appinfo/info.xml b/apps/files_imageviewer/appinfo/info.xml
index f3b5a67960ebcb905942648d66dfd3b027dd2b66..00b55c254dd727fe189bcb6484eb238ce19a2dab 100644
--- a/apps/files_imageviewer/appinfo/info.xml
+++ b/apps/files_imageviewer/appinfo/info.xml
@@ -7,4 +7,5 @@
 	<licence>AGPL</licence>
 	<author>Robin Appelman</author>
 	<require>2</require>
-</info>
\ No newline at end of file
+	<default_enable/>
+</info>
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index 2fbb3300f69f7b08671235b3efdc1dd94e0bd7ff..abf847b4483a2ccf6a8d747f2b5f9148608790fa 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -7,4 +7,5 @@
 	<licence>AGPL</licence>
 	<author>Michael Gapczynski</author>
 	<require>2</require>
-</info>
\ No newline at end of file
+	<default_enable/>
+</info>
diff --git a/apps/files_textviewer/appinfo/info.xml b/apps/files_textviewer/appinfo/info.xml
index 209b414034639a609d82b535a9cd26bf6ab3a73b..becfd5e35c83255b76e95a65a1a7addaa8b9627a 100644
--- a/apps/files_textviewer/appinfo/info.xml
+++ b/apps/files_textviewer/appinfo/info.xml
@@ -6,4 +6,5 @@
 	<licence>AGPL</licence>
 	<author>Robin Appelman</author>
 	<require>2</require>
+	<default_enable/>
 </info>
diff --git a/apps/media/appinfo/info.xml b/apps/media/appinfo/info.xml
index 044abade53f5177f37b81aaaea53190fdb492115..795c9a4dd718f0c297255c38edaa173e455d95ac 100644
--- a/apps/media/appinfo/info.xml
+++ b/apps/media/appinfo/info.xml
@@ -7,4 +7,5 @@
 	<licence>AGPL</licence>
 	<author>Robin Appelman</author>
 	<require>2</require>
-</info>
\ No newline at end of file
+	<default_enable/>
+</info>
diff --git a/apps/media/css/music.css b/apps/media/css/music.css
index ddfe342983008737c5fe55878166173716c527fc..c4db4e05855c6c9e6687222308f6d8ad79f58ee8 100644
--- a/apps/media/css/music.css
+++ b/apps/media/css/music.css
@@ -9,8 +9,9 @@ div.jp-progress { position:absolute; overflow:hidden; top:.5em; left:8em; width:
 div.jp-seek-bar { background:#eee; width:0; height:100%; cursor:pointer; }
 div.jp-play-bar { background:#ccc; width:0; height:100%; }
 div.jp-seeking-bg { background:url("../img/pbar-ani.gif"); }
-div.jp-current-time,div.jp-duration { position:absolute; font-size:.64em; font-style:oblique; top:1em; left:13.5em; }
-div.jp-duration { left:33em; }
+div.jp-current-time,div.jp-duration { position:absolute; font-size:.64em; font-style:oblique; top:0.9em; left:13.5em; }
+div.jp-duration { display: none }
+div.jp-current-song { left: 33em; position: absolute; top: 0.9em; }
 div.jp-duration { text-align:right; }
 
 a.jp-mute,a.jp-unmute { left:24em; }
@@ -21,9 +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; }
 #collection li button { float:right; }
 #collection li,#playlist li { list-style-type:none; }
 .template { display:none; }
+.collection_playing { background:#eee; }
 
 #collection li { padding-right:10px; }
 #searchresults input.play, #searchresults input.add { float:left; height:1em; width:1em; }
@@ -34,6 +37,7 @@ tr td { border-top:1px solid #eee; height:2.2em; }
 tr .artist img { vertical-align:middle; }
 tr.album td.artist { padding-left:1em; }
 tr.song td.artist { padding-left:2em; }
+.add {margin: 0 0.5em 0 0; }
 
 #scan { position:absolute; right:13em; top:0em; }
 #scan .start { position:relative; display:inline; float:right; }
diff --git a/apps/media/js/music.js b/apps/media/js/music.js
index c04c579d1ca04805d164a3f16b1d8f9c4b1cce98..cac16ac6ff7be9e943c528bf819a0f2d9d82c2e2 100644
--- a/apps/media/js/music.js
+++ b/apps/media/js/music.js
@@ -15,7 +15,7 @@ $(document).ready(function(){
 			PlayList.play(oldSize);
 			PlayList.render();
 		});
-		var button=$('<input type="button" title="'+t('media','Add to playlist')+'" class="add"></input>');
+		var button=$('<input type="button" title="'+t('media','Add album to playlist')+'" class="add"></input>');
 		button.css('background-image','url('+OC.imagePath('core','actions/play-add')+')')
 		button.click(function(event){
 			event.stopPropagation();
@@ -24,6 +24,7 @@ $(document).ready(function(){
 		});
 		row.find('div.name').append(button);
 	}
+        $('.add').tipsy({gravity:'n', fade:true, delayIn: 400, live:true});
 	Collection.display();
 });
 
diff --git a/apps/media/js/player.js b/apps/media/js/player.js
index f696b87bbde5ec2bb2b0909440bd2021b2de84bb..693bf2d70bf6c41caa2e33a559509e82ee74da15 100644
--- a/apps/media/js/player.js
+++ b/apps/media/js/player.js
@@ -39,6 +39,7 @@ var PlayList={
 					PlayList.init(items[index].type,null); // init calls load that calls play
 				}else{
 					PlayList.player.jPlayer("setMedia", items[PlayList.current]);
+                                        $(".jp-current-song").text(items[PlayList.current].name);
 					items[index].playcount++;
 					PlayList.player.jPlayer("play",time);
 					if(index>0){
@@ -67,6 +68,8 @@ var PlayList={
 				PlayList.init(items[index].type,null); // init calls load that calls play
 			}
 		}
+                $(".song").removeClass("collection_playing");
+                $(".jp-playlist-" + index).addClass("collection_playing");
 	},
 	init:function(type,ready){
 		if(!PlayList.player){
diff --git a/apps/media/js/playlist.js b/apps/media/js/playlist.js
index cb7f24522a4751bda0d891cd04f47d1794399c7f..c6dc3db2dd40c3b75b9d7eb5e1ff0b0d3dd84aa9 100644
--- a/apps/media/js/playlist.js
+++ b/apps/media/js/playlist.js
@@ -5,6 +5,7 @@ PlayList.render=function(){
 		var item=PlayList.items[i];
 		var li=$('<li/>');
 		li.append(item.name);
+                li.attr('class', 'jp-playlist-' + i);
 		var img=$('<img class="remove svg action" src="'+OC.imagePath('core','actions/delete')+'"/>');
 		img.click(function(event){
 			event.stopPropagation();
@@ -18,6 +19,7 @@ PlayList.render=function(){
 		li.addClass('song');
 		PlayList.parent.append(li);
 	}
+        $(".jp-playlist-" + PlayList.current).addClass("collection_playing");
 }
 PlayList.getSelected=function(){
 	return $('tbody td.name input:checkbox:checked').parent().parent();
diff --git a/apps/media/templates/music.php b/apps/media/templates/music.php
index 6c8d740cc13f146d2ca8fd0e451b4fa4387ece82..2af18fb03c9f1ea27302b85237426ca789d44ae9 100644
--- a/apps/media/templates/music.php
+++ b/apps/media/templates/music.php
@@ -17,6 +17,7 @@
 	<div class="jp-volume-bar">
 		<div class="jp-volume-bar-value"></div>
 	</div>
+        <div class="jp-current-song"></div>
 
 	<div class="player" id="jp-player"></div>
 
diff --git a/apps/user_openid/appinfo/info.xml b/apps/user_openid/appinfo/info.xml
index 32525009d616ed7bbb31000dc0ba4723ecd7f05a..332d2199dd3c305e850785e481bbdaf5f485e98c 100644
--- a/apps/user_openid/appinfo/info.xml
+++ b/apps/user_openid/appinfo/info.xml
@@ -7,4 +7,5 @@
 	<licence>AGPL</licence>
 	<author>Robin Appelman</author>
 	<require>2</require>
-</info>
\ No newline at end of file
+	<default_enable/>
+</info>
diff --git a/lib/installer.php b/lib/installer.php
index 9416a42c972ee8b4a5e2f2b06549527b61ab55bc..0febb2cab46ec84543281388edce92a953ae0b0f 100644
--- a/lib/installer.php
+++ b/lib/installer.php
@@ -243,13 +243,14 @@ class OC_Installer{
 	 * If $enabled is true, apps are installed as enabled.
 	 * If $enabled is false, apps are installed as disabled.
 	 */
-	public static function installShippedApps( $enabled ){
+	public static function installShippedApps(){
 		$dir = opendir( OC::$SERVERROOT."/apps" );
 		while( false !== ( $filename = readdir( $dir ))){
 			if( substr( $filename, 0, 1 ) != '.' and is_dir(OC::$SERVERROOT."/apps/$filename") ){
 				if( file_exists( OC::$SERVERROOT."/apps/$filename/appinfo/app.php" )){
 					if(!OC_Installer::isInstalled($filename)){
-						OC_Installer::installShippedApp($filename);
+						$info = OC_Installer::installShippedApp($filename);
+						$enabled = isset($info['default_enable']);
 						if( $enabled ){
 							OC_Appconfig::setValue($filename,'enabled','yes');
 						}else{
@@ -265,7 +266,7 @@ class OC_Installer{
 	/**
 	 * install an app already placed in the app folder
 	 * @param string $app id of the app to install
-	 * @return bool
+	 * @returns array see OC_App::getAppInfo
 	 */
 	public static function installShippedApp($app){
 		//install the database
@@ -279,5 +280,6 @@ class OC_Installer{
 		}
 		$info=OC_App::getAppInfo(OC::$SERVERROOT."/apps/$app/appinfo/info.xml");
 		OC_Appconfig::setValue($app,'installed_version',$info['version']);
+		return $info;
 	}
 }
diff --git a/lib/setup.php b/lib/setup.php
index 7b205acd705821ee4b1537a27f6e1edb961047fa..8d3079720ccc498373a30b430051b24bc223b34e 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -206,7 +206,7 @@ class OC_Setup {
 				OC_User::login($username, $password);
 
 				//guess what this does
-				OC_Installer::installShippedApps(true);
+				OC_Installer::installShippedApps();
 
 				//create htaccess files for apache hosts
 				if (strstr($_SERVER['SERVER_SOFTWARE'], 'Apache')) {
diff --git a/lib/util.php b/lib/util.php
index dea3168e8fc9cc9fbf2d28ad1d045c58e4885ba5..66a781537eae2b822da61be720c112d5005b17d5 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -24,7 +24,7 @@ class OC_Util {
 			$success=@mkdir($CONFIG_DATADIRECTORY_ROOT);
                         if(!$success) {
 				$tmpl = new OC_Template( '', 'error', 'guest' );
-				$tmpl->assign('errors',array(1=>array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY_ROOT.")",'hint'=>"You can usually fix this by setting the owner of '".OC::$SERVERROOT."' to the user that the web server uses (".exec('whoami').")")));
+				$tmpl->assign('errors',array(1=>array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY_ROOT.")",'hint'=>"You can usually fix this by setting the owner of '".OC::$SERVERROOT."' to the user that the web server uses (".OC_Util::checkWebserverUser().")")));
 				$tmpl->printPage();
 				exit;
   			}
@@ -208,28 +208,21 @@ class OC_Util {
 		}
 		$CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" );
 		$CONFIG_DBNAME = OC_Config::getValue( "dbname", "owncloud" );
-
-		//try to get the username the httpd server runs on, used in hints
-		$stat=stat($_SERVER['DOCUMENT_ROOT']);
-		if(is_callable('posix_getpwuid')){
-			$serverUser=posix_getpwuid($stat['uid']);
-			$serverUser='\''.$serverUser['name'].'\'';
-		}else{
-			$serverUser='\'www-data\' for ubuntu/debian';//TODO: try to detect the distro and give a guess based on that
-		}
+                $serverUser=OC_Util::checkWebserverUser();
 
 		//common hint for all file permissons error messages
 		$permissionsHint="Permissions can usually be fixed by setting the owner of the file or directory to the user the web server runs as ($serverUser)";
 
 		//check for correct file permissions
 		if(!stristr(PHP_OS, 'WIN')){
+                	$permissionsModHint="Please change the permissions to 0770 so that the directory cannot be listed by other users.";
 			$prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY_ROOT)),-3);
 			if(substr($prems,-1)!='0'){
 				OC_Helper::chmodr($CONFIG_DATADIRECTORY_ROOT,0770);
 				clearstatcache();
 				$prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY_ROOT)),-3);
 				if(substr($prems,2,1)!='0'){
-					$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') is readable from the web<br/>','hint'=>$permissionsHint);
+					$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') is readable for other users<br/>','hint'=>$permissionsModHint);
 				}
 			}
 			if( OC_Config::getValue( "enablebackup", false )){
@@ -239,7 +232,7 @@ class OC_Util {
 					clearstatcache();
 					$prems=substr(decoct(@fileperms($CONFIG_BACKUPDIRECTORY)),-3);
 					if(substr($prems,2,1)!='0'){
-						$errors[]=array('error'=>'Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable from the web<br/>','hint'=>$permissionsHint);
+						$errors[]=array('error'=>'Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable for other users<br/>','hint'=>$permissionsModHint);
 					}
 				}
 			}
@@ -250,11 +243,39 @@ class OC_Util {
 			$errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') not writable by ownCloud<br/>','hint'=>$permissionsHint);
 		}
 
-		//TODO: check for php modules
+		// check if all required php modules are present
+		if(!class_exists('ZipArchive')){
+			$errors[]=array('error'=>'PHP module ZipArchive not installed.<br/>','hint'=>'Please ask your server administrator to install the module.');
+		}
+
+		if(!function_exists('mb_detect_encoding')){
+			$errors[]=array('error'=>'PHP module mb multibyte not installed.<br/>','hint'=>'Please ask your server administrator to install the module.');
+		}
+		if(!function_exists('ctype_digit')){
+			$errors[]=array('error'=>'PHP module ctype is not installed.<br/>','hint'=>'Please ask your server administrator to install the module.');
+		}
 
 		return $errors;
 	}
 
+
+	/**
+	* Try to get the username the httpd server runs on, used in hints
+	*/
+        public static function checkWebserverUser(){
+		$stat=stat($_SERVER['DOCUMENT_ROOT']);
+		if(is_callable('posix_getpwuid')){
+			$serverUser=posix_getpwuid($stat['uid']);
+			$serverUser='\''.$serverUser['name'].'\'';
+		}elseif(exec('whoami')){
+                	$serverUser=exec('whoami');
+                }else{
+			$serverUser='\'www-data\' for ubuntu/debian'; //TODO: try to detect the distro and give a guess based on that
+		}
+                return $serverUser;
+        }
+
+
 	/**
 	* Check if the user is logged in, redirects to home if not
 	*/