diff --git a/Gemfile b/Gemfile
index d58b8e44fd221de6eeb7404ac3b40aac72d72438..0a46bf1fbe6bfd89eca2aa7b7c514c2ed67e59de 100644
--- a/Gemfile
+++ b/Gemfile
@@ -29,6 +29,8 @@ gem 'font-awesome-sass', '~> 5.12.0'
 
 gem 'activeldap', '~> 5.2', '>= 5.2.4', :require => 'active_ldap/railtie'
 gem 'net-ldap', '~> 0.16.2'
+gem 'jquery-rails', '~> 4.3', '>= 4.3.5'
+gem 'jquery-datatables', '~> 1.10', '>= 1.10.20'
 
 # Reduces boot times through caching; required in config/boot.rb
 gem 'bootsnap', '>= 1.4.2', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index c90d61e30745f5628013c14d94bf039de6bc7e08..fae8823bb4d53d2605c3822084b95f111e526425 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -126,6 +126,11 @@ GEM
     jaro_winkler (1.5.4-java)
     jbuilder (2.9.1)
       activesupport (>= 4.2.0)
+    jquery-datatables (1.10.20)
+    jquery-rails (4.3.5)
+      rails-dom-testing (>= 1, < 3)
+      railties (>= 4.2.0)
+      thor (>= 0.14, < 2.0)
     listen (3.1.5)
       rb-fsevent (~> 0.9, >= 0.9.4)
       rb-inotify (~> 0.9, >= 0.9.7)
@@ -290,6 +295,8 @@ DEPENDENCIES
   font-awesome-sass (~> 5.12.0)
   haml-rails (~> 2.0)
   jbuilder (~> 2.7)
+  jquery-datatables (~> 1.10, >= 1.10.20)
+  jquery-rails (~> 4.3, >= 4.3.5)
   listen (>= 3.0.5, < 3.2)
   net-ldap (~> 0.16.2)
   pg (>= 0.18, < 2.0)
diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js
index 591819335f0b2a17b191255bfb2652d0845e9242..7d52bcf3562ab981f2f165fe9e9bb658f9a953ac 100644
--- a/app/assets/config/manifest.js
+++ b/app/assets/config/manifest.js
@@ -1,2 +1,3 @@
 //= link_tree ../images
 //= link_directory ../stylesheets .css
+//= link_directory ../javascripts .js
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
new file mode 100644
index 0000000000000000000000000000000000000000..d079a31cc8f2a58efc3381bd54b901c751cc59d7
--- /dev/null
+++ b/app/assets/javascripts/application.js
@@ -0,0 +1,5 @@
+//= require jquery
+//= require datatables
+$(document).ready(function() {
+	$('#dttb').DataTable();
+});
diff --git a/app/assets/javascripts/datatables.js b/app/assets/javascripts/datatables.js
new file mode 100644
index 0000000000000000000000000000000000000000..6aaa6f540645598a7303445f20a26a2b6cfca18c
--- /dev/null
+++ b/app/assets/javascripts/datatables.js
@@ -0,0 +1,8 @@
+// Core component
+//= require datatables/jquery.dataTables
+// Bootstrap4 theme
+//= require datatables/dataTables.bootstrap4
+
+// Optional Datatables extensions
+//= require datatables/extensions/Responsive/dataTables.responsive
+//= require datatables/extensions/Responsive/responsive.bootstrap4
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 4b4bd019db3d27e0323e74e4a065141f5a07fab0..e72c22722acb46d70dec77aa38acc149ea092da2 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -1,4 +1,5 @@
 @import "font-awesome-sprockets";
 @import "font-awesome";
+@import 'datatables';
 // Custom bootstrap variables must be set or imported *before* bootstrap.
 @import "bootstrap";
diff --git a/app/assets/stylesheets/datatables.scss b/app/assets/stylesheets/datatables.scss
new file mode 100644
index 0000000000000000000000000000000000000000..94e3aca1ed72bbfdf0231114d23bd4ddd81e6533
--- /dev/null
+++ b/app/assets/stylesheets/datatables.scss
@@ -0,0 +1,3 @@
+@import 'datatables/dataTables.bootstrap4';
+@import 'datatables/extensions/Responsive/responsive.bootstrap4';
+@import 'datatables/extensions/Buttons/buttons.bootstrap4';
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index fc72423e16394fffc1c0a03b40b55c75d46d129f..3c8a863f1f4d86bcfa2172565693f75db425782e 100644
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -6,6 +6,7 @@
     = csrf_meta_tags
     = csp_meta_tag
     = stylesheet_link_tag    'application', media: 'all'
+    = javascript_include_tag 'application', data_turbolinks_track: 'reload'
   %body
     %nav.navbar.navbar-dark.bg-dark.static-top.navbar-expand-lg
       .container
diff --git a/app/views/users/index.html.haml b/app/views/users/index.html.haml
index 631a5a1591011ea2e6aeabcdc31e94812142669a..86db76854dd77745c4b118f6963bfe15d834f299 100644
--- a/app/views/users/index.html.haml
+++ b/app/views/users/index.html.haml
@@ -1,4 +1,4 @@
-%table.table.table-striped
+%table.table.table-striped#dttb
   %caption List of users
   %thead
     %tr