diff --git a/downloads/index.php b/downloads/index.php
index da7b7d0..f46f323 100644
--- a/downloads/index.php
+++ b/downloads/index.php
@@ -20,25 +20,24 @@
   $Nav = new Nav();
   $Menu = new Menu();
   include($App->getProjectCommon()); 
-	
-	
-	# Begin: page-specific settings.  Change these. 
-	$pageTitle 		= "Eclipse Scout - Downloads";
-	$pageKeywords	= "download, eclipse, scout, application framework";
-	$pageAuthor		= "BSI AG";
-	
-	
-	//Get the downloads
-	$repositoryOverviewStr = @file_get_contents(REPOSITORY_OVERVIEW, true);
+  
+  # Begin: page-specific settings.  Change these.
+  $pageTitle 		= "Eclipse Scout - Downloads";
+  $pageKeywords	= "download, eclipse, scout, application framework";
+  $pageAuthor		= "BSI AG";
+
+
+  //Get the downloads
+  $repositoryOverviewStr = @file_get_contents(REPOSITORY_OVERVIEW, true);
   if($repositoryOverviewStr) {
 	  $repOverview = new SimpleXMLElement($repositoryOverviewStr);	//TODO: test error
   } else {
 	  $repOverview = NULL;
   }
 		
-	# Paste your HTML content between the EOHTML markers!	
-	ob_start();
-	?>
+  # Paste your HTML content between the EOHTML markers!
+  ob_start();
+  ?>
 	<div id="midcolumn">
 		<h1>Downloads</h1>
 		<p>
@@ -51,69 +50,69 @@
 		</p>
 		<div style="clear: both;" class="homeitem3col" id="install">
 			<h3>Eclipse Scout versions</h3>
-<?php
-if(is_null($repOverview)) {
-	echo '<p>No version of Eclipse Scout have been found. Please report it in <a href="'.URL_ECLIPSE_SCOUT_FORUM.'">our forum</a>.</p>'."\n";
-} else {
-	foreach($repOverview->release as $release) {
-		$version = is_null($release['version']) ? "<unknown version>" : $release['version'];
-		$url = $release['url'];
-		$eclipseMinVersion = is_null($release['eclipseMinVersion']) ? 0.0 : (float)$release['eclipseMinVersion'];
-		$eclipseMaxVersion = is_null($release['eclipseMaxVersion']) ? 10.0 : (float)$release['eclipseMaxVersion'];
+  <?php
+  if(is_null($repOverview)) {
+  	echo '<p>No version of Eclipse Scout have been found. Please report it in <a href="'.URL_ECLIPSE_SCOUT_FORUM.'">our forum</a>.</p>'."\n";
+  } else {
+  	foreach($repOverview->release as $release) {
+  		$version = is_null($release['version']) ? "<unknown version>" : $release['version'];
+  		$url = $release['url'];
+  		$eclipseMinVersion = is_null($release['eclipseMinVersion']) ? 0.0 : (float)$release['eclipseMinVersion'];
+  		$eclipseMaxVersion = is_null($release['eclipseMaxVersion']) ? 10.0 : (float)$release['eclipseMaxVersion'];
 
-		echo "<h4>".$version."</h4>\n";
+  		echo "<h4>".$version."</h4>\n";
 
-		if(!is_null($url)) {
-			echo "<p>";
-			echo 'Use the update site from Eclipse (<a href="'.URL_UPDATE_SITE_HELP.'" >see how</a>):<br>';
-			echo '<a href="'.$url.'"><code>'.$url.'</code></a>';
-			echo "</p>";
-		}
-		
-		$eclipseVersions = array();
-		foreach($ECLIPSE_VERSIONS as $v) {
-			if($v['version'] >= $eclipseMinVersion && $v['version'] <= $eclipseMaxVersion) {
-				$eclipseVersions[] = $v;
-			}
-		}
-		if(count($eclipseVersions) > 0) {
-			echo "<p>Compatible Eclipse version:";
-			echo "<ul>\n";
-			foreach($eclipseVersions as $v) {
-				echo '<li><a href="'.$v['url'].'">'.$v['name'].' ('.$v['version'].')</a> '.$v['name_info'].'</li>'."\n";
-			}
-			echo "</ul></p>\n";
-		}
-		
-		if(count($release->zip) > 0) {
-			echo '<p>You can also download the files directly and install them manually (<a href="'.URL_INSTALL_MANUALLY_HELP.'" >see how</a>)</p>';
-			echo "<ul>\n";
-			date_default_timezone_set(TIME_ZONE); 
-			foreach($release->zip as $zip) {
-				if(preg_match("/([0-9]{4})([0-9]{2})([0-9]{2})-([0-9]{2})([0-9]{2})/", $zip['date'], $m) >0) {
-					$date = date_format(date_create($m[1].'-'.$m[2].'-'.$m[3].' '.$m[4].':'.$m[5]), "d.m.Y H:i");
-				} else {
-					$date = $zip['date'];
-				}
-				
-				echo '<li class="download" ><a href="'.$zip['url'].'" class="download" >'.pathinfo($zip['url'], PATHINFO_FILENAME).'</a> (<em>'.$date.'</em>)</li>'."\n";
-			}
-			echo "</ul></p>\n";
-		}
-	}
-}
-?>
-</div>
+  		if(!is_null($url)) {
+  			echo "<p>";
+  			echo 'Use the update site from Eclipse (<a href="'.URL_UPDATE_SITE_HELP.'" >see how</a>):<br>';
+  			echo '<a href="'.$url.'"><code>'.$url.'</code></a>';
+  			echo "</p>";
+  		}
+
+  		$eclipseVersions = array();
+  		foreach($ECLIPSE_VERSIONS as $v) {
+  			if($v['version'] >= $eclipseMinVersion && $v['version'] <= $eclipseMaxVersion) {
+  				$eclipseVersions[] = $v;
+  			}
+  		}
+  		if(count($eclipseVersions) > 0) {
+  			echo "<p>Compatible Eclipse version:";
+  			echo "<ul>\n";
+  			foreach($eclipseVersions as $v) {
+  				echo '<li><a href="'.$v['url'].'">'.$v['name'].' ('.$v['version'].')</a> '.$v['name_info'].'</li>'."\n";
+  			}
+  			echo "</ul></p>\n";
+  		}
+
+  		if(count($release->zip) > 0) {
+  			echo '<p>You can also download the files directly and install them manually (<a href="'.URL_INSTALL_MANUALLY_HELP.'" >see how</a>)</p>';
+  			echo "<ul>\n";
+  			date_default_timezone_set(TIME_ZONE);
+  			foreach($release->zip as $zip) {
+  				if(preg_match("/([0-9]{4})([0-9]{2})([0-9]{2})-([0-9]{2})([0-9]{2})/", $zip['date'], $m) >0) {
+  					$date = date("d.m.Y H:i", strtotime($m[1].'-'.$m[2].'-'.$m[3].' '.$m[4].':'.$m[5]));
+  				} else {
+  					$date = $zip['date'];
+  				}
+
+  				echo '<li class="download" ><a href="'.$zip['url'].'" class="download" >'.pathinfo($zip['url'], PATHINFO_FILENAME).'</a> (<em>'.$date.'</em>)</li>'."\n";
+  			}
+  			echo "</ul></p>\n";
+  		}
+  	}
+  }
+  ?>
+	</div>
 		<div style="clear: both;" class="homeitem3col" id="included">
 			<h3>Included version</h3>
 			
 			<p>Eclipse Scout is part of the release train of Eclipse Indigo (since release M5).</p>
 			
-			<p>If you work with one of this version, you can get Scout from the built-in update site:<br/><a href="<?php echo INDIGO_UPDATE_SITE; ?>"><code><?php echo INDIGO_UPDATE_SITE; ?></code></a></p>
+			<p>If you work with this version, you can get Scout from the built-in update site:<br/><a href="<?php echo INDIGO_UPDATE_SITE; ?>"><code><?php echo INDIGO_UPDATE_SITE; ?></code></a></p>
 			
 			<p><img src="<?php echo PATH_SCOUT_HOME.'img/eclipse_install_scout.png'; ?>" width="476" height="317" alt="Eclipse Install Scout"></p>
 			
-			<p>You can enter <em>Scout</em> in the filter text or browse throw the <em>Application Development Frameworks</em> category.</p>
+			<p>You can enter <em>Scout</em> in the filter text or browse through the <em>Application Development Frameworks</em> category.</p>
 		</div>
 
 		<div style="clear: both;" class="homeitem3col" id="source">
@@ -122,13 +121,10 @@
 			<p>The source code is available in the SVN repository:<br/><a href="<?php echo SOURCE_REPOSITORY; ?>"><code><?php echo SOURCE_REPOSITORY; ?></code></a></p>
 			<p>It is also possible to <a href="<?php echo URL_REPOSITORY_BROWSER; ?>">browse SVN Repository online</a>.</p>
 		</div>
-		
 	</div>
+  <?php
+  $html = ob_get_clean();
 
-	
-	<?php
-	$html = ob_get_clean();
-
-	# Generate the web page
-	$App->generatePage('Nova', $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-?>
\ No newline at end of file
+  # Generate the web page
+  $App->generatePage('Nova', $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+  ?>
\ No newline at end of file
