diff --git a/core/templates/login.php b/core/templates/login.php
index aff0afac20389dc0a9cbeadcedc2c82df9b637f4..6c0a7a12227a64102ddf4af3c14e893cd9d9b0d3 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -1,5 +1,6 @@
 <form action="index.php" method="post">
 	<fieldset>
+		<?php if(!empty($_['redirect'])) { echo '<input type="hidden" name="redirect_url" value="'.$_['redirect'].'" />'; } ?>
 		<?php if($_['error']): ?>
 			<a href="./core/lostpassword/"><?php echo $l->t('Lost your password?'); ?></a>
 		<?php endif; ?>
diff --git a/index.php b/index.php
index fb8d1922dd475cadd3bf9ebd4230324f4816a646..d2d0700c577c9c92fa969423800587c79f666dbc 100644
--- a/index.php
+++ b/index.php
@@ -90,5 +90,5 @@ else {
 		}
 	}
 
-	OC_Template::printGuestPage('', 'login', array('error' => $error ));
+	OC_Template::printGuestPage('', 'login', array('error' => $error, 'redirect' => isset($_REQUEST['redirect_url'])?$_REQUEST['redirect_url']:'' ));
 }
diff --git a/lib/helper.php b/lib/helper.php
index b6332b54aea47a596a05a7fc5b624ef0575c38fc..9c2b5fc33ce463dc925a0a12b2074165aad4d5a0 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -61,7 +61,7 @@ class OC_Helper {
 		}
 
 		if($redirect_url)
-			return $urlLinkTo.'?redirect_url='.$redirect_url;
+			return $urlLinkTo.'?redirect_url='.urlencode($_SERVER["REQUEST_URI"]);
 		else
 			return $urlLinkTo;
 
diff --git a/lib/util.php b/lib/util.php
index 5d03c56f18e6ed9bbc564f5dcd1749e6ecf098da..f8748e868c114ac02130ae99ebf49936fe9f3f62 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -321,7 +321,11 @@ class OC_Util {
 	* Redirect to the user default page
 	*/
 	public static function redirectToDefaultPage(){
-		header( 'Location: '.OC::$WEBROOT.'/'.OC_Appconfig::getValue('core', 'defaultpage', 'files/index.php'));
+		if(isset($_REQUEST['redirect_url'])) {
+			header( 'Location: '.$_REQUEST['redirect_url']);
+		} else {
+			header( 'Location: '.OC::$WEBROOT.'/'.OC_Appconfig::getValue('core', 'defaultpage', 'files/index.php'));
+		}
 		exit();
 	}
 }