diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css
index 47ec5f5a91fb169ad6e65cc327e414d4b4d1adfc..3a5af7c65de3669df82af818a0a0ed84b4292aa5 100644
--- a/app/assets/stylesheets/application.css
+++ b/app/assets/stylesheets/application.css
@@ -49,3 +49,4 @@
 .no-padding { 
   padding:0 !important;
 }
+
diff --git a/app/assets/stylesheets/projects.css.scss b/app/assets/stylesheets/projects.css.scss
index fb37d6cd58de0f3fb5275e34cb121868ff7627b7..4f3e98949f590f4e487efe37da705d2305cc0084 100644
--- a/app/assets/stylesheets/projects.css.scss
+++ b/app/assets/stylesheets/projects.css.scss
@@ -426,3 +426,39 @@ body.project-page table.no-borders tr,
 body.project-page table.no-borders td{ 
   border:none;
 }
+
+#gitlab-tabs { 
+  .ui-tabs-nav {
+    border-bottom: 1px solid #DEDFE1;
+
+    li { 
+      background: none;
+      border:none;
+      font-size: 16px;
+      margin: 0;
+      padding: 0;
+
+      a { 
+        margin: 0;
+        padding: 10px 16px;
+        width:150px;
+      }
+
+      &.ui-tabs-selected { 
+        background-image: -webkit-gradient(linear, 0 0, 0 26, color-stop(0.076, #fefefe), to(#F6F7F8));
+        background-image: -webkit-linear-gradient(#fefefe 7.6%, #F6F7F8);
+        background-image: -moz-linear-gradient(#fefefe 7.6%, #F6F7F8);
+        background-image: -o-linear-gradient(#fefefe 7.6%, #F6F7F8);
+        font-weight: bold;
+        border:1px solid #DEDFE1;
+        border-bottom: 1px solid #DEDFE1;
+        -webkit-border-top-left-radius: 5px;
+        -webkit-border-top-right-radius: 5px;
+        -moz-border-radius-topleft: 5px;
+        -moz-border-radius-topright: 5px;
+        border-top-left-radius: 5px;
+        border-top-right-radius: 5px;
+      }
+    } 
+  } 
+}
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index 9238716050574239fd72999c0560c2eca84f7e78..c83423edaa7f7b8555dd5ed16901718f4d1561be 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -1,7 +1,7 @@
 class MergeRequestsController < ApplicationController
   before_filter :authenticate_user!
   before_filter :project
-  before_filter :merge_request, :only => [:edit, :update, :destroy, :show]
+  before_filter :merge_request, :only => [:edit, :update, :destroy, :show, :commits, :diffs]
   layout "project"
 
   # Authorize
@@ -19,7 +19,24 @@ class MergeRequestsController < ApplicationController
       head(404)and return 
     end
 
+    @notes = @merge_request.notes.inc_author.order("created_at DESC").limit(20)
+    @note = @project.notes.new(:noteable => @merge_request)
+
+    respond_to do |format|
+      format.html
+      format.js { respond_with_notes }
+    end
+  end
+
+  def commits
     @commits = @project.repo.commits_between(@merge_request.target_branch, @merge_request.source_branch).map {|c| Commit.new(c)}
+    render :template => "merge_requests/_commits", :layout => false
+  end
+
+  def diffs
+    @commit = @project.commit(@merge_request.source_branch)
+    @diffs = @project.repo.diff(@merge_request.target_branch, @merge_request.source_branch)
+    render :template => "merge_requests/_diffs", :layout => false
   end
 
   def new
diff --git a/app/views/merge_requests/_commits.html.haml b/app/views/merge_requests/_commits.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..508aa2311f94af38a7beeda3cbd57653a4706fde
--- /dev/null
+++ b/app/views/merge_requests/_commits.html.haml
@@ -0,0 +1,17 @@
+- if @commits.size > 0
+  .merge-request-commits.ui-box.width-100p
+    - @commits.each do |commit|
+      %a{ :class => "commit", :href => project_commit_path(@project, :id => commit.id) }
+        - if commit.author_email
+          = image_tag gravatar_icon(commit.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
+        - else
+          = image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"
+        %span.update-title
+          = truncate commit.safe_message, :length => 60
+        %span.update-author
+          %strong= commit.author_name
+          authored
+          = time_ago_in_words(commit.created_at)
+          ago
+  .clear
+
diff --git a/app/views/merge_requests/_diffs.html.haml b/app/views/merge_requests/_diffs.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..eb44de68c71168df0a82f9a4ecf1b531bef49109
--- /dev/null
+++ b/app/views/merge_requests/_diffs.html.haml
@@ -0,0 +1,22 @@
+- @diffs.each do |diff|
+  - next if diff.diff.empty?
+  - file = (@commit.tree / diff.b_path)
+  - next unless file
+  .diff_file
+    .diff_file_header
+      - if diff.deleted_file
+        %strong{:id => "#{diff.b_path}"}= diff.a_path
+      - else
+        = link_to tree_file_project_ref_path(@project, @commit.id, diff.b_path) do
+          %strong{:id => "#{diff.b_path}"}= diff.b_path
+      %br/
+    .diff_file_content
+      - if file.text?
+        = render :partial => "commits/text_file", :locals => { :diff => diff }
+      - elsif file.image?
+        .diff_file_content_image
+          %img{:src => "data:#{file.mime_type};base64,#{Base64.encode64(file.data)}"}
+      - else
+        %p
+          %center No preview for this file type
+
diff --git a/app/views/merge_requests/_form.html.haml b/app/views/merge_requests/_form.html.haml
index 8c0ca202dba1fd9577d18613477cb812f083c615..d0848e649c8e4d5cd5cd4e0e3693ad2605108126 100644
--- a/app/views/merge_requests/_form.html.haml
+++ b/app/views/merge_requests/_form.html.haml
@@ -18,11 +18,11 @@
             %td= f.label :title
             %td= f.text_field :title
           %tr
-            %td= f.label :target_branch, "From"
-            %td= f.select(:target_branch, @project.heads.map(&:name), { :include_blank => "Select branch" })
-          %tr
-            %td= f.label :source_branch, "To"
+            %td= f.label :source_branch, "From"
             %td= f.select(:source_branch, @project.heads.map(&:name), { :include_blank => "Select branch" })
+          %tr
+            %td= f.label :target_branch, "To"
+            %td= f.select(:target_branch, @project.heads.map(&:name), { :include_blank => "Select branch" })
           %tr
             %td= f.label :assignee_id, "Assign to"
             %td= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" })
diff --git a/app/views/merge_requests/show.html.haml b/app/views/merge_requests/show.html.haml
index 5ee56cae8924aa606ce25ee4f9f6be528cd366d9..96afb47afd0afba8a40ec58a75335241399f3092 100644
--- a/app/views/merge_requests/show.html.haml
+++ b/app/views/merge_requests/show.html.haml
@@ -40,20 +40,20 @@
 %br
 %br
 
+#gitlab-tabs
+  %ul
+    %li= link_to "Notes", "#merge-notes"
+    %li= link_to "Commits", commits_project_merge_request_path(@project, @merge_request)
+    %li= link_to "Diff", diffs_project_merge_request_path(@project, @merge_request)
 
-- if @commits.size > 0
-  .merge-request-commits.ui-box.width-100p
-    - @commits.each do |commit|
-      %a{ :class => "commit", :href => project_commit_path(@project, :id => commit.id) }
-        - if commit.author_email
-          = image_tag gravatar_icon(commit.author_email), :class => "left", :width => 40, :style => "padding-right:5px;"
-        - else
-          = image_tag "no_avatar.png", :class => "left", :width => 40, :style => "padding-right:5px;"
-        %span.update-title
-          = commit.id.to_s
-        %span.update-author
-          %strong= commit.author_name
-          authored
-          = time_ago_in_words(commit.created_at)
-          ago
-  .clear
+  #merge-notes
+    .issue_notes= render "notes/notes"
+    .loading{ :style => "display:none;"}
+      %center= image_tag "ajax-loader.gif"
+    .clear
+
+
+:javascript
+  $(function(){
+    $("#gitlab-tabs").tabs();
+  })
diff --git a/config/routes.rb b/config/routes.rb
index 1426d5f26ff7677be5822f0bd7f1853c8964be66..c74cf2268e03ad404ab9fef1d4f8ca965cf21fa1 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -59,7 +59,12 @@ Gitlab::Application.routes.draw do
       end
     end
 
-    resources :merge_requests
+    resources :merge_requests do 
+      member do 
+        get :diffs
+        get :commits
+      end
+    end
     resources :snippets
     resources :commits
     resources :team_members