diff --git a/app/controllers/admin/features/education/application_controller.rb b/app/controllers/admin/features/education/application_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..6f9adb9587f06b65daaef50bf7513e3c1bd1e6dc
--- /dev/null
+++ b/app/controllers/admin/features/education/application_controller.rb
@@ -0,0 +1,6 @@
+class Admin::Features::Education::ApplicationController < Admin::ApplicationController
+  def breadcrumb
+    super
+    add_breadcrumb I18n.t('features.education.title'), :admin_features_education_dashboard_path
+  end
+end
diff --git a/app/controllers/admin/features/education/dashboard_controller.rb b/app/controllers/admin/features/education/dashboard_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..072f60f724e6538913ee7d57ec5b3bdda85e791f
--- /dev/null
+++ b/app/controllers/admin/features/education/dashboard_controller.rb
@@ -0,0 +1,5 @@
+class Admin::Features::Education::DashboardController < Admin::Features::Education::ApplicationController
+  def index
+    breadcrumb
+  end
+end
diff --git a/app/controllers/admin/programs_controller.rb b/app/controllers/admin/features/education/programs_controller.rb
similarity index 64%
rename from app/controllers/admin/programs_controller.rb
rename to app/controllers/admin/features/education/programs_controller.rb
index e74568c38ec98761ba8129ad71c51e30542ec878..11673833223f05f869e9d9ca4427c7d3b001c540 100644
--- a/app/controllers/admin/programs_controller.rb
+++ b/app/controllers/admin/features/education/programs_controller.rb
@@ -1,8 +1,8 @@
-class Admin::ProgramsController < Admin::ApplicationController
-  load_and_authorize_resource
+class Admin::Features::Education::ProgramsController < Admin::Features::Education::ApplicationController
+  load_and_authorize_resource class: Features::Education::Program
 
   def index
-    @programs = current_university.programs
+    @programs = current_university.features_education_programs
     breadcrumb
   end
 
@@ -20,7 +20,7 @@ class Admin::ProgramsController < Admin::ApplicationController
   end
 
   def create
-    @program = Program.new(program_params)
+    @program.university = current_university
     respond_to do |format|
       if @program.save
         format.html { redirect_to [:admin, @program], notice: "Program was successfully created." }
@@ -47,7 +47,7 @@ class Admin::ProgramsController < Admin::ApplicationController
   def destroy
     @program.destroy
     respond_to do |format|
-      format.html { redirect_to admin_programs_url, notice: "Program was successfully destroyed." }
+      format.html { redirect_to admin_features_education_programs_url, notice: "Program was successfully destroyed." }
       format.json { head :no_content }
     end
   end
@@ -56,7 +56,7 @@ class Admin::ProgramsController < Admin::ApplicationController
 
   def breadcrumb
     super
-    add_breadcrumb Program.model_name.human(count: 2), admin_programs_path
+    add_breadcrumb Features::Education::Program.model_name.human(count: 2), admin_features_education_programs_path
     if @program
       if @program.persisted?
         add_breadcrumb @program, [:admin, @program]
@@ -67,6 +67,9 @@ class Admin::ProgramsController < Admin::ApplicationController
   end
 
   def program_params
-    params.require(:program).permit(:university_id, :name, :level, :capacity, :ects, :continuing, :prerequisites, :objectives, :duration, :registration, :pedagogy, :evaluation, :accessibility, :pricing, :contacts)
+    params.require(:features_education_program)
+          .permit(:name, :level, :capacity, :ects, :continuing,
+            :prerequisites, :objectives, :duration, :registration, :pedagogy,
+            :evaluation, :accessibility, :pricing, :contacts)
   end
 end
diff --git a/app/controllers/admin/qualiopi/criterions_controller.rb b/app/controllers/admin/features/education/qualiopi/criterions_controller.rb
similarity index 78%
rename from app/controllers/admin/qualiopi/criterions_controller.rb
rename to app/controllers/admin/features/education/qualiopi/criterions_controller.rb
index f62fa6fc402c8cb803e22844cef6df6205dbb630..5cbf7e19ac7fcc3dfa1a46df05f4e01c29e1e6f0 100644
--- a/app/controllers/admin/qualiopi/criterions_controller.rb
+++ b/app/controllers/admin/features/education/qualiopi/criterions_controller.rb
@@ -1,5 +1,5 @@
-class Admin::Qualiopi::CriterionsController < Admin::ApplicationController
-  load_and_authorize_resource class: Qualiopi::Criterion
+class Admin::Features::Education::Qualiopi::CriterionsController < Admin::Features::Education::ApplicationController
+  load_and_authorize_resource class: Features::Education::Qualiopi::Criterion
 
   def index
     breadcrumb
@@ -54,7 +54,7 @@ class Admin::Qualiopi::CriterionsController < Admin::ApplicationController
 
   def breadcrumb
     super
-    add_breadcrumb Qualiopi.model_name.human(count: 2), admin_qualiopi_root_path
+    add_breadcrumb Features::Education::Qualiopi.model_name.human, admin_features_education_qualiopi_criterions_path
     if @criterion
       if @criterion.persisted?
         add_breadcrumb @criterion, [:admin, @criterion]
@@ -65,6 +65,7 @@ class Admin::Qualiopi::CriterionsController < Admin::ApplicationController
   end
 
   def criterion_params
-    params.require(:qualiopi_criterion).permit(:number, :name, :description)
+    params.require(:features_education_qualiopi_criterion)
+          .permit(:number, :name, :description)
   end
 end
diff --git a/app/controllers/admin/qualiopi/indicators_controller.rb b/app/controllers/admin/features/education/qualiopi/indicators_controller.rb
similarity index 73%
rename from app/controllers/admin/qualiopi/indicators_controller.rb
rename to app/controllers/admin/features/education/qualiopi/indicators_controller.rb
index 11f3259d0a014afe9cea5c149a400439e2adafeb..d21e60aacd34520843b878c4b5b0c25b38abee60 100644
--- a/app/controllers/admin/qualiopi/indicators_controller.rb
+++ b/app/controllers/admin/features/education/qualiopi/indicators_controller.rb
@@ -1,12 +1,12 @@
-class Admin::Qualiopi::IndicatorsController < Admin::ApplicationController
-  load_and_authorize_resource class: Qualiopi::Indicator
+class Admin::Features::Education::Qualiopi::IndicatorsController < Admin::Features::Education::ApplicationController
+  load_and_authorize_resource class: Features::Education::Qualiopi::Indicator
 
   def index
     breadcrumb
   end
 
   def show
-    @programs = Program.all
+    @programs = current_university.features_education_programs
     @checks = [
       :prerequisites,
       :objectives,
@@ -65,10 +65,10 @@ class Admin::Qualiopi::IndicatorsController < Admin::ApplicationController
 
   def breadcrumb
     super
-    add_breadcrumb Qualiopi.model_name.human(count: 2), admin_qualiopi_root_path
+    add_breadcrumb Features::Education::Qualiopi.model_name.human(count: 2), admin_features_education_qualiopi_criterions_path
     if @indicator
-      add_breadcrumb @indicator.criterion, [:admin, @indicator.criterion]
       if @indicator.persisted?
+        add_breadcrumb @indicator.criterion, [:admin, @indicator.criterion]
         add_breadcrumb @indicator, [:admin, @indicator]
       else
         add_breadcrumb 'Créer'
@@ -77,6 +77,7 @@ class Admin::Qualiopi::IndicatorsController < Admin::ApplicationController
   end
 
   def indicator_params
-    params.require(:qualiopi_indicator).permit(:criterion_id, :number, :name, :level_expected, :proof, :requirement, :non_conformity)
+    params.require(:features_education_qualiopi_indicator)
+          .permit(:criterion_id, :number, :name, :level_expected, :proof, :requirement, :non_conformity)
   end
 end
diff --git a/app/controllers/features/education/programs_controller.rb b/app/controllers/features/education/programs_controller.rb
new file mode 100644
index 0000000000000000000000000000000000000000..aae3e1fb35481f39bee9e71b00025c727faa623b
--- /dev/null
+++ b/app/controllers/features/education/programs_controller.rb
@@ -0,0 +1,12 @@
+class Features::Education::ProgramsController < ApplicationController
+  # load_and_authorize_resource
+
+  add_breadcrumb 'Programmes', :features_education_programs_path
+
+  def index
+  end
+
+  def show
+    add_breadcrumb @program
+  end
+end
diff --git a/app/controllers/programs_controller.rb b/app/controllers/programs_controller.rb
deleted file mode 100644
index 233e001e2e02b3f8960b8a561c612258eda659f7..0000000000000000000000000000000000000000
--- a/app/controllers/programs_controller.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class ProgramsController < ApplicationController
-  load_and_authorize_resource
-
-  add_breadcrumb 'Programmes', :programs_path
-
-  def index
-  end
-
-  def show
-    add_breadcrumb @program
-  end
-end
diff --git a/app/models/feature.rb b/app/models/feature.rb
new file mode 100644
index 0000000000000000000000000000000000000000..626d9e5a2b0b72d7cc4d5903ed78ea1c82d098b0
--- /dev/null
+++ b/app/models/feature.rb
@@ -0,0 +1,7 @@
+class Feature
+  def self.all
+    [
+      :education
+    ]
+  end
+end
diff --git a/app/models/qualiopi.rb b/app/models/features/education.rb
similarity index 56%
rename from app/models/qualiopi.rb
rename to app/models/features/education.rb
index 720816e22b7048c3843f85402ede6a8e923f87b7..2e057fd3ddd39d336c84ba1c025f3ca012db7b2c 100644
--- a/app/models/qualiopi.rb
+++ b/app/models/features/education.rb
@@ -1,7 +1,7 @@
-module Qualiopi
+module Features::Education
   extend ActiveModel::Naming
 
   def self.table_name_prefix
-    'qualiopi_'
+    'features_education_'
   end
 end
diff --git a/app/models/program.rb b/app/models/features/education/program.rb
similarity index 82%
rename from app/models/program.rb
rename to app/models/features/education/program.rb
index ab6c0bdccaff2a50f1c0e217c9e0215bc3bd5898..b337ee29d1845c0997ffb9fc6e6ddb1871c9e2ca 100644
--- a/app/models/program.rb
+++ b/app/models/features/education/program.rb
@@ -1,6 +1,6 @@
 # == Schema Information
 #
-# Table name: programs
+# Table name: features_education_programs
 #
 #  id            :uuid             not null, primary key
 #  accessibility :text
@@ -23,13 +23,13 @@
 #
 # Indexes
 #
-#  index_programs_on_university_id  (university_id)
+#  index_features_education_programs_on_university_id  (university_id)
 #
 # Foreign Keys
 #
 #  fk_rails_...  (university_id => universities.id)
 #
-class Program < ApplicationRecord
+class Features::Education::Program < ApplicationRecord
   belongs_to :university
 
   enum level: {
diff --git a/app/models/features/education/qualiopi.rb b/app/models/features/education/qualiopi.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ebc7b4bf0659d1e257991b9e1fc26447d96cf322
--- /dev/null
+++ b/app/models/features/education/qualiopi.rb
@@ -0,0 +1,7 @@
+module Features::Education::Qualiopi
+  extend ActiveModel::Naming
+
+  def self.table_name_prefix
+    'features_education_qualiopi_'
+  end
+end
diff --git a/app/models/qualiopi/criterion.rb b/app/models/features/education/qualiopi/criterion.rb
similarity index 71%
rename from app/models/qualiopi/criterion.rb
rename to app/models/features/education/qualiopi/criterion.rb
index 051089a792bcba7468224c54fda1c2e754c0f2de..165c442108b1d231f643893d1f559719fae2ae75 100644
--- a/app/models/qualiopi/criterion.rb
+++ b/app/models/features/education/qualiopi/criterion.rb
@@ -1,6 +1,6 @@
 # == Schema Information
 #
-# Table name: qualiopi_criterions
+# Table name: features_education_qualiopi_criterions
 #
 #  id          :uuid             not null, primary key
 #  description :text
@@ -9,7 +9,7 @@
 #  created_at  :datetime         not null
 #  updated_at  :datetime         not null
 #
-class Qualiopi::Criterion < ApplicationRecord
+class Features::Education::Qualiopi::Criterion < ApplicationRecord
   has_many :indicators
 
   def to_s
diff --git a/app/models/qualiopi/indicator.rb b/app/models/features/education/qualiopi/indicator.rb
similarity index 63%
rename from app/models/qualiopi/indicator.rb
rename to app/models/features/education/qualiopi/indicator.rb
index 1603ba28f54e9c1c54408161b06fbab8ad9554b7..fdd33a22e1d497295a78f3aab54a3079032bcbb3 100644
--- a/app/models/qualiopi/indicator.rb
+++ b/app/models/features/education/qualiopi/indicator.rb
@@ -1,6 +1,6 @@
 # == Schema Information
 #
-# Table name: qualiopi_indicators
+# Table name: features_education_qualiopi_indicators
 #
 #  id             :uuid             not null, primary key
 #  level_expected :text
@@ -15,13 +15,13 @@
 #
 # Indexes
 #
-#  index_qualiopi_indicators_on_criterion_id  (criterion_id)
+#  index_features_education_qualiopi_indicators_on_criterion_id  (criterion_id)
 #
 # Foreign Keys
 #
-#  fk_rails_...  (criterion_id => qualiopi_criterions.id)
+#  fk_rails_...  (criterion_id => features_education_qualiopi_criterions.id)
 #
-class Qualiopi::Indicator < ApplicationRecord
+class Features::Education::Qualiopi::Indicator < ApplicationRecord
   belongs_to :criterion
 
   def to_s
diff --git a/app/models/university.rb b/app/models/university.rb
index ce30a34fc479de5308102ce4afef2280df47721b..27def60d6b90721cb6883cb4e85819bdfb5ba362 100644
--- a/app/models/university.rb
+++ b/app/models/university.rb
@@ -18,8 +18,7 @@ class University < ApplicationRecord
   validates_presence_of :name
 
   include WithIdentifier
-
-  has_many :programs
+  include WithFeatureEducation
 
   def to_s
     "#{name}"
diff --git a/app/models/university/with_feature_education.rb b/app/models/university/with_feature_education.rb
new file mode 100644
index 0000000000000000000000000000000000000000..356809d49ac36c48101370dd8c701bf990ab6556
--- /dev/null
+++ b/app/models/university/with_feature_education.rb
@@ -0,0 +1,7 @@
+module University::WithFeatureEducation
+  extend ActiveSupport::Concern
+
+  included do
+    has_many :features_education_programs, class_name: 'Features::Education::Program', dependent: :destroy
+  end
+end
diff --git a/app/models/university/with_identifier.rb b/app/models/university/with_identifier.rb
index d7d92f37c150e5c022a10ce8f619b08beca313db..678144f5a906e6e7d9714f247b4da264e68010ca 100644
--- a/app/models/university/with_identifier.rb
+++ b/app/models/university/with_identifier.rb
@@ -2,7 +2,7 @@ module University::WithIdentifier
   extend ActiveSupport::Concern
 
   included do
-    # todo lower case, numbers, -, _
+    # TODO restrict to lower case, numbers, -, _
     validates :identifier, presence: true, uniqueness: true
   end
 
diff --git a/app/views/admin/features/education/dashboard/index.html.erb b/app/views/admin/features/education/dashboard/index.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..b8cf12aa84274a028b52713101e652d0731768e3
--- /dev/null
+++ b/app/views/admin/features/education/dashboard/index.html.erb
@@ -0,0 +1 @@
+<% content_for :title, t('features.education.title') %>
diff --git a/app/views/admin/programs/_form.html.erb b/app/views/admin/features/education/programs/_form.html.erb
similarity index 94%
rename from app/views/admin/programs/_form.html.erb
rename to app/views/admin/features/education/programs/_form.html.erb
index 11ae70c71f4073e14f056cb9945137820d4685f2..b46c733d033f04fff7a24652a0404789d831d8f4 100644
--- a/app/views/admin/programs/_form.html.erb
+++ b/app/views/admin/features/education/programs/_form.html.erb
@@ -3,7 +3,6 @@
     <div class="col-md-4">
       <h2 class="h4">Informations essentielles</h2>
       <%= f.input :name %>
-      <%= f.association :university, include_blank: false%>
       <%= f.input :level, include_blank: false %>
       <%= f.input :capacity %>
       <%= f.input :ects %>
diff --git a/app/views/admin/programs/_program.json.jbuilder b/app/views/admin/features/education/programs/_program.json.jbuilder
similarity index 100%
rename from app/views/admin/programs/_program.json.jbuilder
rename to app/views/admin/features/education/programs/_program.json.jbuilder
diff --git a/app/views/admin/programs/edit.html.erb b/app/views/admin/features/education/programs/edit.html.erb
similarity index 100%
rename from app/views/admin/programs/edit.html.erb
rename to app/views/admin/features/education/programs/edit.html.erb
diff --git a/app/views/admin/programs/index.html.erb b/app/views/admin/features/education/programs/index.html.erb
similarity index 59%
rename from app/views/admin/programs/index.html.erb
rename to app/views/admin/features/education/programs/index.html.erb
index 02036c6d57eaab60dc0b50c1fd5fa964e2d99797..15834d84e5161583af3331e2c4aec3ddcd788bdf 100644
--- a/app/views/admin/programs/index.html.erb
+++ b/app/views/admin/features/education/programs/index.html.erb
@@ -1,10 +1,10 @@
-<% content_for :title, Program.model_name.human(count: 2) %>
+<% content_for :title, Features::Education::Program.model_name.human(count: 2) %>
 
 <table class="table">
   <thead>
     <tr>
-      <th><%= Program.human_attribute_name('name') %></th>
-      <th><%= Program.human_attribute_name('level') %></th>
+      <th><%= Features::Education::Program.human_attribute_name('name') %></th>
+      <th><%= Features::Education::Program.human_attribute_name('level') %></th>
       <th></th>
     </tr>
   </thead>
@@ -23,5 +23,5 @@
 </table>
 
 <% content_for :buttons do %>
-  <%= create_link Program %>
+  <%= create_link Features::Education::Program %>
 <% end %>
diff --git a/app/views/admin/programs/index.json.jbuilder b/app/views/admin/features/education/programs/index.json.jbuilder
similarity index 100%
rename from app/views/admin/programs/index.json.jbuilder
rename to app/views/admin/features/education/programs/index.json.jbuilder
diff --git a/app/views/admin/features/education/programs/new.html.erb b/app/views/admin/features/education/programs/new.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..8fb3beee6168a70cf27218b3adc412e6e26952fc
--- /dev/null
+++ b/app/views/admin/features/education/programs/new.html.erb
@@ -0,0 +1,3 @@
+<% content_for :title, Features::Education::Program.model_name.human %>
+
+<%= render 'form', program: @program %>
diff --git a/app/views/admin/programs/show.html.erb b/app/views/admin/features/education/programs/show.html.erb
similarity index 92%
rename from app/views/admin/programs/show.html.erb
rename to app/views/admin/features/education/programs/show.html.erb
index bf56bb37554ac1a8ef49cb33331d790e67831490..7ebca949241cbfdc19764a396f19ff909e030883 100644
--- a/app/views/admin/programs/show.html.erb
+++ b/app/views/admin/features/education/programs/show.html.erb
@@ -1,10 +1,5 @@
 <% content_for :title, @program %>
 
-<p>
-  <strong>University:</strong>
-  <%= @program.university %>
-</p>
-
 <p>
   <strong>Name:</strong>
   <%= @program.name %>
diff --git a/app/views/admin/programs/show.json.jbuilder b/app/views/admin/features/education/programs/show.json.jbuilder
similarity index 100%
rename from app/views/admin/programs/show.json.jbuilder
rename to app/views/admin/features/education/programs/show.json.jbuilder
diff --git a/app/views/admin/qualiopi/criterions/_form.html.erb b/app/views/admin/features/education/qualiopi/criterions/_form.html.erb
similarity index 100%
rename from app/views/admin/qualiopi/criterions/_form.html.erb
rename to app/views/admin/features/education/qualiopi/criterions/_form.html.erb
diff --git a/app/views/admin/qualiopi/criterions/_qualiopi_criterion.json.jbuilder b/app/views/admin/features/education/qualiopi/criterions/_qualiopi_criterion.json.jbuilder
similarity index 100%
rename from app/views/admin/qualiopi/criterions/_qualiopi_criterion.json.jbuilder
rename to app/views/admin/features/education/qualiopi/criterions/_qualiopi_criterion.json.jbuilder
diff --git a/app/views/admin/qualiopi/criterions/edit.html.erb b/app/views/admin/features/education/qualiopi/criterions/edit.html.erb
similarity index 100%
rename from app/views/admin/qualiopi/criterions/edit.html.erb
rename to app/views/admin/features/education/qualiopi/criterions/edit.html.erb
diff --git a/app/views/admin/qualiopi/criterions/index.html.erb b/app/views/admin/features/education/qualiopi/criterions/index.html.erb
similarity index 84%
rename from app/views/admin/qualiopi/criterions/index.html.erb
rename to app/views/admin/features/education/qualiopi/criterions/index.html.erb
index 260dae31812edf55a55d5fa296dd46eb4b334c0f..f8c3744a6512cb372be1a2198f2e9570f76374e3 100644
--- a/app/views/admin/qualiopi/criterions/index.html.erb
+++ b/app/views/admin/features/education/qualiopi/criterions/index.html.erb
@@ -1,4 +1,4 @@
-<% content_for :title, Qualiopi.model_name %>
+<% content_for :title, Features::Education::Qualiopi.model_name.human %>
 
 <div class="row">
   <% @criterions.each do |criterion| %>
diff --git a/app/views/admin/qualiopi/criterions/index.json.jbuilder b/app/views/admin/features/education/qualiopi/criterions/index.json.jbuilder
similarity index 100%
rename from app/views/admin/qualiopi/criterions/index.json.jbuilder
rename to app/views/admin/features/education/qualiopi/criterions/index.json.jbuilder
diff --git a/app/views/admin/features/education/qualiopi/criterions/new.html.erb b/app/views/admin/features/education/qualiopi/criterions/new.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..d268b86181385f2789826069f05ab9b69685c4e1
--- /dev/null
+++ b/app/views/admin/features/education/qualiopi/criterions/new.html.erb
@@ -0,0 +1,3 @@
+<% content_for :title, Features::Education::Qualiopi::Criterion.model_name.human %>
+
+<%= render 'form', criterion: @criterion %>
diff --git a/app/views/admin/qualiopi/criterions/show.html.erb b/app/views/admin/features/education/qualiopi/criterions/show.html.erb
similarity index 100%
rename from app/views/admin/qualiopi/criterions/show.html.erb
rename to app/views/admin/features/education/qualiopi/criterions/show.html.erb
diff --git a/app/views/admin/qualiopi/criterions/show.json.jbuilder b/app/views/admin/features/education/qualiopi/criterions/show.json.jbuilder
similarity index 100%
rename from app/views/admin/qualiopi/criterions/show.json.jbuilder
rename to app/views/admin/features/education/qualiopi/criterions/show.json.jbuilder
diff --git a/app/views/admin/qualiopi/indicators/_form.html.erb b/app/views/admin/features/education/qualiopi/indicators/_form.html.erb
similarity index 100%
rename from app/views/admin/qualiopi/indicators/_form.html.erb
rename to app/views/admin/features/education/qualiopi/indicators/_form.html.erb
diff --git a/app/views/admin/qualiopi/indicators/_qualiopi_indicator.json.jbuilder b/app/views/admin/features/education/qualiopi/indicators/_qualiopi_indicator.json.jbuilder
similarity index 100%
rename from app/views/admin/qualiopi/indicators/_qualiopi_indicator.json.jbuilder
rename to app/views/admin/features/education/qualiopi/indicators/_qualiopi_indicator.json.jbuilder
diff --git a/app/views/admin/qualiopi/indicators/edit.html.erb b/app/views/admin/features/education/qualiopi/indicators/edit.html.erb
similarity index 100%
rename from app/views/admin/qualiopi/indicators/edit.html.erb
rename to app/views/admin/features/education/qualiopi/indicators/edit.html.erb
diff --git a/app/views/admin/qualiopi/indicators/index.html.erb b/app/views/admin/features/education/qualiopi/indicators/index.html.erb
similarity index 54%
rename from app/views/admin/qualiopi/indicators/index.html.erb
rename to app/views/admin/features/education/qualiopi/indicators/index.html.erb
index 0f6cc75aef0a15387c69fa226ebd54a87abb5e5d..4f0315420892216426d8030eb5847c39384001b7 100644
--- a/app/views/admin/qualiopi/indicators/index.html.erb
+++ b/app/views/admin/features/education/qualiopi/indicators/index.html.erb
@@ -1,11 +1,11 @@
-<% content_for :title, Qualiopi::Indicator.model_name.human(count: 2) %>
+<% content_for :title, Features::Education::Qualiopi::Indicator.model_name.human(count: 2) %>
 
 <table class="table">
   <thead>
     <tr>
-      <th><%= Qualiopi::Indicator.human_attribute_name('criterion') %></th>
-      <th><%= Qualiopi::Indicator.human_attribute_name('number') %></th>
-      <th><%= Qualiopi::Indicator.human_attribute_name('name') %></th>
+      <th><%= Features::Education::Qualiopi::Indicator.human_attribute_name('criterion') %></th>
+      <th><%= Features::Education::Qualiopi::Indicator.human_attribute_name('number') %></th>
+      <th><%= Features::Education::Qualiopi::Indicator.human_attribute_name('name') %></th>
       <th></th>
     </tr>
   </thead>
diff --git a/app/views/admin/qualiopi/indicators/index.json.jbuilder b/app/views/admin/features/education/qualiopi/indicators/index.json.jbuilder
similarity index 100%
rename from app/views/admin/qualiopi/indicators/index.json.jbuilder
rename to app/views/admin/features/education/qualiopi/indicators/index.json.jbuilder
diff --git a/app/views/admin/features/education/qualiopi/indicators/new.html.erb b/app/views/admin/features/education/qualiopi/indicators/new.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..73009c588a7ef47db4d0e4d79a9f6e269052fd90
--- /dev/null
+++ b/app/views/admin/features/education/qualiopi/indicators/new.html.erb
@@ -0,0 +1,3 @@
+<% content_for :title, Features::Education::Qualiopi::Indicator.model_name.human %>
+
+<%= render 'form', indicator: @indicator %>
diff --git a/app/views/admin/qualiopi/indicators/show.html.erb b/app/views/admin/features/education/qualiopi/indicators/show.html.erb
similarity index 77%
rename from app/views/admin/qualiopi/indicators/show.html.erb
rename to app/views/admin/features/education/qualiopi/indicators/show.html.erb
index c3356b0344690eb227e9cf8e17557f769921943b..a935cc4bac37171a849ee044e81eaa9e0d24f694 100644
--- a/app/views/admin/qualiopi/indicators/show.html.erb
+++ b/app/views/admin/features/education/qualiopi/indicators/show.html.erb
@@ -5,7 +5,7 @@
 <div class="row">
   <% [:level_expected, :proof, :requirement, :non_conformity].each do |attribute| %>
     <div class="col-md-3">
-      <h2 class="h4 mt-4"><%= Qualiopi::Indicator.human_attribute_name(attribute) %></h2>
+      <h2 class="h4 mt-4"><%= Features::Education::Qualiopi::Indicator.human_attribute_name(attribute) %></h2>
       <p><%= @indicator.send attribute %></p>
     </div>
   <% end %>
@@ -14,9 +14,9 @@
 <table class="table mt-5">
   <thead>
     <tr>
-      <th><%= Program.model_name.human %></th>
+      <th><%= Features::Education::Program.model_name.human %></th>
       <% @checks.each do |check| %>
-        <th><%= Program.human_attribute_name(check) %></th>
+        <th><%= Features::Education::Program.human_attribute_name(check) %></th>
       <% end %>
     </tr>
   </thead>
diff --git a/app/views/admin/qualiopi/indicators/show.json.jbuilder b/app/views/admin/features/education/qualiopi/indicators/show.json.jbuilder
similarity index 100%
rename from app/views/admin/qualiopi/indicators/show.json.jbuilder
rename to app/views/admin/features/education/qualiopi/indicators/show.json.jbuilder
diff --git a/app/views/admin/programs/new.html.erb b/app/views/admin/programs/new.html.erb
deleted file mode 100644
index 51a4f8e855313182770fa953fff468e53666e881..0000000000000000000000000000000000000000
--- a/app/views/admin/programs/new.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<% content_for :title, Program.model_name.human %>
-
-<%= render 'form', program: @program %>
diff --git a/app/views/admin/qualiopi/criterions/new.html.erb b/app/views/admin/qualiopi/criterions/new.html.erb
deleted file mode 100644
index 0c9ecf9763172f87ae124eaa78b4a924bc766d18..0000000000000000000000000000000000000000
--- a/app/views/admin/qualiopi/criterions/new.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<% content_for :title, Qualiopi::Criterion.model_name.human %>
-
-<%= render 'form', criterion: @criterion %>
diff --git a/app/views/admin/qualiopi/indicators/new.html.erb b/app/views/admin/qualiopi/indicators/new.html.erb
deleted file mode 100644
index 49f8a6a3a96e2e9bb41e9e049ed0cd541df55a5f..0000000000000000000000000000000000000000
--- a/app/views/admin/qualiopi/indicators/new.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<% content_for :title, Qualiopi::Indicator.model_name.human %>
-
-<%= render 'form', indicator: @indicator %>
diff --git a/app/views/programs/_program.json.jbuilder b/app/views/features/education/programs/_program.json.jbuilder
similarity index 100%
rename from app/views/programs/_program.json.jbuilder
rename to app/views/features/education/programs/_program.json.jbuilder
diff --git a/app/views/programs/index.html.erb b/app/views/features/education/programs/index.html.erb
similarity index 100%
rename from app/views/programs/index.html.erb
rename to app/views/features/education/programs/index.html.erb
diff --git a/app/views/programs/index.json.jbuilder b/app/views/features/education/programs/index.json.jbuilder
similarity index 100%
rename from app/views/programs/index.json.jbuilder
rename to app/views/features/education/programs/index.json.jbuilder
diff --git a/app/views/programs/show.html.erb b/app/views/features/education/programs/show.html.erb
similarity index 100%
rename from app/views/programs/show.html.erb
rename to app/views/features/education/programs/show.html.erb
diff --git a/app/views/programs/show.json.jbuilder b/app/views/features/education/programs/show.json.jbuilder
similarity index 100%
rename from app/views/programs/show.json.jbuilder
rename to app/views/features/education/programs/show.json.jbuilder
diff --git a/config/admin_navigation.rb b/config/admin_navigation.rb
index c8865931a6956255c789661ea11129b259f2501c..faa147e7f7dd40cdc2e82622b186406056baf50c 100644
--- a/config/admin_navigation.rb
+++ b/config/admin_navigation.rb
@@ -1,13 +1,16 @@
 SimpleNavigation::Configuration.run do |navigation|
   navigation.renderer = ::Appstack::SimpleNavigationRenderer
   navigation.auto_highlight = true
-  # navigation.highlight_on_subpath = true
+  navigation.highlight_on_subpath = true
   navigation.items do |primary|
-    primary.item :dashboard, 'Tableau de bord', admin_root_path, { icon: 'tachometer-alt' }
+    primary.item :dashboard, t('dashboard'), admin_root_path, { icon: 'tachometer-alt' }
     primary.item :universities, University.model_name.human(count: 2), admin_universities_path, { icon: 'university' }
     primary.item :users, User.model_name.human(count: 2), admin_users_path, { icon: 'user' }
-    primary.item :programs, Program.model_name.human(count: 2), admin_programs_path, { icon: 'graduation-cap' }
-    primary.item :qualiopi, 'Qualiopi', admin_qualiopi_root_path, { icon: 'check-circle' }
-    primary.item :settings, 'Paramètres', '', { icon: 'cog' }
+    primary.item :education, I18n.t('features.education.title'), nil, { icon: 'graduation-cap' } do |secondary|
+      secondary.item :dashboard, t('dashboard'), admin_features_education_dashboard_path
+      secondary.item :programs, Features::Education::Program.model_name.human(count: 2), admin_features_education_programs_path
+      secondary.item :qualiopi, Features::Education::Qualiopi.model_name.human, admin_features_education_qualiopi_criterions_path
+    end
+    primary.item :settings, 'Paramètres', nil, { icon: 'cog' }
   end
 end
diff --git a/config/application.rb b/config/application.rb
index 7c86e6c1390ccce6f88e9faf9e4880827d9bef32..57b2e3cc52d6f4f5f92400c0d98a76f586551a2b 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -33,6 +33,7 @@ module Osuny
 
     config.i18n.available_locales = [:fr]
     config.i18n.default_locale = :fr
+    config.i18n.load_path += Dir["#{Rails.root.to_s}/config/locales/**/*.yml"]
 
     config.generators do |g|
       g.orm :active_record, primary_key_type: :uuid
diff --git a/config/locales/features/education/fr.yml b/config/locales/features/education/fr.yml
new file mode 100644
index 0000000000000000000000000000000000000000..dc43f37b892bb761ac0bb49d94999564f7bb9aab
--- /dev/null
+++ b/config/locales/features/education/fr.yml
@@ -0,0 +1,67 @@
+fr:
+  features:
+    education:
+      title: Education
+      qualiopi: Qualiopi
+  activerecord:
+    models:
+      features/education/program:
+        one: Formation
+        other: Formations
+      features/education/qualiopi:
+        one: Qualiopi
+        other: Qualiopi
+      features/education/qualiopi/criterion:
+        one: Critère
+        other: Critères
+      features/education/qualiopi/indicator:
+        one: Indicateur
+        other: Indicateurs
+    attributes:
+      features/education/program:
+        name: Nom
+        level: Niveau
+        capacity: Capacité
+        ects: Crédits ECTS
+        continuing: Formation continue
+        prerequisites: Prérequis
+        objectives: Objectifs
+        duration: Durée
+        registration: Modalités et délais d’accès
+        pricing: Tarifs
+        contacts: Contacts
+        pedagogy: Méthodes mobilisées
+        evaluation: Modalités d’évaluation
+        accessibility: Accessibilité
+      features/education/qualiopi/criterion:
+        number: Numéro
+        name: Nom
+        description: Description
+      features/education/qualiopi/indicator:
+        number: Numéro
+        name: Nom
+        criterion: Critère
+        description: Description
+        level_expected: Niveau attendu
+        proof: Éléments de preuve
+        requirement: Obligations spécifiques
+        non_conformity: Non-conformité
+  enums:
+    features/education/program:
+      level:
+        bachelor: Licence / bachelor
+        master: Master
+        doctor: Doctorat
+  simple_form:
+    hints:
+      features/education/program:
+        capacity: Nombre de places disponibles par promotion
+        ects: European Credits Transfer System
+        prerequisites: Préalables nécessaires ou indispensables pour bénéficier d'une prestation déterminée. L'absence de prérequis doit être mentionnée.
+        objectives: "Énoncé des aptitudes et compétences, visées et évaluables, qui seront acquises au cours de la prestation. Aptitude : capacité d'appliquer un savoir et d'utiliser un savoir-faire pour réaliser des tâches et résoudre des problèmes. Compétences : capacité avérée de mettre en œuvre des savoirs, des savoir-faire et des dispositions personnelles, sociales ou méthodologiques dans des situations de travail ou d’études/formations, pour le développement professionnel ou personnel."
+        duration: La durée peut être exprimée en heure ou en jour. Elle peut également être forfaitisée ou estimée.
+        registration: "Délai d’accès : durée estimée entre la demande du bénéficiaire et le début de la prestation."
+        pricing: Prix de la prestation ou conditions tarifaires.
+        pedagogy: Modalités pédagogiques et/ou moyens et/ou outils utilisés pour mener à bien la prestation dispensée.
+        evaluation: Moyens mobilisés pour me- surer à l'aide de critères objectifs les acquis du bénéficiaire en cours et/ou à la fin de la prestation.
+        accessibility: Conditions d'accueil et d’accès des publics en situation de handicap (locaux, adaptation des moyens de la prestation).
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index f35b30ce98a55d0bd26f66f2e805c48327de0dd4..96d1d628c717a56bdc1e683cd5a3a95d2b60dbcb 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -1,17 +1,9 @@
 fr:
   true: Oui
   false: Non
+  dashboard: Tableau de bord
   activerecord:
     models:
-      program:
-        one: Formation
-        other: Formations
-      qualiopi/criterion:
-        one: Critère
-        other: Critères
-      qualiopi/indicator:
-        one: Indicateur
-        other: Indicateurs
       university:
         one: Université
         other: Universités
@@ -19,34 +11,6 @@ fr:
         one: Utilisateur
         other: Utilisateurs
     attributes:
-      program:
-        name: Nom
-        level: Niveau
-        capacity: Capacité
-        ects: Crédits ECTS
-        continuing: Formation continue
-        prerequisites: Prérequis
-        objectives: Objectifs
-        duration: Durée
-        registration: Modalités et délais d’accès
-        pricing: Tarifs
-        contacts: Contacts
-        pedagogy: Méthodes mobilisées
-        evaluation: Modalités d’évaluation
-        accessibility: Accessibilité
-      qualiopi/criterion:
-        number: Numéro
-        name: Nom
-        description: Description
-      qualiopi/indicator:
-        number: Numéro
-        name: Nom
-        criterion: Critère
-        description: Description
-        level_expected: Niveau attendu
-        proof: Éléments de preuve
-        requirement: Obligations spécifiques
-        non_conformity: Non-conformité
       university:
         name: Nom
         address: Adresse
@@ -62,22 +26,5 @@ fr:
         first_name: Prénom
         last_name: Nom
         role: Rôle
-  enums:
-    program:
-      level:
-        bachelor: Licence / bachelor
-        master: Master
-        doctor: Doctorat
   simple_form:
     hints:
-      program:
-        capacity: Nombre de places disponibles par promotion
-        ects: European Credits Transfer System
-        prerequisites: Préalables nécessaires ou indispensables pour bénéficier d'une prestation déterminée. L'absence de prérequis doit être mentionnée.
-        objectives: "Énoncé des aptitudes et compétences, visées et évaluables, qui seront acquises au cours de la prestation. Aptitude : capacité d'appliquer un savoir et d'utiliser un savoir-faire pour réaliser des tâches et résoudre des problèmes. Compétences : capacité avérée de mettre en œuvre des savoirs, des savoir-faire et des dispositions personnelles, sociales ou méthodologiques dans des situations de travail ou d’études/formations, pour le développement professionnel ou personnel."
-        duration: La durée peut être exprimée en heure ou en jour. Elle peut également être forfaitisée ou estimée.
-        registration: "Délai d’accès : durée estimée entre la demande du bénéficiaire et le début de la prestation."
-        pricing: Prix de la prestation ou conditions tarifaires.
-        pedagogy: Modalités pédagogiques et/ou moyens et/ou outils utilisés pour mener à bien la prestation dispensée.
-        evaluation: Moyens mobilisés pour me- surer à l'aide de critères objectifs les acquis du bénéficiaire en cours et/ou à la fin de la prestation.
-        accessibility: Conditions d'accueil et d’accès des publics en situation de handicap (locaux, adaptation des moyens de la prestation).
diff --git a/config/routes.rb b/config/routes.rb
index 94aa132c4d2e5d64fe3161ce48b2b386b73f7da2..b52be4802c2b16394a423e1ec82e244a5ccd1555 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -5,5 +5,5 @@ Rails.application.routes.draw do
 
   resources :programs, only: [:index, :show]
 
-  root to: 'programs#index'
+  root to: 'home#index'
 end
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index 59b29dc59d860f142d5ca60b2e39a5a8c91756dd..27bedfcadc910f2171a114d4a49b268e8cf14b09 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -1,12 +1,11 @@
 namespace :admin do
   resources :universities
   resources :users
-  resources :programs
 
-  namespace :qualiopi do
-    resources :criterions
-    resources :indicators
-    root to: 'criterions#index'
+  namespace :features, path: '' do
+    Feature.all.each do |feature|
+      draw "admin/features/#{feature}"
+    end
   end
 
   root to: 'dashboard#index'
diff --git a/config/routes/admin/features/education.rb b/config/routes/admin/features/education.rb
new file mode 100644
index 0000000000000000000000000000000000000000..eac3359ce6f2181bec8e1582992534c019951c15
--- /dev/null
+++ b/config/routes/admin/features/education.rb
@@ -0,0 +1,8 @@
+namespace :education do
+  resources :programs
+  namespace :qualiopi do
+    resources :criterions
+    resources :indicators
+  end
+  get 'dashboard' => 'dashboard#index', as: :dashboard
+end
diff --git a/db/migrate/20210811082802_namespace_features.rb b/db/migrate/20210811082802_namespace_features.rb
new file mode 100644
index 0000000000000000000000000000000000000000..81ff89fb80f6d5e23d2337bcf4a137a8d25f8135
--- /dev/null
+++ b/db/migrate/20210811082802_namespace_features.rb
@@ -0,0 +1,7 @@
+class NamespaceFeatures < ActiveRecord::Migration[6.1]
+  def change
+    rename_table :programs, :features_education_programs
+    rename_table :qualiopi_indicators, :features_education_qualiopi_indicators
+    rename_table :qualiopi_criterions, :features_education_qualiopi_criterions
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 03c04b4c69f1d956d5e77e2ac9ff6c38ef4f3dd4..cc201452bbe5bc05169a791b32e01c80bb7654e0 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,13 +10,13 @@
 #
 # It's strongly recommended that you check this file into your version control system.
 
-ActiveRecord::Schema.define(version: 2021_08_09_084645) do
+ActiveRecord::Schema.define(version: 2021_08_11_082802) do
 
   # These are extensions that must be enabled in order to support this database
   enable_extension "pgcrypto"
   enable_extension "plpgsql"
 
-  create_table "programs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "features_education_programs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "university_id", null: false
     t.string "name"
     t.integer "level"
@@ -34,10 +34,10 @@ ActiveRecord::Schema.define(version: 2021_08_09_084645) do
     t.datetime "updated_at", precision: 6, null: false
     t.text "pricing"
     t.text "contacts"
-    t.index ["university_id"], name: "index_programs_on_university_id"
+    t.index ["university_id"], name: "index_features_education_programs_on_university_id"
   end
 
-  create_table "qualiopi_criterions", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "features_education_qualiopi_criterions", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
     t.integer "number"
     t.text "name"
     t.text "description"
@@ -45,7 +45,7 @@ ActiveRecord::Schema.define(version: 2021_08_09_084645) do
     t.datetime "updated_at", precision: 6, null: false
   end
 
-  create_table "qualiopi_indicators", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
+  create_table "features_education_qualiopi_indicators", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
     t.uuid "criterion_id", null: false
     t.integer "number"
     t.text "name"
@@ -55,7 +55,7 @@ ActiveRecord::Schema.define(version: 2021_08_09_084645) do
     t.text "non_conformity"
     t.datetime "created_at", precision: 6, null: false
     t.datetime "updated_at", precision: 6, null: false
-    t.index ["criterion_id"], name: "index_qualiopi_indicators_on_criterion_id"
+    t.index ["criterion_id"], name: "index_features_education_qualiopi_indicators_on_criterion_id"
   end
 
   create_table "universities", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
@@ -101,6 +101,6 @@ ActiveRecord::Schema.define(version: 2021_08_09_084645) do
     t.index ["unlock_token"], name: "index_users_on_unlock_token", unique: true
   end
 
-  add_foreign_key "programs", "universities"
-  add_foreign_key "qualiopi_indicators", "qualiopi_criterions", column: "criterion_id"
+  add_foreign_key "features_education_programs", "universities"
+  add_foreign_key "features_education_qualiopi_indicators", "features_education_qualiopi_criterions", column: "criterion_id"
 end