diff --git a/app/controllers/projects/snippets_controller.rb b/app/controllers/projects/snippets_controller.rb
index a2e22a670a31ed44910c6b11edc0e72daf154a5d..7c3281084f78f1fc7b03294187177a9731a1db1a 100644
--- a/app/controllers/projects/snippets_controller.rb
+++ b/app/controllers/projects/snippets_controller.rb
@@ -1,4 +1,4 @@
-class SnippetsController < ProjectResourceController
+class Projects::SnippetsController < Projects::ApplicationController
   before_filter :module_enabled
   before_filter :snippet, only: [:show, :edit, :destroy, :update, :raw]
 
diff --git a/app/views/projects/snippets/_blob.html.haml b/app/views/projects/snippets/_blob.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..017a33b34f343fdba99596bf6cdecaff8e8a2ca6
--- /dev/null
+++ b/app/views/projects/snippets/_blob.html.haml
@@ -0,0 +1,12 @@
+.file_holder
+  .file_title
+    %i.icon-file
+    %strong= @snippet.file_name
+    %span.options
+      = link_to "raw", raw_project_snippet_path(@project, @snippet), class: "btn btn-tiny", target: "_blank"
+  .file_content.code
+    - unless @snippet.content.empty?
+      %div{class: user_color_scheme_class}
+        = raw @snippet.colorize(formatter: :gitlab)
+    - else
+      %p.nothing_here_message Empty file
diff --git a/app/views/projects/snippets/_form.html.haml b/app/views/projects/snippets/_form.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..77162cdcde338beb2c54be39ac765e6961b31a15
--- /dev/null
+++ b/app/views/projects/snippets/_form.html.haml
@@ -0,0 +1,41 @@
+%h3.page_title
+  = @snippet.new_record? ? "New Snippet" : "Edit Snippet ##{@snippet.id}"
+%hr
+.snippet-form-holder
+  = form_for [@project, @snippet] do |f|
+    -if @snippet.errors.any?
+      .alert.alert-error
+        %ul
+          - @snippet.errors.full_messages.each do |msg|
+            %li= msg
+
+    .clearfix
+      = f.label :title
+      .input= f.text_field :title, placeholder: "Example Snippet", class: 'input-xlarge', required: true
+    .clearfix
+      = f.label "Lifetime"
+      .input= f.select :expires_at, lifetime_select_options, {}, {class: 'chosen span2'}
+    .clearfix
+      .file-editor
+        = f.label :file_name, "File"
+        .input
+          .file_holder.snippet
+            .file_title
+              = f.text_field :file_name, placeholder: "example.rb", class: 'snippet-file-name', required: true
+            .file_content.code
+              %pre#editor= @snippet.content
+              = f.hidden_field :content, class: 'snippet-file-content'
+
+    .form-actions
+      = f.submit 'Save', class: "btn-save btn"
+      = link_to "Cancel", project_snippets_path(@project), class: " btn"
+      - unless @snippet.new_record?
+        .pull-right= link_to 'Destroy', [@project, @snippet], confirm: 'Are you sure?', method: :delete, class: "btn pull-right danger delete-snippet", id: "destroy_snippet_#{@snippet.id}"
+
+
+:javascript
+  var editor = ace.edit("editor");
+  $(".snippet-form-holder form").submit(function(){
+    $(".snippet-file-content").val(editor.getValue());
+  });
+
diff --git a/app/views/projects/snippets/_snippet.html.haml b/app/views/projects/snippets/_snippet.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..a576500c15dd2f6676862d6432d2da0d50a0f71d
--- /dev/null
+++ b/app/views/projects/snippets/_snippet.html.haml
@@ -0,0 +1,13 @@
+%tr
+  %td
+    = image_tag gravatar_icon(snippet.author_email), class: "avatar s24"
+    %a{href: project_snippet_path(snippet.project, snippet)}
+      %strong= truncate(snippet.title, length: 60)
+  %td
+    = snippet.file_name
+  %td
+    %span.cgray
+      - if snippet.expires_at
+        = snippet.expires_at.to_date.to_s(:short)
+      - else
+        Never
diff --git a/app/views/projects/snippets/edit.html.haml b/app/views/projects/snippets/edit.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..f81c0b8bc647a76eda32278b880a9ce6f7890469
--- /dev/null
+++ b/app/views/projects/snippets/edit.html.haml
@@ -0,0 +1 @@
+= render "snippets/form"
diff --git a/app/views/projects/snippets/index.html.haml b/app/views/projects/snippets/index.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..bacf23d8f8de33de5858ba58cb32e6c74903919a
--- /dev/null
+++ b/app/views/projects/snippets/index.html.haml
@@ -0,0 +1,19 @@
+%h3.page_title
+  Snippets
+  %small share code pastes with others out of git repository
+
+  - if can? current_user, :write_snippet, @project
+    = link_to new_project_snippet_path(@project), class: "btn btn-small add_new pull-right", title: "New Snippet" do
+      Add new snippet
+%br
+%table
+  %thead
+    %tr
+      %th Title
+      %th File Name
+      %th Expires At
+  = render @snippets
+  - if @snippets.empty?
+    %tr
+      %td{colspan: 3}
+        %h3.nothing_here_message Nothing here.
diff --git a/app/views/projects/snippets/new.html.haml b/app/views/projects/snippets/new.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..f81c0b8bc647a76eda32278b880a9ce6f7890469
--- /dev/null
+++ b/app/views/projects/snippets/new.html.haml
@@ -0,0 +1 @@
+= render "snippets/form"
diff --git a/app/views/projects/snippets/show.html.haml b/app/views/projects/snippets/show.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..12534edf8ba5b5b556d2b9b8f6e951f88f03aa6c
--- /dev/null
+++ b/app/views/projects/snippets/show.html.haml
@@ -0,0 +1,9 @@
+%h3.page_title
+  = @snippet.title
+  %small= @snippet.file_name
+  - if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
+    = link_to "Edit", edit_project_snippet_path(@project, @snippet), class: "btn btn-small pull-right", title: 'Edit Snippet'
+
+%br
+%div= render 'blob'
+%div#notes= render "notes/notes_with_form"
diff --git a/config/routes.rb b/config/routes.rb
index 0028baf8d530c9dcacc228d67dd5c92a55f987f5..d87dd4abdb0cb3510a7ebd18a90bcca2375c9ab1 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -244,9 +244,11 @@ Gitlab::Application.routes.draw do
       end
     end
 
-    resources :snippets do
-      member do
-        get "raw"
+    scope module: :projects do
+      resources :snippets do
+        member do
+          get "raw"
+        end
       end
     end
 
diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb
index 41533f8b4feb88a75bcadc37f0fae6a5025ba417..059abe149618be835b8cf6e4a2c64efe0a65e0a5 100644
--- a/spec/routing/project_routing_spec.rb
+++ b/spec/routing/project_routing_spec.rb
@@ -249,13 +249,37 @@ end
 #      project_snippet GET    /:project_id/snippets/:id(.:format)      snippets#show
 #                      PUT    /:project_id/snippets/:id(.:format)      snippets#update
 #                      DELETE /:project_id/snippets/:id(.:format)      snippets#destroy
-describe SnippetsController, "routing" do
+describe Project::SnippetsController, "routing" do
   it "to #raw" do
-    get("/gitlabhq/snippets/1/raw").should route_to('snippets#raw', project_id: 'gitlabhq', id: '1')
+    get("/gitlabhq/snippets/1/raw").should route_to('projects/snippets#raw', project_id: 'gitlabhq', id: '1')
   end
 
-  it_behaves_like "RESTful project resources" do
-    let(:controller) { 'snippets' }
+  it "to #index" do
+    get("/gitlabhq/snippets").should route_to("projects/snippets#index", project_id: 'gitlabhq')
+  end
+
+  it "to #create" do
+    post("/gitlabhq/snippets").should route_to("projects/snippets#create", project_id: 'gitlabhq')
+  end
+
+  it "to #new" do
+    get("/gitlabhq/snippets/new").should route_to("projects/snippets#new", project_id: 'gitlabhq')
+  end
+
+  it "to #edit" do
+    get("/gitlabhq/snippets/1/edit").should route_to("projects/snippets#edit", project_id: 'gitlabhq', id: '1')
+  end
+
+  it "to #show" do
+    get("/gitlabhq/snippets/1").should route_to("projects/snippets#show", project_id: 'gitlabhq', id: '1')
+  end
+
+  it "to #update" do
+    put("/gitlabhq/snippets/1").should route_to("projects/snippets#update", project_id: 'gitlabhq', id: '1')
+  end
+
+  it "to #destroy" do
+    delete("/gitlabhq/snippets/1").should route_to("projects/snippets#destroy", project_id: 'gitlabhq', id: '1')
   end
 end