diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb
index 1c50c66e5f6df2a43eec91e65814ac94da758467..7c5739936cd917c183e7a769d66f7b656bb5738c 100644
--- a/app/controllers/dashboard_controller.rb
+++ b/app/controllers/dashboard_controller.rb
@@ -1,6 +1,37 @@
 class DashboardController < ApplicationController
+  respond_to :js, :html
+
   def index
     @projects = current_user.projects.all
     @active_projects = @projects.select(&:last_activity_date).sort_by(&:last_activity_date).reverse
+
+    respond_to do |format|
+      format.html
+      format.js { no_cache_headers }
+    end
+  end
+
+  def merge_requests
+    @projects = current_user.projects.all
+    @merge_requests = current_user.assigned_merge_requests.order("created_at DESC").limit(40)
+
+    respond_to do |format|
+      format.html
+      format.js { no_cache_headers }
+    end
+  end
+
+  def issues
+    @projects = current_user.projects.all
+    @user   = current_user
+    @issues = current_user.assigned_issues.opened.order("created_at DESC").limit(40)
+
+    @issues = @issues.includes(:author, :project)
+
+    respond_to do |format|
+      format.html
+      format.js { no_cache_headers }
+      format.atom { render :layout => false }
+    end
   end
 end
diff --git a/app/controllers/user_issues_controller.rb b/app/controllers/user_issues_controller.rb
deleted file mode 100644
index d7613aa090d5f63013da42277d065860bde051c2..0000000000000000000000000000000000000000
--- a/app/controllers/user_issues_controller.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-class UserIssuesController < ApplicationController
-  before_filter :authenticate_user!
-
-  respond_to :js, :html
-
-  def index
-    @projects = current_user.projects.all
-    @user   = current_user
-    @issues = current_user.assigned_issues.opened
-
-    @issues = @issues.includes(:author, :project)
-
-    respond_to do |format|
-      format.html
-      format.js
-      format.atom { render :layout => false }
-    end
-  end
-
-end
diff --git a/app/controllers/user_merge_requests_controller.rb b/app/controllers/user_merge_requests_controller.rb
deleted file mode 100644
index 879499e10134e2a9bf8be3f859ae7d31643da1c3..0000000000000000000000000000000000000000
--- a/app/controllers/user_merge_requests_controller.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-class UserMergeRequestsController < ApplicationController
-  before_filter :authenticate_user!
-
-  def index
-    @projects = current_user.projects.all
-    @merge_requests = current_user.assigned_merge_requests
-  end
-end
diff --git a/app/views/dashboard/_issues_feed.html.haml b/app/views/dashboard/_issues_feed.html.haml
index bd0d144d930b1bde5558c7bc44923dfab6a6a884..5945a370d37849d2e8910ea4fac688bb450df577 100644
--- a/app/views/dashboard/_issues_feed.html.haml
+++ b/app/views/dashboard/_issues_feed.html.haml
@@ -1,28 +1,31 @@
-#news-feed.news-feed
-  %div
-    = link_to dashboard_path, :class => "left" do 
-      .box-arrow
-        &larr;
-    %h2{:style => "width:86%; text-align:center"}
-      Issues
-    = link_to merge_requests_path, :class => "right" do 
-      .box-arrow 
-        &rarr;
+%div
+  = link_to dashboard_path, :remote => true, :class => "left" do 
+    .box-arrow
+      &larr;
+  %h2{:style => "width:86%; text-align:center"}
+    Issues
+  = link_to dashboard_merge_requests_path, :remote => true, :class => "right" do 
+    .box-arrow 
+      &rarr;
 
 
+#feeds_content_holder
   .project-box.project-updates.ui-box.ui-box-small.ui-box-big
     .data
       - @issues.each do |update|
         %a.project-update{:href => dashboard_feed_path(update.project, update)}
           = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
           %span.update-title
-            = dashboard_feed_title(update)
+            = truncate update.title, :length => 50
+            .right= update.project.name
           %span.update-author
             %strong= update.author_name
             authored
             = time_ago_in_words(update.created_at)
             ago
           .right
-            - klass = update.class.to_s.split("::").last.downcase
-            %span.tag{ :class => klass }= klass
+            - if update.critical
+              %span.tag.high critical
+            - if update.today?
+              %span.tag.today today
 
diff --git a/app/views/dashboard/_merge_requests_feed.html.haml b/app/views/dashboard/_merge_requests_feed.html.haml
index 7443d5fa2f80d1e0d483e52eab6a2367af05e2bb..22a7e703a318a2d23ea07b94a67cc5aaf45abc35 100644
--- a/app/views/dashboard/_merge_requests_feed.html.haml
+++ b/app/views/dashboard/_merge_requests_feed.html.haml
@@ -1,27 +1,28 @@
-#news-feed.news-feed
-  %div
-    = link_to issues_path, :class => "left" do 
-      .box-arrow
-        &larr;
-    %h2{:style => "width:86%; text-align:center"}
-      Merge Requests
-    = link_to dashboard_path, :class => "right" do 
-      .box-arrow 
-        &rarr;
+%div
+  = link_to dashboard_issues_path, :remote => true, :class => "left" do 
+    .box-arrow
+      &larr;
+  %h2{:style => "width:86%; text-align:center"}
+    Merge Requests
+  = link_to dashboard_path, :remote => true, :class => "right" do 
+    .box-arrow 
+      &rarr;
 
+#feeds_content_holder
   .project-box.project-updates.ui-box.ui-box-small.ui-box-big
     .data
       - @merge_requests.each do |update|
-        %a.project-update{:href => dashboard_feed_path(update.project, update)}
+        %a.project-update{:href => project_merge_request_path(update.project, update)}
           = image_tag gravatar_icon(update.author_email), :class => "left", :width => 40
           %span.update-title
-            = dashboard_feed_title(update)
+            = truncate update.title, :length => 70
+            .right= update.project.name
           %span.update-author
             %strong= update.author_name
             authored
             = time_ago_in_words(update.created_at)
             ago
           .right
-            - klass = update.class.to_s.split("::").last.downcase
-            %span.tag{ :class => klass }= klass
-
+            %span.tag.commit= update.source_branch
+            &rarr;
+            %span.tag.commit= update.target_branch
diff --git a/app/views/dashboard/_projects_feed.html.haml b/app/views/dashboard/_projects_feed.html.haml
index 7fe93240fd695aea7d2ae0084f6274b25282caf4..bae5fbfb595baad6d53c3b18a7b7c8ec0d720c0b 100644
--- a/app/views/dashboard/_projects_feed.html.haml
+++ b/app/views/dashboard/_projects_feed.html.haml
@@ -1,14 +1,14 @@
-#news-feed.news-feed
-  %div
-    = link_to merge_requests_path, :class => "left" do 
-      .box-arrow
-        &larr;
-    %h2{:style => "width:86%; text-align:center"}
-      Activities
-    = link_to issues_path, :class => "right" do 
-      .box-arrow 
-        &rarr;
+%div
+  = link_to dashboard_merge_requests_path, :remote => true, :class => "left", :id => "merge_requests_slide" do 
+    .box-arrow
+      &larr;
+  %h2{:style => "width:86%; text-align:center"}
+    Activities
+  = link_to dashboard_issues_path, :remote => true, :class => "right", :id => "issues_slide" do 
+    .box-arrow 
+      &rarr;
 
+#feeds_content_holder
   - @active_projects.first(3).each do |project|
     .project-box.project-updates.ui-box.ui-box-small.ui-box-big
       = link_to project, do 
diff --git a/app/views/dashboard/_sidebar.html.haml b/app/views/dashboard/_sidebar.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..337c1541a3efa503ef057d4cb93e8cd0eae422e6
--- /dev/null
+++ b/app/views/dashboard/_sidebar.html.haml
@@ -0,0 +1,15 @@
+%aside
+  %h4
+    - if current_user.can_create_project?
+      %a.button-small.button-green{:href => new_project_path} New Project
+    Your Projects
+  %ol.project-list
+    - @projects.each do |project|
+      %li
+        %a{:href => project_path(project)}
+          %span.arrow →
+          %span.project-name= project.name
+          %span.time
+            %strong Last activity:
+            = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
+
diff --git a/app/views/dashboard/index.html.haml b/app/views/dashboard/index.html.haml
index 2c934998f68d3347799473f6ad5eda3a021d0609..b3de30f2ecda7a5fe9ce1310253f44e7c0d8fda8 100644
--- a/app/views/dashboard/index.html.haml
+++ b/app/views/dashboard/index.html.haml
@@ -1,18 +1,5 @@
 - content_for(:body_class, "dashboard-page")
 
 #dashboard-content.dashboard-content.content
-  %aside
-    %h4
-      - if current_user.can_create_project?
-        %a.button-small.button-green{:href => new_project_path} New Project
-      Your Projects
-    %ol.project-list
-      - @projects.each do |project|
-        %li
-          %a{:href => project_path(project)}
-            %span.arrow →
-            %span.project-name= project.name
-            %span.time
-              %strong Last activity:
-              = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
-  = render "dashboard/projects_feed"
+  = render "dashboard/sidebar"
+  #news-feed.news-feed= render "dashboard/projects_feed"
diff --git a/app/views/dashboard/index.js.haml b/app/views/dashboard/index.js.haml
new file mode 100644
index 0000000000000000000000000000000000000000..44b3b801f7be3e4d65679702d0dc1b1c498d6297
--- /dev/null
+++ b/app/views/dashboard/index.js.haml
@@ -0,0 +1,7 @@
+:plain
+  $("#feeds_content_holder").hide("slide", { direction: "left" }, 150, function(){
+    $("#news-feed").html("#{escape_javascript(render(:partial => "projects_feed"))}");
+    $("#feeds_content_holder").show("slide", { direction: "right" }, 150);
+    history.pushState({ path: this.path }, '', '#{dashboard_path}')
+  });
+
diff --git a/app/views/user_issues/index.atom.builder b/app/views/dashboard/issues.atom.builder
similarity index 70%
rename from app/views/user_issues/index.atom.builder
rename to app/views/dashboard/issues.atom.builder
index 42fc5245f7200b88305e4e2833732210f7421067..5bd07bcd89ff2352c63d43feb9c3d71cdad6e495 100644
--- a/app/views/user_issues/index.atom.builder
+++ b/app/views/dashboard/issues.atom.builder
@@ -1,9 +1,9 @@
 xml.instruct!
 xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
   xml.title   "#{@user.name} issues"
-  xml.link    :href => issues_url(:atom, :private_token => @user.private_token), :rel => "self", :type => "application/atom+xml"
-  xml.link    :href => issues_url(:private_token => @user.private_token), :rel => "alternate", :type => "text/html"
-  xml.id      issues_url(:private_token => @user.private_token)
+  xml.link    :href => dashboard_issues_url(:atom, :private_token => @user.private_token), :rel => "self", :type => "application/atom+xml"
+  xml.link    :href => dashboard_issues_url(:private_token => @user.private_token), :rel => "alternate", :type => "text/html"
+  xml.id      dashboard_issues_url(:private_token => @user.private_token)
   xml.updated @issues.first.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") if @issues.any?
 
   @issues.each do |issue|
diff --git a/app/views/dashboard/issues.html.haml b/app/views/dashboard/issues.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..063183ed0d1088d7e4db5e75997fb539e8b6df42
--- /dev/null
+++ b/app/views/dashboard/issues.html.haml
@@ -0,0 +1,5 @@
+- content_for(:body_class, "dashboard-page")
+
+#dashboard-content.dashboard-content.content
+  = render "dashboard/sidebar"
+  #news-feed.news-feed= render "dashboard/issues_feed"
diff --git a/app/views/dashboard/issues.js.haml b/app/views/dashboard/issues.js.haml
new file mode 100644
index 0000000000000000000000000000000000000000..30a71af6c724f61fe07841d12a672440f6152c52
--- /dev/null
+++ b/app/views/dashboard/issues.js.haml
@@ -0,0 +1,7 @@
+:plain
+  $("#feeds_content_holder").hide("slide", { direction: "left" }, 150, function(){
+    $("#news-feed").html("#{escape_javascript(render(:partial => "issues_feed"))}");
+    $("#feeds_content_holder").show("slide", { direction: "right" }, 150);
+    history.pushState({ path: this.path }, '', '#{dashboard_issues_path}')
+  });
+
diff --git a/app/views/dashboard/merge_requests.html.haml b/app/views/dashboard/merge_requests.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..088577eaf500cf86924c95e2cd8d342649bbc85e
--- /dev/null
+++ b/app/views/dashboard/merge_requests.html.haml
@@ -0,0 +1,5 @@
+- content_for(:body_class, "dashboard-page")
+
+#dashboard-content.dashboard-content.content
+  = render "dashboard/sidebar"
+  #news-feed.news-feed= render "dashboard/merge_requests_feed"
diff --git a/app/views/dashboard/merge_requests.js.haml b/app/views/dashboard/merge_requests.js.haml
new file mode 100644
index 0000000000000000000000000000000000000000..81d3424b5d0f39395cca9ade7864cc366f3c5913
--- /dev/null
+++ b/app/views/dashboard/merge_requests.js.haml
@@ -0,0 +1,7 @@
+:plain
+  $("#feeds_content_holder").hide("slide", { direction: "left" }, 150, function(){
+    $("#news-feed").html("#{escape_javascript(render(:partial => "merge_requests_feed"))}");
+    $("#feeds_content_holder").show("slide", { direction: "right" }, 150);
+    history.pushState({ path: this.path }, '', '#{dashboard_merge_requests_path}')
+  });
+
diff --git a/app/views/merge_requests/_merge_request.html.haml b/app/views/merge_requests/_merge_request.html.haml
index ef290833a2767ee07a09dc8a02b8210c3258ef17..937af5b98d8aa57a5bed9422fd0eaa2e1c1abc3e 100644
--- a/app/views/merge_requests/_merge_request.html.haml
+++ b/app/views/merge_requests/_merge_request.html.haml
@@ -3,9 +3,6 @@
   %span.update-title
     = merge_request.title
   %span.update-author
-    - if not @project.present?
-      %strong= merge_request.project.name
-      = '-'
     %strong= merge_request.author_name
     authored
     = time_ago_in_words(merge_request.created_at)
diff --git a/app/views/user_issues/index.html.haml b/app/views/user_issues/index.html.haml
deleted file mode 100644
index d2c745e8c31396c0c599273b05d5ff7b6a9b1fc9..0000000000000000000000000000000000000000
--- a/app/views/user_issues/index.html.haml
+++ /dev/null
@@ -1,18 +0,0 @@
-- content_for(:body_class, "dashboard-page")
-
-#dashboard-content.dashboard-content.content
-  %aside
-    %h4
-      - if current_user.can_create_project?
-        %a.button-small.button-green{:href => new_project_path} New Project
-      Your Projects
-    %ol.project-list
-      - @projects.each do |project|
-        %li
-          %a{:href => project_path(project)}
-            %span.arrow →
-            %span.project-name= project.name
-            %span.time
-              %strong Last activity:
-              = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
-  = render "dashboard/issues_feed"
diff --git a/app/views/user_merge_requests/index.html.haml b/app/views/user_merge_requests/index.html.haml
deleted file mode 100644
index 75d56bf5e44e9bd00378f50b2506b682a2ef2573..0000000000000000000000000000000000000000
--- a/app/views/user_merge_requests/index.html.haml
+++ /dev/null
@@ -1,18 +0,0 @@
-- content_for(:body_class, "dashboard-page")
-
-#dashboard-content.dashboard-content.content
-  %aside
-    %h4
-      - if current_user.can_create_project?
-        %a.button-small.button-green{:href => new_project_path} New Project
-      Your Projects
-    %ol.project-list
-      - @projects.each do |project|
-        %li
-          %a{:href => project_path(project)}
-            %span.arrow →
-            %span.project-name= project.name
-            %span.time
-              %strong Last activity:
-              = project.last_activity_date ? time_ago_in_words(project.last_activity_date) + " ago" : "Never"
-  = render "dashboard/merge_requests_feed"
diff --git a/config/routes.rb b/config/routes.rb
index a49aa7a21b61bd8e508948c39d9f99ac5d2800cc..27d0612de030bcc6e58550b11565118c345a4fb7 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,6 +1,5 @@
 Gitlab::Application.routes.draw do
 
-  get "user_issues/index"
 
   get 'tags'=> 'tags#index'
   get 'tags/:tag' => 'projects#index'
@@ -22,9 +21,10 @@
   put "profile/reset_private_token", :to => "profile#reset_private_token"
   put "profile/edit", :to => "profile#social_update"
   get "profile", :to => "profile#show"
+
   get "dashboard", :to => "dashboard#index"
-  get "issues", :to => "user_issues#index", :as => "issues"
-  get "merge_requests", :to => "user_merge_requests#index", :as => "merge_requests"
+  get "dashboard/issues", :to => "dashboard#issues"
+  get "dashboard/merge_requests", :to => "dashboard#merge_requests"
 
   #get "profile/:id", :to => "profile#show"
 
diff --git a/spec/requests/dashboard_issues_spec.rb b/spec/requests/dashboard_issues_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b9304512457ff8b4ec41abed190d374f4205d045
--- /dev/null
+++ b/spec/requests/dashboard_issues_spec.rb
@@ -0,0 +1,58 @@
+require 'spec_helper'
+
+describe "User Issues Dashboard", :js => true do
+  describe "GET /issues" do
+    before do
+
+      login_as :user
+
+      @project1 = Factory :project,
+        :path => "project1",
+        :code => "TEST1"
+
+      @project2 = Factory :project,
+        :path => "project2",
+        :code => "TEST2"
+
+      @project1.add_access(@user, :read, :write)
+      @project2.add_access(@user, :read, :write)
+
+      @issue1 = Factory :issue,
+        :author => @user,
+        :assignee => @user,
+        :project => @project1
+
+      @issue2 = Factory :issue,
+        :author => @user,
+        :assignee => @user,
+        :project => @project2
+
+      visit dashboard_path
+      click_link "issues_slide"
+    end
+
+    subject { page }
+
+    it { should have_content(@issue1.title[0..10]) }
+    it { should have_content(@issue1.project.name) }
+    it { should have_content(@issue1.assignee.name) }
+
+    it { should have_content(@issue2.title[0..10]) }
+    it { should have_content(@issue2.project.name) }
+    it { should have_content(@issue2.assignee.name) }
+
+    describe "atom feed", :js => false do
+      it "should render atom feed via private token" do
+        logout
+        visit dashboard_issues_path(:atom, :private_token => @user.private_token)
+
+        page.response_headers['Content-Type'].should have_content("application/atom+xml")
+        page.body.should have_selector("title", :text => "#{@user.name} issues")
+        page.body.should have_selector("author email", :text => @issue1.author_email)
+        page.body.should have_selector("entry summary", :text => @issue1.title)
+        page.body.should have_selector("author email", :text => @issue2.author_email)
+        page.body.should have_selector("entry summary", :text => @issue2.title)
+      end
+    end
+  end
+end
diff --git a/spec/requests/user_merge_requests_spec.rb b/spec/requests/dashboard_merge_requests_spec.rb
similarity index 91%
rename from spec/requests/user_merge_requests_spec.rb
rename to spec/requests/dashboard_merge_requests_spec.rb
index fb47f3dd4ab7d4bde530252f9b8b55af2cda673e..2706497044b886740ebe6ceae5da1d3786ff9216 100644
--- a/spec/requests/user_merge_requests_spec.rb
+++ b/spec/requests/dashboard_merge_requests_spec.rb
@@ -1,6 +1,6 @@
 require 'spec_helper'
 
-describe "User MergeRequests" do
+describe "User MergeRequests", :js => true do
   describe "GET /issues" do
     before do
 
@@ -27,7 +27,8 @@
         :assignee => @user,
         :project => @project2
 
-      visit merge_requests_path
+      visit dashboard_path
+      click_link "merge_requests_slide"
     end
 
     subject { page }
diff --git a/spec/requests/issues_spec.rb b/spec/requests/issues_spec.rb
index 29dc473939fbf812b3ee6f0a8fe100fe54546e71..a2ad68d0cb9c21dd6fd24634c2171d85f5182082 100644
--- a/spec/requests/issues_spec.rb
+++ b/spec/requests/issues_spec.rb
@@ -23,7 +23,7 @@
 
     subject { page }
 
-    it { should have_content(@issue.title) }
+    it { should have_content(@issue.title[0..20]) }
     it { should have_content(@issue.project.name) }
     it { should have_content(@issue.assignee.name) }
 
diff --git a/spec/requests/user_issues_spec.rb b/spec/requests/user_issues_spec.rb
deleted file mode 100644
index bd29eae303dc5a6892eb749880ffcad82efa44d4..0000000000000000000000000000000000000000
--- a/spec/requests/user_issues_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require 'spec_helper'
-
-describe "User Issues Dashboard" do
-  describe "GET /issues" do
-    before do
-
-      login_as :user
-
-      @project1 = Factory :project,
-        :path => "project1",
-        :code => "TEST1"
-
-      @project2 = Factory :project,
-        :path => "project2",
-        :code => "TEST2"
-
-      @project1.add_access(@user, :read, :write)
-      @project2.add_access(@user, :read, :write)
-
-      @issue1 = Factory :issue,
-        :author => @user,
-        :assignee => @user,
-        :project => @project1
-
-      @issue2 = Factory :issue,
-        :author => @user,
-        :assignee => @user,
-        :project => @project2
-
-      visit issues_path
-    end
-
-    subject { page }
-
-    it { should have_content(@issue1.title) }
-    it { should have_content(@issue1.project.name) }
-    it { should have_content(@issue1.assignee.name) }
-
-    it { should have_content(@issue2.title) }
-    it { should have_content(@issue2.project.name) }
-    it { should have_content(@issue2.assignee.name) }
-
-    it "should render atom feed via private token" do
-      logout
-      visit issues_path(:atom, :private_token => @user.private_token)
-
-      page.response_headers['Content-Type'].should have_content("application/atom+xml")
-      page.body.should have_selector("title", :text => "#{@user.name} issues")
-      page.body.should have_selector("author email", :text => @issue1.author_email)
-      page.body.should have_selector("entry summary", :text => @issue1.title)
-      page.body.should have_selector("author email", :text => @issue2.author_email)
-      page.body.should have_selector("entry summary", :text => @issue2.title)
-    end
-  end
-end