diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 729814f..16bbcb2 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -26,6 +26,7 @@ class UsersController < ApplicationController
   include SortHelper
   helper :custom_fields
   include CustomFieldsHelper   
+  include UsersHelper
 
   def index
     sort_init 'login', 'asc'
@@ -52,11 +53,12 @@ class UsersController < ApplicationController
     @users =  User.find :all,
                         :order => sort_clause,
                         :conditions => c.conditions,
-                        :limit  =>  @limit,
+                        :limit  =>  (params[:format] == 'csv') ? nil : @limit,
                         :offset =>  @offset
 
 		respond_to do |format|
 		  format.html { render :layout => !request.xhr? }
+          format.csv  { send_data(users_to_csv(@users), :type => 'text/csv; header=present', :filename => 'export.csv') }
       format.api
 		end	
   end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index c0caffa..0724db7 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -58,4 +58,55 @@ module UsersHelper
     end
     tabs
   end
+
+  def users_to_csv(users)
+    ic = Iconv.new(l(:general_csv_encoding), 'UTF-8')
+    decimal_separator = l(:general_csv_decimal_separator)
+    FCSV.generate(:col_sep => l(:general_csv_separator)) do |csv|
+      # csv header fields
+      headers = [
+        l(:field_login),
+        l(:field_firstname),
+        l(:field_lastname),
+        l(:field_mail),
+        l(:field_admin),
+        l(:field_created_on),
+        l(:field_last_login_on)
+      ]
+      # Export user custom fields
+      custom_fields = UserCustomField.all
+      custom_fields.each do |f| 
+        headers << f.name
+      end
+      csv << headers.collect do |c|
+        begin 
+          ic.iconv(c.to_s)
+        rescue
+          c.to_s
+        end
+      end
+      # csv lines
+      users.each do |user|
+        fields = [
+          user.login,
+          user.firstname,
+          user.lastname,
+          user.mail,
+          user.admin,
+          user.created_on,
+          user.last_login_on
+        ]
+        custom_fields.each do |f| 
+          fields << show_value(user.custom_value_for(f))
+        end
+        csv << fields.collect do |c|
+          begin 
+            ic.iconv(c.to_s)
+          rescue
+            c.to_s
+          end
+        end
+      end
+    end
+  end
 end
diff --git a/app/views/users/index.rhtml b/app/views/users/index.rhtml
index 69ad737..4e8715d 100644
--- a/app/views/users/index.rhtml
+++ b/app/views/users/index.rhtml
@@ -45,4 +45,8 @@
 </div>
 <p class="pagination"><%= pagination_links_full @user_pages, @user_count %></p>
 
+<% other_formats_links do |f| %>
+	<%= f.link_to 'CSV' %>
+<% end %>
+
 <% html_title(l(:label_user_plural)) -%>
