diff --git a/addons/account/static/src/xml/account_dashboard_setup_bar.xml b/addons/account/static/src/xml/account_dashboard_setup_bar.xml
index 7666753f26b223bef530b4c9d777e450ab48ed42..8b065bc7829b3a9df6dd5c5d30606248270951df 100644
--- a/addons/account/static/src/xml/account_dashboard_setup_bar.xml
+++ b/addons/account/static/src/xml/account_dashboard_setup_bar.xml
@@ -6,22 +6,22 @@
             <div class="o_form_statusbar">
                 <div class="o_statusbar_status" data-original-title="" title="" >
                     <button name="setting_chart_of_accounts_action" type="company_object" t-attf-class="btn btn-sm o_arrow_button btn-default account_setup_dashboard_action #{values['chart_of_accounts'] and 'o_action_done' or ''}" >
-                        <i class="fa fa-check" t-if="values['chart_of_accounts']"/>
+                        <i class="fa fa-check" t-if="values['chart_of_accounts']" role="img" aria-label="Current state" title="Current state" aria-current="step"/>
                         <b class="o_account_dashboard_index">4</b>
                         Chart of Accounts
                     </button>
                     <button name="setting_init_fiscal_year_action" type="company_object" t-attf-class="btn btn-sm o_arrow_button btn-default account_setup_dashboard_action #{values['fiscal_year'] and 'o_action_done' or ''}">
-                        <i class="fa fa-check" t-if="values['fiscal_year']"/>
+                        <i class="fa fa-check" t-if="values['fiscal_year']" role="img" aria-label="Current state" title="Current state" aria-current="step"/>
                         <b class="o_account_dashboard_index">3</b>
                         Fiscal Year
                     </button>
                     <button name="setting_init_bank_account_action" type="company_object" t-attf-class="btn btn-sm o_arrow_button btn-default account_setup_dashboard_action #{values['bank'] and 'o_action_done' or ''}">
-                        <i class="fa fa-check" t-if="values['bank']"/>
+                        <i class="fa fa-check" t-if="values['bank']" role="img" aria-label="Current state" title="Current state" aria-current="step"/>
                         <b class="o_account_dashboard_index">2</b>
                         Add a Bank Account
                     </button>
                     <button name="setting_init_company_action" type="company_object" t-attf-class="btn btn-sm o_arrow_button btn-default account_setup_dashboard_action #{values['company'] and 'o_action_done' or ''}">
-                        <i class="fa fa-check" t-if="values['company']"/>
+                        <i class="fa fa-check" t-if="values['company']" role="img" aria-label="Current state" title="Current state" aria-current="step"/>
                         <b class="o_account_dashboard_index">1</b>
                         Company Data
                     </button>
@@ -29,7 +29,7 @@
                     <h4 class="text-muted">Configuration Steps</h4>
                 </div>
                 <div class="pull-right" style="padding: 7px 0;">
-                    <button aria-hidden="true" data-dismiss="modal" type="company_object" name="setting_hide_setup_bar" class="account_setup_dashboard_action close">×</button>
+                    <button aria-label="Hide setup bar" data-dismiss="modal" type="company_object" name="setting_hide_setup_bar" class="account_setup_dashboard_action close">×</button>
                 </div>
             </div>
         </div>
diff --git a/addons/account/static/src/xml/account_payment.xml b/addons/account/static/src/xml/account_payment.xml
index 0a8abf28d72590b6108c6250cb042e8837897ca7..27fc4044f241e295e57a0c2cd5f9be38b6555f69 100644
--- a/addons/account/static/src/xml/account_payment.xml
+++ b/addons/account/static/src/xml/account_payment.xml
@@ -22,7 +22,7 @@
                     </t>
                     <t t-if="!outstanding">
                         <td>
-                            <a role="button" tabindex="0" class="js_payment_info fa fa-info-circle" t-att-index="line.index" style="margin-right:5px;"></a>
+                            <a role="button" tabindex="0" class="js_payment_info fa fa-info-circle" t-att-index="line.index" style="margin-right:5px;" aria-label="Info" title="Info"></a>
                         </td>
                         <td>
                             <i class="o_field_widget text-right o_payment_label">Paid on <t t-esc="line.date"></t></i>
diff --git a/addons/account/static/src/xml/account_reconciliation.xml b/addons/account/static/src/xml/account_reconciliation.xml
index a367feb03c029b3a7299bdd823602bd7ab87f897..0183aecebc7cce335eeb5f858cf1e35c9bb4f44d 100644
--- a/addons/account/static/src/xml/account_reconciliation.xml
+++ b/addons/account/static/src/xml/account_reconciliation.xml
@@ -81,7 +81,7 @@
             </caption>
             <thead>
                 <tr>
-                    <td class="cell_action"><span class="toggle_match fa fa-cog"></span></td>
+                    <td class="cell_action"><span class="toggle_match fa fa-cog" aria-label="Settings" role="img" title="Settings"></span></td>
                     <td class="cell_account_code"><t t-esc="state.st_line.account_code"/></td>
                     <td class="cell_due_date"><t t-esc="state.st_line.date"/></td>
                     <td class="cell_label"><t t-if="state.st_line.name" t-esc="state.st_line.name"/> <t t-if="state.st_line.amount_currency_str"> (<t t-esc="state.st_line.amount_currency_str"/>)</t></td>
@@ -120,7 +120,7 @@
     </t>
     <t t-jquery=".accounting_view thead tr" t-operation="replace">
         <tr>
-            <td class="cell_action"><span class="toggle_match fa fa-cog"></span></td>
+            <td class="cell_action"><span class="toggle_match fa fa-cog" aria-label="Settings" role="img" title="Settings"></span></td>
             <td colspan="3"><span/><span t-if="state.last_time_entries_checked">Last Reconciliation: <t t-esc="state.last_time_entries_checked"/></span></td>
             <td colspan="2"><t t-esc="state.st_line.account_code"/></td>
             <td class="cell_info_popover"></td>
@@ -130,12 +130,12 @@
 
 <t t-name="reconciliation.line.balance">
     <tr t-if="state.balance.amount_currency &amp;&amp; !(state.reconciliation_proposition[0] || {}).partial_reconcile">
-        <td class="cell_action"><span class="toggle_create fa fa-play"></span></td>
+        <td class="cell_action"><span role="img" class="toggle_create fa fa-play" aria-label="Run" title="Run"></span></td>
         <td class="cell_account_code"><t t-esc="state.balance.account_code"/></td>
         <td class="cell_due_date"></td>
         <td class="cell_label"><t t-if="state.balance.amount_currency &lt; 0">Create Write-off</t><t t-elif="state.st_line.partner_id">Open balance</t><t t-else="">Choose counterpart</t></td>
-        <td class="cell_left"><t t-if="state.balance.amount_currency &lt; 0"><span t-if="state.balance.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{state.balance.currency_id%8} line_info_button fa fa-money" t-att-data-content="state.balance.amount_currency_str"/><t t-raw="state.balance.amount_str"/></t></td>
-        <td class="cell_right"><t t-if="state.balance.amount_currency &gt; 0"><span t-if="state.balance.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{state.balance.currency_id%8} line_info_button fa fa-money" t-att-data-content="state.balance.amount_currency_str"/><t t-raw="state.balance.amount_str"/></t></td>
+        <td class="cell_left"><t t-if="state.balance.amount_currency &lt; 0"><span role="img" t-if="state.balance.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{state.balance.currency_id%8} line_info_button fa fa-money" t-att-data-content="state.balance.amount_currency_str" t-att-aria-label="state.balance.amount_currency_str" t-att-title="state.balance.amount_currency_str"/><t t-raw="state.balance.amount_str"/></t></td>
+        <td class="cell_right"><t t-if="state.balance.amount_currency &gt; 0"><span role="img" t-if="state.balance.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{state.balance.currency_id%8} line_info_button fa fa-money" t-att-data-content="state.balance.amount_currency_str" t-att-aria-label="state.balance.amount_currency_str" t-att-title="state.balance.amount_currency_str"/><t t-raw="state.balance.amount_str"/></t></td>
         <td class="cell_info_popover"></td>
     </tr>
 </t>
@@ -144,8 +144,8 @@
 <div t-name="reconciliation.line.match">
     <div class="match_controls">
         <input class="filter" placeholder="Filter..." type="text" value=""/>
-        <span class="pull-right fa fa-chevron-right disabled"></span>
-        <span class="pull-right fa fa-chevron-left disabled"></span>
+        <span class="pull-right fa fa-chevron-right disabled" role="img" aria-label="Previous" title="Previous"></span>
+        <span class="pull-right fa fa-chevron-left disabled" role="img" aria-label="Next" title="Next"></span>
     </div>
     <table>
         <tbody>
@@ -163,10 +163,10 @@
             <p t-if="!state.reconcileModels.length" style="color: #bbb;">To speed up reconciliation, define <a style="cursor: pointer;" class="reconcile_model_create">reconciliation models</a>.</p>
         </div>
         <div class="dropdown pull-right">
-            <a data-toggle="dropdown" href="#"><span class="fa fa-cog"/></a>
-            <ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="Presets config">
-                <li><a class="reconcile_model_create" href="#">Create model</a></li>
-                <li><a class="reconcile_model_edit" href="#">Modify models</a></li>
+            <a data-toggle="dropdown" href="#"><span class="fa fa-cog" role="img" aria-label="Settings"/></a>
+            <ul class="dropdown-menu dropdown-menu-right" role="menu" aria-label="Presets config">
+                <li><a role="menuitem" class="reconcile_model_create" href="#">Create model</a></li>
+                <li><a role="menuitem" class="reconcile_model_edit" href="#">Modify models</a></li>
             </ul>
         </div>
     </div>
@@ -205,14 +205,14 @@
         </tbody>
     </table>
     <div class="add_line_container">
-        <a class="add_line" t-att-style="!state.balance.amout ? 'display: none;' : null"><i class="fa fa-plus-circle"/> Save and New</a>
+        <a class="add_line fa fa-plus-circle" t-att-style="!state.balance.amout ? 'display: none;' : null">Save and New</a>
     </div>
 </div>
 
 
 <t t-name="reconciliation.line.mv_line">
     <tr t-if="line.display !== false" t-attf-class="mv_line #{line.already_paid ? ' already_reconciled' : ''} #{line.__invalid ? 'invalid' : ''} #{line.is_tax ? 'is_tax' : ''}" t-att-data-line-id="line.id" t-att-data-selected="selected">
-        <td class="cell_action"><span class="fa fa-add-remove"/></td>
+        <td class="cell_action"><span class="fa fa-add-remove" role="img" aria-label="Set" title="Set"/></td>
         <td class="cell_account_code"><t t-esc="line.account_code"/></td>
         <td class="cell_due_date"><t t-esc="line.date_maturity === false ? line.date : line.date_maturity"/></td>
         <td class="cell_label">
@@ -225,8 +225,8 @@
             <t t-if="line.ref &amp;&amp; line.ref.length"> : </t>
             <t t-esc="line.ref"/>
         </td>
-        <td class="cell_left"><t t-if="line.amount &lt; 0"><span t-if="line.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{line.currency_id%8} line_info_button fa fa-money" t-att-data-content="line.amount_currency_str"/><t t-raw="line.amount_str"/></t></td>
-        <td class="cell_right"><t t-if="line.amount &gt; 0"><span t-if="line.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{line.currency_id%8} line_info_button fa fa-money" t-att-data-content="line.amount_currency_str"/><t t-raw="line.amount_str"/></t></td>
+        <td class="cell_left"><t t-if="line.amount &lt; 0"><span role="img" t-if="line.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{line.currency_id%8} line_info_button fa fa-money" t-att-data-content="line.amount_currency_str" t-att-aria-label="line.amount_currency_str" t-att-title="line.amount_currency_str"/><t t-raw="line.amount_str"/></t></td>
+        <td class="cell_right"><t t-if="line.amount &gt; 0"><span role="img" t-if="line.amount_currency_str" t-attf-class="o_multi_currency o_multi_currency_color_#{line.currency_id%8} line_info_button fa fa-money" t-att-data-content="line.amount_currency_str" t-att-aria-label="line.amount_currency_str" t-att-title="line.amount_currency_str"/><t t-raw="line.amount_str"/></t></td>
         <td class="cell_info_popover"></td>
     </tr>
 </t>
@@ -266,10 +266,10 @@
 
 <t t-name="reconciliation.notification">
     <div t-att-class="'notification alert-dismissible alert alert-' + type" role="alert">
-        <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true" class="fa fa-times"></span><span class="sr-only">Close</span></button>
+        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span title="Close" class="fa fa-times"></span></button>
         <t t-esc="message" />
         <t t-if="details !== undefined">
-            <a class="fa fa-external-link" rel="do_action" href="#"
+            <a class="fa fa-external-link" rel="do_action" href="#" aria-label="External link" title="External link"
                 t-att-data-action_name="details.name"
                 t-att-data-model="details.model"
                 t-att-data-ids="details.ids">
diff --git a/addons/account/static/tests/reconciliation_tests.js b/addons/account/static/tests/reconciliation_tests.js
index 0ef3ec63b6ed75178628273e910dabfdda7af27a..45cbc30d8ea23fe96570290fa200b31cc35babb5 100644
--- a/addons/account/static/tests/reconciliation_tests.js
+++ b/addons/account/static/tests/reconciliation_tests.js
@@ -941,11 +941,11 @@ QUnit.module('account', {
 
         // Simulate changing partner with SelectCreateDialog
         widget = clientAction.widgets[1];
-        assert.strictEqual($('.modal').length, 0, "shouldn't have any opened modal");
+        assert.strictEqual($('[role="dialog"]').length, 0, "shouldn't have any opened modal");
         widget.$('.o_input_dropdown input').trigger('click');
         $('.ui-autocomplete .ui-menu-item a:contains(Search More):eq(1)').trigger('mouseenter').trigger('click');
-        assert.strictEqual($('.modal').length, 1, "should open a SelectCreateDialog");
-        $('.modal table.o_list_view td:contains(Camptocamp)').click();
+        assert.strictEqual($('[role="dialog"]').length, 1, "should open a SelectCreateDialog");
+        $('[role="dialog"] table.o_list_view td:contains(Camptocamp)').click();
         assert.strictEqual(widget.$('.o_input_dropdown input').val(), "Camptocamp", "the partner many2one should display Camptocamp");
 
         widget = clientAction.widgets[2];
@@ -1100,7 +1100,7 @@ QUnit.module('account', {
         widget.$('.create .create_account_id input').trigger('click');
         $('.ui-autocomplete .ui-menu-item a:contains(Search)').trigger('mouseenter').trigger('click');
         // select the account who does not appear in the drop drown
-        $('.modal tr.o_data_row:contains(502)').click();
+        $('[role="dialog"] tr.o_data_row:contains(502)').click();
         assert.strictEqual(widget.$('.create .create_account_id input').val(), "101200 Account Receivable", "Selected account does not change");
         // wait the name_get to render the changes
         def.resolve();
diff --git a/addons/account/views/account_invoice_view.xml b/addons/account/views/account_invoice_view.xml
index 8345b94ac5825bf3ed716fcda604f14bd27389b8..8a587a3c7ff445245af70d1e9ce0d68c8d90f406 100644
--- a/addons/account/views/account_invoice_view.xml
+++ b/addons/account/views/account_invoice_view.xml
@@ -235,11 +235,11 @@
                 <field name="has_outstanding" invisible="1"/>
                 <sheet string="Vendor Bill">
                     <div>
-                        <label string="Draft Bill" attrs="{'invisible': ['|',('state','!=','draft'), ('type','!=','in_invoice')]}"/>
-                        <label string="- First Number:" attrs="{'invisible': [('sequence_number_next_prefix','=',False)]}"/>
-                        <label string="Draft Credit Note" attrs="{'invisible': ['|',('state','!=','draft'), ('type','!=','in_refund')]}"/>
-                        <label string="Bill " attrs="{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_invoice')]}"/>
-                        <label string="Credit Note " attrs="{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_refund')]}"/>
+                        <span class="o_form_label" attrs="{'invisible': ['|',('state','!=','draft'), ('type','!=','in_invoice')]}">Draft Bill</span>
+                        <span class="o_form_label" attrs="{'invisible': [('sequence_number_next_prefix','=',False)]}">- First Number:</span>
+                        <span class="o_form_label" attrs="{'invisible': ['|',('state','!=','draft'), ('type','!=','in_refund')]}">Draft Credit Note</span>
+                        <span class="o_form_label" attrs="{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_invoice')]}">Bill </span>
+                        <span class="o_form_label" attrs="{'invisible': ['|',('state', '=', 'draft'), ('type','!=','in_refund')]}">Credit Note </span>
                         <h1 class="mt0">
                             <field name="number" class="oe_inline" attrs="{'invisible': [('state', '=', 'draft')]}"/>
                             <div  attrs="{'invisible': [('sequence_number_next_prefix','=',False)]}">
@@ -387,15 +387,15 @@
                 <sheet string="Invoice">
                     <div class="oe_button_box" name="button_box">
                     </div>
-                    <label string="Credit Note" attrs="{'invisible': ['|',('state','=','draft'), ('type','!=','out_refund')]}"/>
+                    <span class="o_form_label"> attrs="{'invisible': ['|',('state','=','draft'), ('type','!=','out_refund')]}">Credit Note</span>
                     <h1 class="mt0">
                         <div attrs="{'invisible': [('sequence_number_next_prefix','!=',False)]}">
-                            <label string="Draft Invoice" attrs="{'invisible': ['|',('state','not in',('draft',)), ('type','!=','out_invoice')]}"/>
-                            <label string="Draft Credit Note" attrs="{'invisible': ['|',('state','not in',('draft',)), ('type','!=','out_refund')]}"/>
+                            <label for="number" string="Draft Invoice" attrs="{'invisible': ['|',('state','not in',('draft',)), ('type','!=','out_invoice')]}"/>
+                            <label for="number" string="Draft Credit Note" attrs="{'invisible': ['|',('state','not in',('draft',)), ('type','!=','out_refund')]}"/>
                             <field name="number" readonly="1" class="oe_inline" attrs="{'invisible': [('state','in',('draft',))]}"/>
                         </div>
                         <div  attrs="{'invisible': [('sequence_number_next_prefix','=',False)]}">
-                            <label string="Invoice Number:"/><br/>
+                            <label for="sequence_number_next_prefix" string="Invoice Number:"/><br/>
                             <field name="sequence_number_next_prefix" class="oe_inline"/>
                             <field name="sequence_number_next" class="oe_inline"/>
                         </div>
diff --git a/addons/account/views/account_journal_dashboard_view.xml b/addons/account/views/account_journal_dashboard_view.xml
index 0c27c84325223070aba88d3f44a67e30a0e1a792..346e7793d1fdadfcebc7c9b32455706c0cb85a04 100644
--- a/addons/account/views/account_journal_dashboard_view.xml
+++ b/addons/account/views/account_journal_dashboard_view.xml
@@ -29,7 +29,7 @@
                                     </t>
                                 </div>
                                 <t t-if="journal_type == 'bank' || journal_type == 'cash' || journal_type == 'sale' || journal_type == 'purchase'" t-call="JournalBodyGraph"/>
-                            </div><div class="container o_kanban_card_manage_pane dropdown-menu">
+                            </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
                                 <t t-call="JournalManage"/>
                             </div>
                         </div>
@@ -46,7 +46,7 @@
                                 </div>
                             </div>
                             <div class="o_kanban_manage_button_section">
-                                <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" /></a>
+                                <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" aria-label="Selection" role="img" title="Selection"/></a>
                             </div>
                         </div>
                     </t>
@@ -57,57 +57,57 @@
                         <div t-if="journal_type == 'bank' || journal_type == 'cash'" class="row">
                              <div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_view">
                                 <div class="o_kanban_card_manage_title">
-                                    <span>View</span>
+                                    <span role="separator">View</span>
                                 </div>
                                 <div>
-                                    <a type="object" name="open_action">Statements</a>
+                                    <a role="menuitem" type="object" name="open_action">Statements</a>
                                 </div>
                                 <div>
-                                    <a type="object" name="open_action_with_context" context="{'action_name': 'action_bank_statement_line', 'search_default_journal': True}">Operations</a>
+                                    <a role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_bank_statement_line', 'search_default_journal': True}">Operations</a>
                                 </div>
                                 <div>
-                                    <a type="object" name="open_collect_money">Customer Payments</a>
+                                    <a role="menuitem" type="object" name="open_collect_money">Customer Payments</a>
                                 </div>
                                 <div>
-                                    <a type="object" name="open_spend_money">Vendor Payments</a>
+                                    <a role="menuitem" type="object" name="open_spend_money">Vendor Payments</a>
                                 </div>
                                 <div>
-                                    <a type="object" name="open_transfer_money">Internal Transfers</a>
+                                    <a role="menuitem" type="object" name="open_transfer_money">Internal Transfers</a>
                                 </div>
                                 <div>
-                                    <a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
+                                    <a role="menuitem" type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
                                 </div>
                             </div>
 
                              <div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_new">
                                 <div class="o_kanban_card_manage_title">
-                                    <span>New</span>
+                                    <span role="separator">New</span>
                                 </div>
                                 <div name="bank_cash_commands">
                                     <t t-if="journal_type == 'bank'">
-                                        <a type="object" name="create_bank_statement">Statement</a>
+                                        <a role="menuitem" type="object" name="create_bank_statement">Statement</a>
                                     </t>
                                     <t t-if="journal_type == 'cash'">
-                                        <a type="object" name="create_cash_statement">Statement</a>
+                                        <a role="menuitem" type="object" name="create_cash_statement">Statement</a>
                                     </t>
                                 </div>
                                 <div>
-                                    <a type="object" name="create_customer_payment">Customer Payment</a>
+                                    <a role="menuitem" type="object" name="create_customer_payment">Customer Payment</a>
                                 </div>
                                 <div>
-                                    <a type="object" name="create_supplier_payment">Vendor Payment</a>
+                                    <a role="menuitem" type="object" name="create_supplier_payment">Vendor Payment</a>
                                 </div>
                                 <div>
-                                    <a type="object" name="create_internal_transfer">Internal Transfer</a>
+                                    <a role="menuitem" type="object" name="create_internal_transfer">Internal Transfer</a>
                                 </div>
                             </div>
 
                              <div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_reconciliation">
                                 <div class="o_kanban_card_manage_title">
-                                    <span>Reconciliation</span>
+                                    <span role="separator">Reconciliation</span>
                                 </div>
                                 <div>
-                                    <a type="object" name="open_action_with_context" context="{'action_name': 'action_account_reconcile_model', 'use_domain': True}" groups="account.group_account_manager">Reconciliation Models</a>
+                                    <a role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_account_reconcile_model', 'use_domain': True}" groups="account.group_account_manager">Reconciliation Models</a>
                                 </div>
                             </div>
                         </div>
diff --git a/addons/account/views/account_payment_view.xml b/addons/account/views/account_payment_view.xml
index f7a425f174bd54f9e7978acd9ebd259af324f772..9593f4207e3c8e3475f84fdaf5166fb9edaecfc6 100644
--- a/addons/account/views/account_payment_view.xml
+++ b/addons/account/views/account_payment_view.xml
@@ -57,7 +57,7 @@
                                         <strong><span><field name="name"/></span></strong>
                                     </div>
                                     <div class="col-xs-6 text-right">
-                                        <strong><i class="fa fa-clock-o"/> <t t-esc="record.payment_date.value"/></strong>
+                                        <strong><i class="fa fa-clock-o" role="img" aria-label="Date" title="Date"/> <t t-esc="record.payment_date.value"/></strong>
                                     </div>
                                 </div>
                                 <div class="row">
@@ -272,7 +272,7 @@
                                     <div attrs="{'invisible': [('payment_difference_handling','=','open')]}">
                                         <label for="writeoff_account_id" class="oe_edit_only" string="Post Difference In"/>
                                         <field name="writeoff_account_id" string="Post Difference In" attrs="{'required': [('payment_difference_handling', '=', 'reconcile')]}"/>
-                                        <label string="Journal" attrs="{'invisible': [('amount', '!=', 0)]}"/>
+                                        <label for="journal_id" string="Journal" attrs="{'invisible': [('amount', '!=', 0)]}"/>
                                         <field name="journal_id" string="Journal" widget="selection" attrs="{'invisible': [('amount', '!=', 0)]}"/>
                                         <label for="writeoff_label" class="oe_edit_only" string="Label"/>
                                         <field name="writeoff_label" attrs="{'required': [('payment_difference_handling', '=', 'reconcile')]}"/>
@@ -339,7 +339,7 @@
                                 <div attrs="{'invisible': [('payment_difference_handling','=','open')]}">
                                     <label for="writeoff_account_id" class="oe_edit_only" string="Post Difference In"/>
                                     <field name="writeoff_account_id" string="Post Difference In" attrs="{'required': [('payment_difference_handling', '=', 'reconcile')]}"/>
-                                    <label string="Journal" attrs="{'invisible': [('amount', '!=', 0)]}"/>
+                                    <label for="journal_id" string="Journal" attrs="{'invisible': [('amount', '!=', 0)]}"/>
                                     <field name="journal_id" string="Journal" widget="selection" attrs="{'invisible': [('amount', '!=', 0)]}"/>
                                     <label for="writeoff_label" class="oe_edit_only" string="Label"/>
                                     <field name="writeoff_label" attrs="{'required': [('payment_difference_handling', '=', 'reconcile')]}"/>
diff --git a/addons/account/views/account_portal_templates.xml b/addons/account/views/account_portal_templates.xml
index 21ac38d693eab9697b6d5162deee629975ac584c..6e49a4c8d46ff07d6d487c43f380368f81929a63 100644
--- a/addons/account/views/account_portal_templates.xml
+++ b/addons/account/views/account_portal_templates.xml
@@ -48,13 +48,13 @@
                         <td class='hidden-xs'><span t-field="invoice.date_due"/></td>
                         <td class="tx_status">
                             <t t-if="invoice.state == 'open'">
-                                <span class="label label-info"><i class="fa fa-fw fa-clock-o"></i><span class="hidden-xs"> Waiting for Payment</span></span>
+                                <span class="label label-info"><i class="fa fa-fw fa-clock-o" aria-label="Opened" title="Opened" role="img"></i><span class="hidden-xs"> Waiting for Payment</span></span>
                             </t>
                             <t t-if="invoice.state == 'paid'">
-                                <span class="label label-default"><i class="fa fa-fw fa-check"></i><span class="hidden-xs"> Paid</span></span>
+                                <span class="label label-default"><i class="fa fa-fw fa-check" aria-label="Paid" title="Paid" role="img"></i><span class="hidden-xs"> Paid</span></span>
                             </t>
                             <t t-if="invoice.state == 'cancel'">
-                                <span class="label label-default"><i class="fa fa-fw fa-remove"></i><span class="hidden-xs"> Cancelled</span></span>
+                                <span class="label label-default"><i class="fa fa-fw fa-remove" aria-label="Cancelled" title="Cancelled" role="img"></i><span class="hidden-xs"> Cancelled</span></span>
                             </t>
                         </td>
                         <td><span t-esc="-invoice.residual if invoice.type == 'out_refund' else invoice.residual" t-options='{"widget": "monetary", "display_currency": invoice.currency_id}'/></td>
@@ -93,8 +93,8 @@
                         <div class="pb8 ml16 mr16 container">
                             <t t-if="invoice.user_id">
                                 <div><strong>Your Contact:</strong></div>
-                                <img class="img-circle mr4 pull-left o_portal_contact_img" t-if="invoice.user_id.image" t-attf-src="data:image/png;base64,#{invoice.user_id.image}"/>
-                                <img class="img-circle mr4 pull-left o_portal_contact_img" t-if="not invoice.user_id.image" src="/web/static/src/img/placeholder.png"/>
+                                <img class="img-circle mr4 pull-left o_portal_contact_img" t-if="invoice.user_id.image" t-attf-src="data:image/png;base64,#{invoice.user_id.image}" alt="Contact"/>
+                                <img class="img-circle mr4 pull-left o_portal_contact_img" t-if="not invoice.user_id.image" src="/web/static/src/img/placeholder.png" alt="Contact"/>
                                 <span t-field="invoice.user_id" t-field-options='{"widget": "contact", "fields": ["name", "phone"], "no_marker": True}'/>
                                 <a data-toggle="modal" href="#" data-target="#invoice_chatter">Contact us</a>
                             </t>
@@ -142,7 +142,7 @@
 
     <template id="portal_invoice_error" name="Invoice error/warning display">
         <div class="row mr16">
-            <div t-attf-class="'col-md-12 mr16 ml16 alert alert-dismissable' #{'alert-danger' if error else 'alert-warning'}">
+            <div t-attf-class="'col-md-12 mr16 ml16 alert alert-dismissable' #{'alert-danger' if error else 'alert-warning'}" role="alert">
                 <a href="#" class="close" data-dismiss="alert" aria-label="close" title="close">×</a>
                 <t t-if="error == 'generic'" name="generic">
                     There was an error processing this page.
@@ -153,7 +153,7 @@
 
     <template id="portal_invoice_success" name="Invoice success display">
         <div class="row mr16">
-            <div class="col-md-12 mr16 ml16 alert alert-dismissable alert-success">
+            <div class="col-md-12 mr16 ml16 alert alert-dismissable alert-success" role="status">
                 <a href="#" class="close" data-dismiss="alert" aria-label="close" title="close">×</a>
             </div>
         </div>
diff --git a/addons/account/views/account_view.xml b/addons/account/views/account_view.xml
index 7213ed5870c28633ba223364a3263c681b232521..63108d2edc5cd1eee5f48b3ed79f108cfd2dcf96 100644
--- a/addons/account/views/account_view.xml
+++ b/addons/account/views/account_view.xml
@@ -345,7 +345,7 @@
                                         <field name="loss_account_id"/>
                                     </group>
                                     <group name="group_alias" string="Email your Vendor Bills" attrs="{'invisible': [('type', '!=',  'purchase')]}">
-                                        <label string="Email Alias" attrs="{'invisible': [('alias_domain', '=', False)]}"/>
+                                        <label string="Email Alias" attrs="{'invisible': [('alias_domain', '=', False)]}" for="alias_id"/>
                                         <div name="alias_def" attrs="{'invisible': [('alias_domain', '=', False)]}">
                                             <field name="alias_id" class="oe_read_only oe_inline"/>
                                             <div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" >
@@ -353,7 +353,7 @@
                                             </div>
                                         </div>
                                         <div class="content-group" attrs="{'invisible': [('alias_domain', '!=', False)]}">
-                                            <a type='action' name='%(action_open_settings)d' class="btn btn-sm btn-link"><i class="fa fa-fw o_button_icon fa-arrow-right"/> Configure Email Servers</a>
+                                            <a type='action' name='%(action_open_settings)d' class="btn btn-sm btn-link" role="button"><span class="fa fa-fw o_button_icon fa-arrow-right"> Configure Email Servers</span></a>
                                     </div>
                                     </group>
                                 </group>
@@ -860,7 +860,7 @@
                                 <label for="amount"/>
                                 <div>
                                     <field name="amount" class="oe_inline"/>
-                                    <label string="%" class="oe_inline" attrs="{'invisible':[('amount_type','!=','percentage')]}" />
+                                    <span class="o_form_label oe_inline" attrs="{'invisible':[('amount_type','!=','percentage')]}">%</span>
                                 </div>
                                 <field name="journal_id" domain="[('company_id', '=', company_id)]" widget="selection"/>
                             </group>
@@ -882,7 +882,7 @@
                                 <label for="second_amount" string="Amount"/>
                                 <div>
                                     <field name="second_amount" class="oe_inline"/>
-                                    <label string="%" class="oe_inline" attrs="{'invisible':[('amount_type','!=','percentage')]}" />
+                                    <span class="o_form_label oe_inline" attrs="{'invisible':[('amount_type','!=','percentage')]}">%</span>
                                 </div>
                                 <field name="second_journal_id" string="Journal" domain="[('company_id', '=', company_id)]" widget="selection"/>
                             </group>
@@ -1105,7 +1105,7 @@
                                     <label for="amount" attrs="{'invisible':[('amount_type','not in', ('fixed', 'percent', 'division'))]}"/>
                                     <div attrs="{'invisible':[('amount_type','not in', ('fixed', 'percent', 'division'))]}">
                                         <field name="amount" class="oe_inline" />
-                                        <label string="%" class="oe_inline" attrs="{'invisible':[('amount_type','=','fixed')]}" />
+                                        <span class="o_form_label oe_inline" attrs="{'invisible':[('amount_type','=','fixed')]}">%</span>
                                     </div>
                                 </group>
                                 <group attrs="{'invisible':[('amount_type','=', 'group')]}" groups="account.group_account_user">
@@ -1257,13 +1257,13 @@
                                         <span t-esc="record.move_id.value"/>
                                     </strong>
                                     <strong class="col-xs-6 text-right">
-                                        <i class="fa fa-clock-o"/><field name="date_maturity"/>
+                                        <i class="fa fa-clock-o" aria-label="Date" role="img" title="Date"/><field name="date_maturity"/>
                                     </strong>
                                     <div class="col-xs-10">
                                         <span t-esc="record.name.value"/>
                                     </div>
                                     <div class="col-xs-2 text-right">
-                                        <img t-att-src="kanban_image('res.partner', 'image_small', record.partner_id.raw_value)" t-att-title="record.partner_id.value" width="24" height="24" class="oe_kanban_avatar"/>
+                                        <img t-att-src="kanban_image('res.partner', 'image_small', record.partner_id.raw_value)" t-att-title="record.partner_id.value" t-att-alt="record.partner_id.value" width="24" height="24" class="oe_kanban_avatar"/>
                                     </div>
                                 </div>
                             </div>
@@ -1468,7 +1468,7 @@
                                         <strong><span><field name="journal_id"/></span></strong>
                                     </div>
                                     <div class="col-xs-6 text-right">
-                                        <strong><i class="fa fa-clock-o"/> <t t-esc="record.date.value"/></strong>
+                                        <strong><i class="fa fa-clock-o" aria-label="Date" role="img" title="Date"/> <t t-esc="record.date.value"/></strong>
                                     </div>
                                 </div>
                                 <div class="row">
@@ -1695,7 +1695,7 @@
                             <div attrs="{'invisible':[('value','=', 'balance')]}" class="o_row">
                                 <label for="value_amount" attrs="{'invisible':[('value','=', 'balance')]}"/>
                                 <field name="value_amount" class="oe_inline"/>
-                                <label string="%" class="oe_inline" attrs="{'invisible':[('value','!=','percent')]}"/>
+                                <span class="o_form_label oe_inline" attrs="{'invisible':[('value','!=','percent')]}">%</span>
                             </div>
                         </group>
                     </group>
@@ -1713,7 +1713,7 @@
                     <div colspan="2" attrs="{'invisible': [('option','!=', 'day_after_invoice_date')]}">
                         <label for="day_of_the_month" string="On the"/>
                         <field name="day_of_the_month" class="oe_inline"/>
-                        <label string="of the month"/>
+                        <span class="o_form_label">of the month</span>
                     </div>
                 </form>
             </field>
@@ -1942,7 +1942,7 @@
                                     <label for="amount" attrs="{'invisible':[('amount_type','=', 'group')]}"/>
                                     <div attrs="{'invisible':[('amount_type','=', 'group')]}">
                                         <field name="amount" class="oe_inline" />
-                                        <label string="%" class="oe_inline" attrs="{'invisible':[('amount_type','=','fixed')]}" />
+                                        <span class="o_form_label oe_inline" attrs="{'invisible':[('amount_type','=','fixed')]}">%</span>
                                     </div>
                                 </group>
                                 <group attrs="{'invisible':[('amount_type','=', 'group')]}">
diff --git a/addons/account/views/res_config_settings_views.xml b/addons/account/views/res_config_settings_views.xml
index 28607bc8de73d90d4b684bcaae202f9f21a3d3bf..3c7fc6f3b1b029715f4cdf15a7c2f7540e3e4762 100644
--- a/addons/account/views/res_config_settings_views.xml
+++ b/addons/account/views/res_config_settings_views.xml
@@ -24,14 +24,14 @@
                                 <div class="col-xs-12 col-md-6 o_setting_box" attrs="{'invisible': [('has_accounting_entries','!=',False)]}">
                                     <div class="o_setting_left_pane"/>
                                     <div class="o_setting_right_pane">
-                                        <label string="Fiscal Localization"/>
-                                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                        <span class="o_form_label">Fiscal Localization</span>
+                                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                         <div class="text-muted">
                                             Taxes, fiscal positions, chart of accounts &amp; legal statements for your country
                                         </div>
                                         <div class="content-group">
                                             <div class="row mt16">
-                                                <label string="Package" class="col-md-3 o_light_label"/>
+                                                <label for="chart_template_id" string="Package" class="col-md-3 o_light_label"/>
                                                 <field name="chart_template_id" widget="selection"/>
                                             </div>
                                             <div>
@@ -49,7 +49,7 @@
                                         <field name="account_hide_setup_bar" widget="upgrade_boolean"/>
                                     </div>
                                     <div class="o_setting_right_pane">
-                                        <label string='Hide the Configuration Steps bar'/>
+                                        <label for="account_hide_setup_bar" string='Hide the Configuration Steps bar'/>
                                         <div class="text-muted">
                                             Deactivate the "Configuration Steps" bar on the dashboard
                                         </div>
@@ -62,8 +62,8 @@
                             <div class="col-xs-12 col-md-6 o_setting_box" title="These taxes are set in any new product created.">
                                 <div class="o_setting_left_pane"/>
                                 <div class="o_setting_right_pane">
-                                    <label string='Default Taxes'/>
-                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                    <span class="o_form_label">Default Taxes</span>
+                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                     <div class="text-muted">
                                         Default taxes applied to local transactions
                                     </div>
@@ -82,7 +82,7 @@
                             <div class="col-xs-12 col-md-6 o_setting_box" id="rounding_method" title="A rounding per line is advised if your prices are tax-included. That way, the sum of line subtotals equals the total with taxes.">
                                 <div class="o_setting_left_pane"/>
                                 <div class="o_setting_right_pane">
-                                    <label string="Rounding Method"/>
+                                    <span class="o_form_label">Rounding Method</span>
                                     <div class="text-muted">
                                         How total tax amount is computed in orders and invoices
                                     </div>
@@ -97,7 +97,7 @@
                                 </div>
                                 <div class="o_setting_right_pane" name="account_taxcloud_right_pane">
                                     <label for="module_account_taxcloud" string="TaxCloud"/>
-                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                     <div class="text-muted">
                                         Compute tax rates based on U.S. ZIP codes
                                     </div>
@@ -120,7 +120,7 @@
                                 </div>
                                 <div class="o_setting_right_pane">
                                     <label for="tax_exigibility"/>
-                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                     <div class="text-muted">
                                         Allow to configure taxes using cash basis
                                     </div>
@@ -138,8 +138,8 @@
                             <div class="col-xs-12 col-md-6 o_setting_box">
                                 <div class="o_setting_left_pane"/>
                                 <div class="o_setting_right_pane">
-                                    <label string="Main Currency"/>
-                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                    <span class="o_form_label">Main Currency</span>
+                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                     <div class="text-muted">
                                         Main currency of your company
                                     </div>
@@ -223,7 +223,7 @@
                                     <field name="module_account_payment"/>
                                 </div>
                                 <div class="o_setting_right_pane">
-                                    <label string="Online Payment"/>
+                                    <label for="module_account_payment" string="Online Payment"/>
                                     <div class="text-muted">
                                         Let your customers pay their invoices online
                                     </div>
@@ -234,7 +234,7 @@
                                     <field name="module_account_batch_payment" widget="upgrade_boolean"/>
                                 </div>
                                 <div class="o_setting_right_pane">
-                                    <label string="Batch Payments"/>
+                                    <label for="module_account_batch_deposit" string="Batch Payments"/>
                                     <div class="text-muted">
                                         Group payments into a single batch to ease the reconciliation process
                                     </div>
@@ -246,7 +246,7 @@
                                 </div>
                                 <div class="o_setting_right_pane" name="sepa_direct_debit_right_pane">
                                     <label string="SEPA Direct Debit (SDD)" for="module_account_sepa"/>
-                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                     <div class="text-muted">
                                         Collect customer payments in one-click using Euro SEPA Service
                                     </div>
@@ -267,7 +267,7 @@
                                 </div>
                                 <div class="o_setting_right_pane">
                                     <label string="Checks" for="module_account_check_printing"/>
-                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                     <div class="text-muted" id="print_bills_payment">
                                         Print checks to pay your vendors
                                     </div>
@@ -279,7 +279,7 @@
                                 </div>
                                 <div class="o_setting_right_pane" name="sepa_right_pane">
                                     <label for="module_account_sepa"/>
-                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                     <div class="text-muted">
                                         Pay your bills in one-click using Euro SEPA Service
                                     </div>
@@ -295,7 +295,7 @@
                                         <field name="module_account_yodlee" widget="upgrade_boolean"/>
                                     </div>
                                     <div class="o_setting_right_pane">
-                                        <label string="Automatic Import"/>
+                                        <label for="module_account_yodlee" string="Automatic Import"/>
                                         <div class="text-muted">
                                             Import your bank statements automatically
                                         </div>
@@ -306,7 +306,7 @@
                                         <field name="module_account_bank_statement_import_csv" widget="upgrade_boolean"/>
                                     </div>
                                     <div class="o_setting_right_pane">
-                                        <label string="CSV Import"/>
+                                        <label for="module_account_bank_statement_import_csv" string="CSV Import"/>
                                         <div class="text-muted">
                                             Import your bank statements in CSV
                                         </div>
@@ -317,7 +317,7 @@
                                         <field name="module_account_bank_statement_import_qif" widget="upgrade_boolean"/>
                                     </div>
                                     <div class="o_setting_right_pane">
-                                        <label string="QIF Import"/>
+                                        <label for="module_account_bank_statement_import_qif" string="QIF Import"/>
                                         <div class="text-muted">
                                             Import your bank statements in QIF
                                         </div>
@@ -328,7 +328,7 @@
                                         <field name="module_account_bank_statement_import_ofx" widget="upgrade_boolean"/>
                                     </div>
                                     <div class="o_setting_right_pane">
-                                        <label string="OFX Import"/>
+                                        <label for="module_account_bank_statement_import_ofx" string="OFX Import"/>
                                         <div class="text-muted">
                                             Import your bank statements in OFX
                                         </div>
@@ -339,7 +339,7 @@
                                         <field name="module_account_bank_statement_import_camt" widget="upgrade_boolean"/>
                                     </div>
                                     <div class="o_setting_right_pane">
-                                        <label string="CAMT Import"/>
+                                        <label for="module_account_bank_statement_import_camt" string="CAMT Import"/>
                                         <div class="text-muted">
                                             Import your bank statements in CAMT.053
                                         </div>
@@ -405,7 +405,7 @@
                                     <field name="module_product_margin"/>
                                 </div>
                                 <div class="o_setting_right_pane">
-                                    <label string="Margin Analysis"/>
+                                    <label for="module_product_margin" string="Margin Analysis"/>
                                     <div class="text-muted">
                                         Monitor your product margins from invoices
                                     </div>
diff --git a/addons/account/wizard/account_report_aged_partner_balance_view.xml b/addons/account/wizard/account_report_aged_partner_balance_view.xml
index 42ca836364d335fc1c66b5311a93293aa99e4716..fc0fab2f3ea60ec63c4e8cde47c288d7aea3763d 100644
--- a/addons/account/wizard/account_report_aged_partner_balance_view.xml
+++ b/addons/account/wizard/account_report_aged_partner_balance_view.xml
@@ -7,7 +7,7 @@
         <field name="arch" type="xml">
             <form string="Report Options">
                 <separator string="Aged Partner Balance"/>
-                <label string="Aged Partner Balance is a more detailed report of your receivables by intervals. Odoo calculates a table of credit balance by start Date. So if you request an interval of 30 days Odoo generates an analysis of creditors for the past month, past two months, and so on. "/>
+                <span class="o_form_label">Aged Partner Balance is a more detailed report of your receivables by intervals. Odoo calculates a table of credit balance by start Date. So if you request an interval of 30 days Odoo generates an analysis of creditors for the past month, past two months, and so on. </span>
                 <group col="4">
                     <field name="date_from"/>
                     <field name="period_length"/>
diff --git a/addons/account/wizard/account_unreconcile_view.xml b/addons/account/wizard/account_unreconcile_view.xml
index 1c7927b2f8b256c7292ac1cd3fac85b3912c17c8..374a7f85f33a3212942cb5bc93019ecda8ebbded 100644
--- a/addons/account/wizard/account_unreconcile_view.xml
+++ b/addons/account/wizard/account_unreconcile_view.xml
@@ -8,7 +8,7 @@
             <field name="arch" type="xml">
             <form string="Unreconcile">
                 <separator string="Unreconcile Transactions"/>
-                <label string="If you unreconcile transactions, you must also verify all the actions that are linked to those transactions because they will not be disabled"/>
+                <form class="o_form_label">If you unreconcile transactions, you must also verify all the actions that are linked to those transactions because they will not be disabled</form>
                 <footer>
                     <button string="Unreconcile" name="trans_unrec" type="object" default_focus="1" class="btn-primary"/>
                     <button string="Cancel" class="btn-default" special="cancel"/>
diff --git a/addons/account/wizard/account_validate_move_view.xml b/addons/account/wizard/account_validate_move_view.xml
index 2d94db9afbe6a66fe4f837d23a0c0d41ade74513..7ffe823afc9bcd1c40d7d4b5a0a8f777d145ad19 100644
--- a/addons/account/wizard/account_validate_move_view.xml
+++ b/addons/account/wizard/account_validate_move_view.xml
@@ -8,7 +8,7 @@
             <field name="model">validate.account.move</field>
             <field name="arch" type="xml">
                 <form string="Post Journal Entries">
-                    <label string="All selected journal entries will be validated and posted. You won't be able to modify them afterwards."/>
+                    <span class="o_form_label">All selected journal entries will be validated and posted. You won't be able to modify them afterwards.</span>
                     <footer>
                         <button string="Post Journal Entries" name="validate_move" type="object" default_focus="1" class="btn-primary"/>
                         <button string="Cancel" class="btn-default" special="cancel"/>
diff --git a/addons/account_analytic_default/views/account_analytic_default_view.xml b/addons/account_analytic_default/views/account_analytic_default_view.xml
index 60723e1c2aca3fdf7c0f85e368d632968a632dcc..2d80a7ebd1819eedcd407ece0601e1acb49ea3a7 100644
--- a/addons/account_analytic_default/views/account_analytic_default_view.xml
+++ b/addons/account_analytic_default/views/account_analytic_default_view.xml
@@ -55,9 +55,9 @@
                             <div t-attf-class="oe_kanban_card oe_kanban_global_click">
                                 <div>
                                     <strong><span><field name="analytic_id"/></span></strong>
-                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                                 </div>
-                                <div t-if="record.date_start.value"><i class="fa fa-calendar"></i> From <field name="date_start"/> <t t-if="record.date_stop.value">to <field name="date_stop"/></t></div>
+                                <div t-if="record.date_start.value"><span class="fa fa-calendar"> From</span> <field name="date_start"/> <t t-if="record.date_stop.value">to <field name="date_stop"/></t></div>
                                 <div t-if="record.product_id.value"><strong>Product</strong> <field name="product_id"/> </div>
                                 <div t-if="record.partner_id.value"><strong>Customer</strong> <field name="partner_id"/> </div>
                             </div>
diff --git a/addons/account_budget/views/account_budget_views.xml b/addons/account_budget/views/account_budget_views.xml
index d9404e2389db366dc3c8040d93abbd5d00a6fb34..b367e4dd77648eba4a072befafd6677dd0c83656 100644
--- a/addons/account_budget/views/account_budget_views.xml
+++ b/addons/account_budget/views/account_budget_views.xml
@@ -196,14 +196,14 @@ Budgets
                             </div>
                             <div class="row">
                                 <div class="col-xs-10">
-                                    <i class="fa fa-clock-o"/>
+                                    <i class="fa fa-clock-o" role="img" aria-label="Period" title="Period"/>
                                     <t t-esc="record.date_from.value"/>-
                                     <t t-esc="record.date_to.value"/>
                                 </div>
                                 <div class="col-xs-2">
                                     <span class="pull-right">
                                         <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)"
-                                             t-att-title="record.user_id.value" width="24" height="24"
+                                             t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24"
                                              class="oe_kanban_avatar pull-right"/>
                                     </span>
                                 </div>
diff --git a/addons/account_payment/views/account_portal_templates.xml b/addons/account_payment/views/account_portal_templates.xml
index 3e97164577e155e7bf7dca4357320665acbbe41f..706bea92384fc4067e0692e37a501f4724c84c1e 100644
--- a/addons/account_payment/views/account_portal_templates.xml
+++ b/addons/account_payment/views/account_portal_templates.xml
@@ -8,7 +8,7 @@
                 <t t-set="tx_ids" t-value="invoice.transaction_ids.filtered(lambda tx: tx.state in ('pending', 'authorized', 'done'))"/>
                 <t t-set="pending_manual_txs" t-value="tx_ids.filtered(lambda tx: tx.state == 'pending' and tx.acquirer_id.provider in ('transfer', 'manual'))"/>
                 <a t-if="invoice.state == 'open' and invoice.amount_total and invoice.type == 'out_invoice' and (pending_manual_txs or not tx_ids)"
-                    t-att-href="'/my/invoices/%s#portal_pay' % invoice.id" alt="Pay Now" class="btn btn-xs btn-primary">
+                    t-att-href="'/my/invoices/%s#portal_pay' % invoice.id" title="Pay now" aria-label="Pay now" class="btn btn-xs btn-primary" role="button">
                     <i class="fa fa-arrow-circle-right"/><span class='hidden-xs'> Pay Now</span>
                 </a>
             </td>
@@ -73,15 +73,15 @@
             <div class="mb8 ml16 mr16">
                 <a t-if="invoice.state == 'open' and invoice.amount_total and invoice.type == 'out_invoice' and (pending_manual_txs or not tx_ids)"
                     class="btn btn-primary btn-block" data-toggle="modal" data-target="#pay_with">
-                    <i class="fa fa-arrow-circle-right"/> Pay Now
+                    <span class="fa fa-arrow-circle-right">Pay Now</span>
                 </a>
                 <a t-if="tx_ids and not pending_manual_txs and invoice.state != 'paid'"
                     class="btn btn-warning btn-block" disabled="disabled">
-                    <i class="fa fa-check-circle"/> Pending
+                    <span class="fa fa-check-circle">Pending</span>
                 </a>
                 <a t-if="invoice.state == 'paid'"
                     class="btn btn-success btn-block" disabled="disabled">
-                    <i class="fa fa-check-circle"/> Paid
+                    <span class="fa fa-check-circle">Paid</span>
                 </a>
             </div>
         </xpath>
diff --git a/addons/auth_oauth/views/auth_oauth_templates.xml b/addons/auth_oauth/views/auth_oauth_templates.xml
index 7e483dd842ec96d06b3fece3a8f45b0a19aae666..1ddd715a21c64b322274280f957a030bbea25b5e 100644
--- a/addons/auth_oauth/views/auth_oauth_templates.xml
+++ b/addons/auth_oauth/views/auth_oauth_templates.xml
@@ -2,7 +2,7 @@
 <odoo>
         <template id="auth_oauth.providers" name="OAuth Providers">
             <div t-foreach="providers" t-as="p">
-                <a t-att-href="p['auth_link']" class="btn btn-link">
+                <a t-att-href="p['auth_link']" class="btn btn-link" role="button">
                     <i t-att-class="p['css_class']"/>
                     <t t-esc="p['body']"/>
                 </a>
diff --git a/addons/auth_oauth/views/res_config_settings_views.xml b/addons/auth_oauth/views/res_config_settings_views.xml
index 214f1701895dc3f2b84e6471c60b4a4102d8ba55..990f1028454668871ef70cf214bb9720b185a36e 100644
--- a/addons/auth_oauth/views/res_config_settings_views.xml
+++ b/addons/auth_oauth/views/res_config_settings_views.xml
@@ -27,7 +27,7 @@
                                     <label for="auth_oauth_google_client_id" string="Client ID:" class="col-md-3 o_light_label"/>
                                     <field name="auth_oauth_google_client_id" placeholder="e.g. 1234-xyz.apps.googleusercontent.com"/>
                                 </div>
-                                <a href="https://www.odoo.com/documentation/user/online/general/auth/google.html" target="_blank"><i class="fa fa-fw fa-arrow-right"/>Tutorial</a>
+                                <a class="fa fa-fw fa-arrow-right" href="https://www.odoo.com/documentation/user/online/general/auth/google.html" target="_blank">Tutorial</a>
                             </div>
                         </div>
                     </div>
diff --git a/addons/auth_signup/views/auth_signup_login_templates.xml b/addons/auth_signup/views/auth_signup_login_templates.xml
index 46fee5ea3759bab596f5cacd0d7dc2b0a008acf0..5e8dd29fcbd8683868e433baf379615b0385e4df 100644
--- a/addons/auth_signup/views/auth_signup_login_templates.xml
+++ b/addons/auth_signup/views/auth_signup_login_templates.xml
@@ -2,8 +2,8 @@
 <odoo>
         <template id="auth_signup.login" inherit_id="web.login" name="Sign up - Reset Password">
             <xpath expr="//button[@type='submit']" position="before">
-                <a t-if="signup_enabled" t-attf-href="/web/signup?{{ keep_query() }}" class="btn btn-link pull-right">Don't have an account?</a>
-                <a t-if="reset_password_enabled" t-attf-href="/web/reset_password?{{ keep_query() }}" class="btn btn-link pull-right">Reset Password</a>
+                <a t-if="signup_enabled" t-attf-href="/web/signup?{{ keep_query() }}" class="btn btn-link pull-right" role="button">Don't have an account?</a>
+                <a t-if="reset_password_enabled" t-attf-href="/web/reset_password?{{ keep_query() }}" class="btn btn-link pull-right" role="button">Reset Password</a>
             </xpath>
         </template>
 
@@ -43,13 +43,13 @@
                         <t t-set="only_passwords" t-value="bool(token and not invalid_token)"/>
                     </t>
 
-                    <p class="alert alert-danger" t-if="error">
+                    <p class="alert alert-danger" t-if="error" role="alert">
                         <t t-esc="error"/>
                     </p>
                     <input type="hidden" name="redirect" t-att-value="redirect"/>
                     <input type="hidden" name="token" t-att-value="token"/>
                     <div class="clearfix oe_login_buttons">
-                        <a t-attf-href="/web/login?{{ keep_query() }}" class="btn btn-link pull-right">Already have an account?</a>
+                        <a t-attf-href="/web/login?{{ keep_query() }}" class="btn btn-link pull-right" role="button">Already have an account?</a>
                         <button type="submit" class="btn btn-primary pull-left o_signup_btn"> Sign up</button>
                     </div>
 
@@ -60,10 +60,10 @@
         <template id="auth_signup.reset_password" name="Reset password">
             <t t-call="web.login_layout">
                 <div t-if="message">
-                    <p class="alert alert-success" t-if="message">
+                    <p class="alert alert-success" t-if="message" role="status">
                         <t t-esc="message"/>
                     </p>
-                    <a href="/web/login" class="btn btn-link pull-right">Back to Login</a>
+                    <a href="/web/login" class="btn btn-link pull-right" role="button">Back to Login</a>
                 </div>
 
                 <form class="oe_reset_password_form" role="form" method="post" t-if="not message">
@@ -83,14 +83,14 @@
                         </div>
                     </t>
 
-                    <p class="alert alert-danger" t-if="error">
+                    <p class="alert alert-danger" t-if="error" role="alert">
                         <t t-esc="error"/>
                     </p>
                     <input type="hidden" name="redirect" t-att-value="redirect"/>
                     <input type="hidden" name="token" t-att-value="token"/>
                     <div class="clearfix oe_login_buttons">
-                        <a t-if="not token" t-attf-href="/web/login?{{ keep_query() }}" class="btn btn-link pull-right">Back to Login</a>
-                        <a t-if="invalid_token" href="/web/login" class="btn btn-link pull-right">Back to Login</a>
+                        <a t-if="not token" t-attf-href="/web/login?{{ keep_query() }}" class="btn btn-link pull-right" role="button">Back to Login</a>
+                        <a t-if="invalid_token" href="/web/login" class="btn btn-link pull-right" role="button">Back to Login</a>
                         <button type="submit" class="btn btn-primary pull-left">Confirm</button>
                     </div>
 
diff --git a/addons/auth_signup/views/res_users_views.xml b/addons/auth_signup/views/res_users_views.xml
index 85be323f340015cfba558c2c73e4b9256266c30e..37267bf39cd42bff0ea7ecbab56424b9dc493f6a 100644
--- a/addons/auth_signup/views/res_users_views.xml
+++ b/addons/auth_signup/views/res_users_views.xml
@@ -18,8 +18,8 @@
                 </xpath>
 
                 <xpath expr="//sheet/div[@name='button_box']" position="after">
-                    <div class="alert alert-success text-center o_form_header" attrs="{'invisible': [('signup_valid', '!=', True)]}">
-                        <a class="close" data-dismiss="alert" href="#" aria-hidden="true">x</a>
+                    <div class="alert alert-success text-center o_form_header" attrs="{'invisible': [('signup_valid', '!=', True)]}" role="status">
+                        <a class="close" data-dismiss="alert" href="#" aria-label="Close">x</a>
                         <div attrs="{'invisible': [('state', '!=', 'active')]}">
                             <strong>A password reset has been requested for this user. An email containing the following link has been sent:</strong>
                         </div>
diff --git a/addons/barcodes/static/src/js/barcode_form_view.js b/addons/barcodes/static/src/js/barcode_form_view.js
index 15e27498f943761ec7051778ef77d8d38a8db98a..9a09480558b6141cdffc8133ac115e4882c177be 100644
--- a/addons/barcodes/static/src/js/barcode_form_view.js
+++ b/addons/barcodes/static/src/js/barcode_form_view.js
@@ -349,7 +349,7 @@ FormController.include({
         }
         // only catch the event if we're not focused in
         // another field and it's a number
-        if (!$(event.target).is('body, .modal') || !/[0-9]/.test(character)) {
+        if (!$(event.target).is('body, [role="dialog"]') || !/[0-9]/.test(character)) {
             return;
         }
 
diff --git a/addons/barcodes/static/tests/barcode_tests.js b/addons/barcodes/static/tests/barcode_tests.js
index de88e79b9fc9cf1ad89a6b66233fb253079c3371..3d3ed4c75312692cabfd75b10a7fb180c1cca7f8 100644
--- a/addons/barcodes/static/tests/barcode_tests.js
+++ b/addons/barcodes/static/tests/barcode_tests.js
@@ -468,12 +468,12 @@ QUnit.test('specification of widget barcode_handler with keypress and notifyChan
     setTimeout(function () {
         var keycode = $.ui.keyCode.ENTER;
 
-        assert.strictEqual($('.modal .modal-body').length, 1, 'should open a modal with a quantity as input');
-        assert.strictEqual($('.modal .modal-body .o_set_qty_input').val(), '5', 'the quantity by default in the modal shoud be 5');
+        assert.strictEqual($('main.modal-body').length, 1, 'should open a modal with a quantity as input');
+        assert.strictEqual($('main.modal-body .o_set_qty_input').val(), '5', 'the quantity by default in the modal shoud be 5');
 
-        $('.modal .modal-body .o_set_qty_input').val('7');
+        $('main.modal-body .o_set_qty_input').val('7');
 
-        $('.modal .modal-body .o_set_qty_input').trigger($.Event('keypress', {which: keycode, keyCode: keycode}));
+        $('main.modal-body .o_set_qty_input').trigger($.Event('keypress', {which: keycode, keyCode: keycode}));
         assert.strictEqual(form.$('.o_data_row .o_data_cell:nth(1)').text(), '7',
         "quantity checked should be 7");
 
@@ -533,7 +533,7 @@ QUnit.test('barcode_scanned only trigger error for active view', function (asser
         } else {
             keycode = char.charCodeAt(0);
         }
-        return $('.modal').trigger($.Event('keypress', {which: keycode, keyCode: keycode}));
+        return $('[role="dialog"]').trigger($.Event('keypress', {which: keycode, keyCode: keycode}));
     }
     _.each(['O','-','B','T','N','.','c','a','n','c','e','l','Enter'], modalTriggerKeypressEvent);
     assert.verifySteps(['warning'], "only one event should be triggered");
diff --git a/addons/base_gengo/views/ir_translation_views.xml b/addons/base_gengo/views/ir_translation_views.xml
index df433ea0277b4658f7b5575bdda78b3b7ff7eecd..7ec252965e023db3937f920bc3b52c406a46d2f7 100644
--- a/addons/base_gengo/views/ir_translation_views.xml
+++ b/addons/base_gengo/views/ir_translation_views.xml
@@ -20,7 +20,7 @@
                  <xpath expr="//form/sheet" position="inside">
                     <group string="Gengo Translation Service" col="4" colspan="4">
                         <field name="gengo_translation" />
-                        <label string="Note: If the translation state is 'In Progress', it means that the translation has to be approved to be uploaded in this system. You are supposed to do that directly by using your Gengo Account"/>
+                        <span class="o_form_label">Note: If the translation state is 'In Progress', it means that the translation has to be approved to be uploaded in this system. You are supposed to do that directly by using your Gengo Account</span>
                         <field name="gengo_comment" nolabel="1" placeholder="Gengo Comments &amp; Activity..." colspan="4"/>
                     </group>
                 </xpath>
diff --git a/addons/base_gengo/wizard/base_gengo_translations_view.xml b/addons/base_gengo/wizard/base_gengo_translations_view.xml
index 756b48e8aeab45d64c1f72859b61c9df096937c1..1d5ef223f1d257124f48f243f7ee3431aff863f0 100644
--- a/addons/base_gengo/wizard/base_gengo_translations_view.xml
+++ b/addons/base_gengo/wizard/base_gengo_translations_view.xml
@@ -5,8 +5,8 @@
             <field name="model">base.gengo.translations</field>
             <field name="arch" type="xml">
                 <form string="Gengo Request Form">
-                    <div class="alert alert-warning text-center" attrs="{'invisible': [('authorized_credentials', '=', True)]}">
-                        <label string="Gengo Public or Private keys are wrong or missing."/>
+                    <div class="alert alert-warning text-center" attrs="{'invisible': [('authorized_credentials', '=', True)]}" role="alert">
+                        <span class="o_form_label">Gengo Public or Private keys are wrong or missing.</span>
                         <button type="object" name="open_company" string="Click here to Configure Gengo Parameters" icon="fa-cogs" class="oe_inline oe_link"/>
                         <field name="authorized_credentials" invisible="1"/>
                     </div>
diff --git a/addons/base_import/static/src/xml/base_import.xml b/addons/base_import/static/src/xml/base_import.xml
index bd685932788d5a66a76a36d79d783c5e65e47336..fcd5b239cb68abde54c5ff414408335b10e55699 100644
--- a/addons/base_import/static/src/xml/base_import.xml
+++ b/addons/base_import/static/src/xml/base_import.xml
@@ -14,11 +14,11 @@
                     <div class="input-group">
                       <input type="text" class="oe_import_file_show form-control" placeholder="No file chosen..."/>
                       <span class="input-group-btn">
-                        <label class="btn btn-primary" for="my-file-selector">
+                        <button class="btn btn-primary">
                         <input accept=".csv, .xls, .xlsx, .xlsm, .ods" id-attf-id="file_#{_id}"
                        name="file" id="my-file-selector" class="oe_import_file" type="file" style="display:none;"/>
                         Load File
-                        </label>
+                        </button>
                       </span>
                       <span class="input-group-btn">
                         <button type="button" class="btn btn-default oe_import_file_reload" disabled="disabled">Reload File</button>
@@ -26,7 +26,7 @@
                     </div>
                     <div class="template-import mt24 hidden">
                         <h5>
-                            <a href="#" class="import-link fa fa-download"></a>
+                            <a href="#" class="import-link fa fa-download" aria-label="Download" title="Download"></a>
                         </h5>
                     </div>
                 </div>
diff --git a/addons/base_import_module/tests/test_module/test.xml b/addons/base_import_module/tests/test_module/test.xml
index 9722d9478d1db7ebcfdfbc548812b104a4978d42..46ffc861347fabc5d270bb11ae59c3efee3fbb5e 100644
--- a/addons/base_import_module/tests/test_module/test.xml
+++ b/addons/base_import_module/tests/test_module/test.xml
@@ -18,7 +18,7 @@
             </h1>
             <p>
                 And this static image too !
-                <img src="/test_module/static/src/img/c64.png"/>
+                <img src="/test_module/static/src/img/c64.png" alt='Logo'/>
             </p>
         </t>
     </template>
diff --git a/addons/base_import_module/views/base_import_module_view.xml b/addons/base_import_module/views/base_import_module_view.xml
index 60af0d3fc6119a4ba079a2e51c4bf6acd89bf682..7c46391f1167cdd4485d87f0f8aba52b25418989 100644
--- a/addons/base_import_module/views/base_import_module_view.xml
+++ b/addons/base_import_module/views/base_import_module_view.xml
@@ -9,7 +9,7 @@
                     <field name="state" invisible="1"/>
                     <separator string="Import Module" colspan="4"/>
                     <group states="init" col="4">
-                        <label string="Select module package to import (.zip file):" colspan="4"/>
+                        <label for="module_file" string="Select module package to import (.zip file):" colspan="4"/>
                         <field name="module_file" colspan="4"/>
 
                         <field name="force"/>
diff --git a/addons/base_setup/views/res_config_settings_views.xml b/addons/base_setup/views/res_config_settings_views.xml
index 99d43c9c18eaf52960b7591f1903c1c02643cb33..82bfe8b4dca859726d66076d68fd438a916c7f33 100644
--- a/addons/base_setup/views/res_config_settings_views.xml
+++ b/addons/base_setup/views/res_config_settings_views.xml
@@ -13,8 +13,8 @@
                             <div class="row mt16 o_settings_container">
                                 <div class="col-xs-12 col-md-6 o_setting_box">
                                     <div class="o_setting_right_pane">
-                                        <label string="Format"/>
-                                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                        <span class="o_form_label">Format</span>
+                                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                         <div class="text-muted">
                                             Set the paper format of printed documents
                                         </div>
@@ -28,8 +28,8 @@
                                 </div>
                                 <div class="col-xs-12 col-md-6 o_setting_box">
                                     <div class="o_setting_right_pane">
-                                        <label string="Document Template"/>
-                                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                        <span class="o_form_label">Document Template</span>
+                                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                         <div class="text-muted">
                                             Choose your document's header and footer layout
                                         </div>
@@ -120,8 +120,7 @@
                                     </div>
                                     <div class="o_setting_right_pane">
                                         <label string="Inter Company Flows" for="module_inter_company_rules"/>
-                                        <span class="fa fa-lg fa-building-o"/>
-                                        <div class="text-muted">
+                                        <div class="fa fa-lg fa-building-o text-muted">
                                             the creation of documents between your companies
                                         </div>
                                         <div class="content-group" attrs="{'invisible': [('module_inter_company_rules','=',False)]}" id="inter_companies_rules">
diff --git a/addons/base_vat/views/res_config_settings_views.xml b/addons/base_vat/views/res_config_settings_views.xml
index e82be83c5a4d05037929276ddae3c8b245d9a29b..5943ee56af219fcb0b010b0770d301d811611f51 100644
--- a/addons/base_vat/views/res_config_settings_views.xml
+++ b/addons/base_vat/views/res_config_settings_views.xml
@@ -13,7 +13,7 @@
                     </div>
                     <div class="o_setting_right_pane">
                         <label for="vat_check_vies"/>
-                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                         <div class="text-muted">
                            Verify VAT numbers using the European VIES service
                         </div>
diff --git a/addons/board/static/src/xml/board.xml b/addons/board/static/src/xml/board.xml
index 0e55c5dd77fb5aac87ad1b7f5b49b38e1b131523..d06d0872c8acbbd9312179cea5dfe6b736ceaa84 100644
--- a/addons/board/static/src/xml/board.xml
+++ b/addons/board/static/src/xml/board.xml
@@ -3,7 +3,7 @@
 <t t-name="DashBoard">
     <div class="oe_dashboard_links">
         <button type="button" class="button oe_dashboard_link_change_layout" title="Change Layout..">
-            <img src="/board/static/src/img/layout_1-1-1.png" width="16" height="16"/>
+            <img src="/board/static/src/img/layout_1-1-1.png" width="16" height="16" alt=""/>
             <span> Change Layout </span>
         </button>
     </div>
@@ -37,8 +37,8 @@
         </p>
         <ul>
             <li t-foreach="'1 1-1 1-1-1 1-2 2-1'.split(' ')" t-as="layout" t-att-data-layout="layout">
-                <img t-attf-src="/board/static/src/img/layout_#{layout}.png"/>
-                <i t-if="layout == currentLayout" class="oe_dashboard_selected_layout fa fa-check fa-lg text-success"/>
+                <img t-attf-src="/board/static/src/img/layout_#{layout}.png" alt=""/>
+                <i t-if="layout == currentLayout" class="oe_dashboard_selected_layout fa fa-check fa-lg text-success" aria-label='Layout' role="img" title="Layout"/>
             </li>
         </ul>
     </div>
diff --git a/addons/board/static/tests/dashboard_tests.js b/addons/board/static/tests/dashboard_tests.js
index 9afb88e56484a0d9fab1a3e5554a6e1ba748fe19..15b08aaf544e8c6ba7b89957073636d939ca4659 100644
--- a/addons/board/static/tests/dashboard_tests.js
+++ b/addons/board/static/tests/dashboard_tests.js
@@ -161,17 +161,17 @@ QUnit.test('basic functionality, with one sub action', function (assert) {
     assert.ok(form.$('.oe_content').is(':visible'), "content is visible again");
     assert.verifySteps(['load action', 'edit custom', 'edit custom']);
 
-    assert.strictEqual($('.modal').length, 0, "should have no modal open");
+    assert.strictEqual($('[role="dialog"]').length, 0, "should have no modal open");
 
     form.$('button.oe_dashboard_link_change_layout').click();
 
-    assert.strictEqual($('.modal').length, 1, "should have opened a modal");
-    assert.strictEqual($('.modal li[data-layout="2-1"] i.oe_dashboard_selected_layout').length, 1,
+    assert.strictEqual($('[role="dialog"]').length, 1, "should have opened a modal");
+    assert.strictEqual($('[role="dialog"] li[data-layout="2-1"] i.oe_dashboard_selected_layout').length, 1,
         "should mark currently selected layout");
 
-    $('.modal .oe_dashboard_layout_selector li[data-layout="1-1"]').click();
+    $('[role="dialog"] .oe_dashboard_layout_selector li[data-layout="1-1"]').click();
 
-    assert.strictEqual($('.modal').length, 0, "should have no modal open");
+    assert.strictEqual($('[role="dialog"]').length, 0, "should have no modal open");
     assert.strictEqual(form.$('table.oe_dashboard[data-layout="1-1"]').length, 1,
         "should have rendered a table with correct layout");
 
@@ -179,12 +179,12 @@ QUnit.test('basic functionality, with one sub action', function (assert) {
     assert.strictEqual(form.$('.oe_action').length, 1, "should have one displayed action");
     form.$('span.oe_close').click();
 
-    assert.strictEqual($('.modal').length, 1, "should have opened a modal");
+    assert.strictEqual($('[role="dialog"]').length, 1, "should have opened a modal");
 
     // confirm the close operation
-    $('.modal button.btn-primary').click();
+    $('[role="dialog"] button.btn-primary').click();
 
-    assert.strictEqual($('.modal').length, 0, "should have no modal open");
+    assert.strictEqual($('[role="dialog"]').length, 0, "should have no modal open");
     assert.strictEqual(form.$('.oe_action').length, 0, "should have no displayed action");
 
     assert.verifySteps(['load action', 'edit custom', 'edit custom', 'edit custom', 'edit custom']);
diff --git a/addons/calendar/static/tests/calendar_tests.js b/addons/calendar/static/tests/calendar_tests.js
index bf2326ce8489fa3af382d5e89f83e58e67309f86..64678104592cac0df569d32b1b1f7f84438db76f 100644
--- a/addons/calendar/static/tests/calendar_tests.js
+++ b/addons/calendar/static/tests/calendar_tests.js
@@ -63,15 +63,15 @@ QUnit.module('calendar', {
         });
 
         assert.ok(form.$('.o_field_widget[name="partner_ids"]').hasClass('o_field_many2manytags'));
-        assert.strictEqual(form.$('.o_field_widget[name="partner_ids"] > span').length, 2,
+        assert.strictEqual(form.$('.o_field_widget[name="partner_ids"] > button').length, 2,
             "there should be 2 tags");
-        assert.strictEqual(form.$('.o_field_widget[name="partner_ids"] > span:first').text().trim(), "Jesus",
+        assert.strictEqual(form.$('.o_field_widget[name="partner_ids"] > button:first').text().trim(), "Jesus",
             "the tag should be correctly named");
-        assert.ok(form.$('.o_field_widget[name="partner_ids"] > span:first .o_calendar_invitation').hasClass('accepted'),
+        assert.ok(form.$('.o_field_widget[name="partner_ids"] > button:first .o_calendar_invitation').hasClass('accepted'),
             "Jesus should attend the meeting");
-        assert.strictEqual(form.$('.o_field_widget[name="partner_ids"] > span[data-id="2"]').text().trim(), "Mahomet",
+        assert.strictEqual(form.$('.o_field_widget[name="partner_ids"] > button[data-id="2"]').text().trim(), "Mahomet",
             "the tag should be correctly named");
-        assert.ok(form.$('.o_field_widget[name="partner_ids"] > span[data-id="2"] .o_calendar_invitation').hasClass('needsAction'),
+        assert.ok(form.$('.o_field_widget[name="partner_ids"] > button[data-id="2"] .o_calendar_invitation').hasClass('needsAction'),
             "Mohamet should still confirm his attendance to the meeting");
 
         form.destroy();
diff --git a/addons/calendar/views/calendar_templates.xml b/addons/calendar/views/calendar_templates.xml
index 2c9660de77e50992176eeed336cd9f66f200a14c..dac0a52bad0524cb261a3b517381a7a1d8174960 100644
--- a/addons/calendar/views/calendar_templates.xml
+++ b/addons/calendar/views/calendar_templates.xml
@@ -26,7 +26,7 @@
 
             <div class="container">
                 <div class="o_logo">
-                    <img class="img img-responsive center-block" src="/web/binary/company_logo"/>
+                    <img class="img img-responsive center-block" src="/web/binary/company_logo" alt="Logo"/>
                 </div>
 
                 <div class="panel panel-default">
diff --git a/addons/calendar/views/calendar_views.xml b/addons/calendar/views/calendar_views.xml
index 80994d946fac879c0d475a7bef2517f941569e77..26baf283093463f55b1398ba86246b07526a6511 100644
--- a/addons/calendar/views/calendar_views.xml
+++ b/addons/calendar/views/calendar_views.xml
@@ -112,7 +112,7 @@
                     <notebook>
                         <page name="page_details" string="Meeting Details">
                             <group attrs="{'invisible': [('recurrency','==',False)]}" class="oe_edit_only ">
-                                <p class='alert alert-warning'> This event is linked to a recurrence...<br/>
+                                <p class='alert alert-warning' role="status"> This event is linked to a recurrence...<br/>
                                     <button type="object" name="action_detach_recurring_event"  string="Update only this instance"  help="Click here to update only this instance and not all recurrences. " class="oe_link"/>
                                 </p>
                             </group>
diff --git a/addons/crm/data/mail_template_data.xml b/addons/crm/data/mail_template_data.xml
index d768b0fb275bfe985e0b40aee6794596339c38d8..a74cf121ae5eb05eda4af8a4d9ffbb6c4e6ed0dd 100644
--- a/addons/crm/data/mail_template_data.xml
+++ b/addons/crm/data/mail_template_data.xml
@@ -19,7 +19,7 @@
                 <tbody>
                     <tr>
                         <td style="padding:2px;width:30%;">
-                            <img src="web/static/src/img/logo.png"/>
+                            <img src="web/static/src/img/logo.png" alt="Logo"/>
                         </td>
                         <td style="vertical-align: top; padding: 8px 10px;text-align: left;font-size: 14px;">
                             <a href="web/login" style="float:right ;margin:15px auto;background: #875A7B;border-radius: 5px;color: #ffffff;font-size: 16px;padding: 10px 20px 10px 20px;text-decoration: none;">Auto Login</a>
diff --git a/addons/crm/static/src/js/tour.js b/addons/crm/static/src/js/tour.js
index 5543a081500cc30768df1fa27eb9fe6d635ae0c0..daf550378f549c197e49d52106b26787a78e27f0 100644
--- a/addons/crm/static/src/js/tour.js
+++ b/addons/crm/static/src/js/tour.js
@@ -41,12 +41,12 @@ tour.register('crm_tour', {
     content: _t("Let's schedule an activity."),
     position: "bottom"
 }, {
-    trigger: ".modal-body .o_field_many2one",
+    trigger: 'main.modal-body .o_field_many2one',
     extra_trigger: ".o_opportunity_kanban",
     content: _t("<p>You will be able to customize your followup activities. Examples:</p><ol><li>introductory email</li><li>call 10 days after</li><li>second call 3 days after, ...</li></ol><p class='mb0'><i>Select a standard activity for now.</i></p>"),
     position: "bottom",
     run: function (actions) {
-        actions.auto(".modal-footer button[special=cancel]");
+        actions.auto('footer.modal-footer button[special=cancel]');
     },
 }, {
     trigger: ".o_kanban_record",
diff --git a/addons/crm/views/crm_lead_views.xml b/addons/crm/views/crm_lead_views.xml
index 994a577239b6bfb9fa90cdfefc09e01881607263..8b38ee39cf6fe62bb357e266f8e2d847f10be94d 100644
--- a/addons/crm/views/crm_lead_views.xml
+++ b/addons/crm/views/crm_lead_views.xml
@@ -189,14 +189,14 @@
                                     <div class="oe_kanban_bottom_left">
                                         <field name="priority" widget="priority"/>
                                         <t t-if="record.message_needaction_counter.raw_value">
-                                            <span class="oe_kanban_mail_new" title="Unread Messages"><i class="fa fa-comments"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
+                                            <span role="alert" class="oe_kanban_mail_new" title="Unread Messages"><i class="fa fa-comments" aria-label="Messages" role="img"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
                                         </t>
                                         <div class="o_kanban_inline_block">
                                             <field name="activity_ids" widget="kanban_activity"/>
                                         </div>
                                     </div>
                                     <div class="oe_kanban_bottom_right">
-                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                                     </div>
                                 </div>
                             </div>
@@ -324,15 +324,15 @@
                             <div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click">
                                 <div class="o_dropdown_kanban dropdown">
 
-                                    <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                    <a class="dropdown-toggle btn" role="button" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                         <span class="fa fa-ellipsis-v"/>
                                     </a>
-                                    <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                        <t t-if="widget.editable"><li><a type="edit">Edit</a></li></t>
-                                        <t t-if="widget.deletable"><li><a type="delete">Delete</a></li></t>
-                                        <li t-if="! record.active.value"><a name="action_set_active" type="object">Restore</a></li>
-                                        <li t-if="record.active.value"><a name="action_set_unactive" type="object">Archive</a></li>
-                                        <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                    <ul class="dropdown-menu" role="menu">
+                                        <t t-if="widget.editable"><li><a role="menuitem" type="edit">Edit</a></li></t>
+                                        <t t-if="widget.deletable"><li><a role="menuitem" type="delete">Delete</a></li></t>
+                                        <li t-if="! record.active.value"><a role="menuitem" name="action_set_active" type="object">Restore</a></li>
+                                        <li t-if="record.active.value"><a role="menuitem" name="action_set_unactive" type="object">Archive</a></li>
+                                        <li role="menuitem" aria-haspopup="true"><ul class="oe_kanban_colorpicker" data-field="color" role="menu"/></li>
                                     </ul>
                                 </div>
                                 <div class="oe_kanban_content">
@@ -350,12 +350,12 @@
                                         <div class="oe_kanban_bottom_left">
                                             <field name="priority" widget="priority" groups="base.group_user"/>
                                             <t t-if="record.message_needaction_counter.raw_value">
-                                                <span class='oe_kanban_mail_new' title='Unread Messages'><i class='fa fa-comments'/><t t-raw="record.message_needaction_counter.raw_value"/></span>
+                                                <span role="alert" class='oe_kanban_mail_new' title='Unread Messages'><i class='fa fa-comments' aria-label="Unread messages" role="img"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
                                             </t>
                                             <field name="activity_ids" widget="kanban_activity"/>
                                         </div>
                                         <div class="oe_kanban_bottom_right">
-                                            <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
+                                            <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
                                         </div>
                                     </div>
                                 </div>
diff --git a/addons/crm/views/crm_team_views.xml b/addons/crm/views/crm_team_views.xml
index 8b421716c98e8b04d01fdfa27fe7f779d9b8d893..c9c7fa8bbd8fb7a9dfbba089d27797e73cb8318f 100644
--- a/addons/crm/views/crm_team_views.xml
+++ b/addons/crm/views/crm_team_views.xml
@@ -188,7 +188,7 @@
 
                     <xpath expr="//div[hasclass('o_primary')]" position="after">
                         <div t-if="record.use_leads.raw_value and record.alias_name.value and record.alias_domain.value">
-                            <small t-translation="off"><i class="fa fa-envelope-o"></i>&amp;nbsp; <field name="alias_id"/></small>
+                            <small t-translation="off"><i class="fa fa-envelope-o" aria-label="Leads" title="Leads" role="img"></i>&amp;nbsp; <field name="alias_id"/></small>
                         </div>
                     </xpath>
 
diff --git a/addons/crm/views/res_config_settings_views.xml b/addons/crm/views/res_config_settings_views.xml
index 4b421d928f1418847977ea4805c4c1ac7a712431..aa17161697b600eb60d999054208e96bb01ad72c 100644
--- a/addons/crm/views/res_config_settings_views.xml
+++ b/addons/crm/views/res_config_settings_views.xml
@@ -31,17 +31,17 @@
                                 <field name="generate_lead_from_alias"/>
                             </div>
                             <div class="o_setting_right_pane">
-                                <label string="Manual Assignation of Incoming Emails"/>
+                                <label for="generate_lead_from_alias" string="Manual Assignation of Incoming Emails"/>
                                 <div class="text-muted">
                                     Generate leads from incoming emails and assign them
                                     to a sales channel manually
                                 </div>
                                 <div class="content-group" attrs="{'invisible': [('generate_lead_from_alias','=',False)]}">
                                     <div class="mt16">
-                                        <label string="Alias" class="o_light_label"/>
+                                        <label for="crm_alias_prefix" string="Alias" class="o_light_label"/>
                                         <field name="crm_alias_prefix" class="oe_inline"
                                             attrs="{'required': [('generate_lead_from_alias', '=', True)]}"/>
-                                        <span>@</span>
+                                        <label for="alias_domain" string="@"/>
                                         <field name="alias_domain" readonly="1" class="oe_inline"/>
                                     </div>
                                     <div attrs="{'invisible': [('alias_domain', 'not in', ['localhost', '', False])]}">
diff --git a/addons/crm/views/res_partner_views.xml b/addons/crm/views/res_partner_views.xml
index 611e1c2ab440b8b9365ae0fbb1c3e7814916a3c8..d92ec1a663482c5d03eb064c3f0814ee2801f5f6 100644
--- a/addons/crm/views/res_partner_views.xml
+++ b/addons/crm/views/res_partner_views.xml
@@ -70,8 +70,8 @@
                     <field name="meeting_count"/>
                 </field>
                 <xpath expr="//div[hasclass('oe_kanban_partner_links')]" position="inside">
-                    <span class="badge" t-if="record.opportunity_count.value>0"><i class="fa fa-fw fa-star"/><t t-esc="record.opportunity_count.value"/></span>
-                    <span class="badge" t-if="record.meeting_count.value>0"><i class="fa fa-fw fa-calendar"/><t t-esc="record.meeting_count.value"/></span>
+                    <span class="badge" t-if="record.opportunity_count.value>0"><i class="fa fa-fw fa-star" aria-label="Favorites" role="img" title="Favorites"/><t t-esc="record.opportunity_count.value"/></span>
+                    <span class="badge" t-if="record.meeting_count.value>0"><i class="fa fa-fw fa-calendar" aria-label="Meetings" role="img" title="Meetings"/><t t-esc="record.meeting_count.value"/></span>
                 </xpath>
             </field>
         </record>
diff --git a/addons/delivery/views/delivery_view.xml b/addons/delivery/views/delivery_view.xml
index 4266265da67d1842fb80767dafb84265d90c4713..2aff39e5ebf752f083cd0bb1f27f80956cbc9c09 100644
--- a/addons/delivery/views/delivery_view.xml
+++ b/addons/delivery/views/delivery_view.xml
@@ -275,7 +275,7 @@
                       <label for="carrier_id"/>
                       <div name='carrier_selection'>
                           <div>
-                            <field name="carrier_id" domain="[('id', 'in', available_carrier_ids)]" context="{'order_id': id}" class="oe_inline" options="{'no_create': True, 'no_open': True}" attrs="{'readonly':[('state','not in',('draft','sent'))]}"/> <i class="fa fa-check text-success" aria-hidden="true" attrs="{'invisible':['|','|',('carrier_id','=',False),('state','not in',('draft','sent')),('delivery_rating_success','=',False)]}"></i>
+                            <field name="carrier_id" domain="[('id', 'in', available_carrier_ids)]" context="{'order_id': id}" class="oe_inline" options="{'no_create': True, 'no_open': True}" attrs="{'readonly':[('state','not in',('draft','sent'))]}"/> <i class="fa fa-check text-success" role="img" aria-label="Rating OK" title="Rating OK" attrs="{'invisible':['|','|',('carrier_id','=',False),('state','not in',('draft','sent')),('delivery_rating_success','=',False)]}"></i>
                           </div>
                           <div>
                             <field name='delivery_price' widget='monetary' class="oe_inline" options="{'currency_field': 'currency_id'}" nolabel="1" attrs="{'invisible': [('carrier_id','=', False)]}" force_save="1"/>
@@ -283,7 +283,7 @@
                             <button name="set_delivery_line" string="Set price" type="object" class="oe_inline fa fa-arrow-right oe_link" attrs="{'invisible':['|','|',('carrier_id','=',False),('state','not in',('draft','sent')),('delivery_rating_success','=',False)]}"/>
                             <field name='delivery_rating_success' invisible="1" force_save="1"/>
                           </div>
-                          <div class="alert alert-info" role="alert" attrs="{'invisible': ['|',('carrier_id','=', False),('delivery_message','=',False)]}">
+                          <div class="alert alert-info" role="status" attrs="{'invisible': ['|',('carrier_id','=', False),('delivery_message','=',False)]}">
                             <field name='delivery_message' force_save="1"/>
                           </div>
                       </div>
@@ -301,7 +301,7 @@
             <field name="arch" type="xml">
                 <form string="Trackers URL">
                     <group>
-                        <div class="alert alert-info">
+                        <div class="alert alert-info" role="status">
                             <p>You have multiple URL, they should be available in the chatter.</p>
                         </div>
                     </group>
diff --git a/addons/document/static/tests/document_tests.js b/addons/document/static/tests/document_tests.js
index 338f3e7558185b98d147aab245ca07e7f1bb4a8a..111beeca841727e5b5ec4374cc4b3dbfcef98fa5 100644
--- a/addons/document/static/tests/document_tests.js
+++ b/addons/document/static/tests/document_tests.js
@@ -70,7 +70,7 @@ odoo.define('document.tests', function (require) {
 
             assert.strictEqual(form.sidebar.$('.o_sidebar_delete_attachment').length, 2, "there should be two attachments");
             form.sidebar.$('.o_sidebar_delete_attachment:eq(0)').click();
-            $('.modal-footer .btn-primary').click();
+            $('footer.modal-footer .btn-primary').click();
             assert.strictEqual(form.sidebar.$('.o_sidebar_delete_attachment').length, 1, "there should be only one attachment");
             form.destroy();
         });
diff --git a/addons/event/data/email_template_data.xml b/addons/event/data/email_template_data.xml
index d110d05f765410b0d3b38d169837c85bf2263d22..771e840d63a315400b6c61bc678d0a16c0a8e779 100644
--- a/addons/event/data/email_template_data.xml
+++ b/addons/event/data/email_template_data.xml
@@ -104,7 +104,7 @@
                     <table style="width:100%;">
                         <tr>
                             <td style="vertical-align:top;">
-                                <img src="/web_editor/font_to_img/61555/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34"/>
+                                <img src="/web_editor/font_to_img/61555/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34" alt=""/>
                             </td>
                             <td style="padding: 0px 10px 0px 10px;width:50%;line-height:20px;vertical-align:top;">
                                 <div><strong>From</strong> ${object.event_id.date_begin_located}</div>
@@ -113,7 +113,7 @@
                             </td>
                             % if object.event_id.address_id.country_id.name:
                                 <td style="vertical-align:top;">
-                                    <img src="/web_editor/font_to_img/61505/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34"/>
+                                    <img src="/web_editor/font_to_img/61505/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34" alt=""/>
                                 </td>
                                 <td style="padding: 0px 10px 0px 10px;width:50%;vertical-align:top;">
                                     % set location = ''
@@ -176,10 +176,10 @@
                         <tr>
                             <td style="padding:25px 0px;">
                                 <strong>Add this event to your calendar</strong>
-                                <a href="https://www.google.com/calendar/render?action=TEMPLATE&amp;text=${object.event_id.name}&amp;dates=${date_begin}/${date_end}&amp;location=${location}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16"/> Google</a>
-                                <a href="https://bay02.calendar.live.com/calendar/calendar.aspx?rru=addevent&amp;summary=${object.event_id.name}&amp;dtstart=${date_begin}&amp;dtend=${date_end}&amp;location=${location}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16"/> Outlook</a>
+                                <a href="https://www.google.com/calendar/render?action=TEMPLATE&amp;text=${object.event_id.name}&amp;dates=${date_begin}/${date_end}&amp;location=${location}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16" alt=""/> Google</a>
+                                <a href="https://bay02.calendar.live.com/calendar/calendar.aspx?rru=addevent&amp;summary=${object.event_id.name}&amp;dtstart=${date_begin}&amp;dtend=${date_end}&amp;location=${location}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16" alt=""/> Outlook</a>
                                 <a href="https://calendar.yahoo.com/?v=60&amp;view=d&amp;type=20&amp;title=${object.event_id.name}&amp;in_loc=${location}&amp;st=${format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%S')}&amp;et=${format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%S')}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new">
-                                    <img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16"/> Yahoo</a>
+                                    <img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16" alt=""/> Yahoo</a>
                             </td>
                         </tr>
                     </table>
@@ -192,7 +192,7 @@
                     <table style="width:100%;"><tr><td>
                         <div>
                             <a href="https://maps.google.com/maps?q=${location}" target="new">
-                                <img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&amp;size=598x200&amp;maptype=roadmap&amp;format=png&amp;visual_refresh=true&amp;markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom; width: 100%;"/>
+                                <img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&amp;size=598x200&amp;maptype=roadmap&amp;format=png&amp;visual_refresh=true&amp;markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom; width: 100%;" alt="Google Maps"/>
                             </a>
                         </div>
                     </td></tr></table>
@@ -299,7 +299,7 @@
                     <table style="width:100%;">
                         <tr>
                             <td style="vertical-align:top;">
-                                <img src="/web_editor/font_to_img/61555/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34"/>
+                                <img src="/web_editor/font_to_img/61555/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34" alt=""/>
                             </td>
                             <td style="padding: 0px 10px 0px 10px;width:50%;line-height:20px;vertical-align:top;">
                                 <div><strong>From</strong> ${object.event_id.date_begin_located}</div>
@@ -308,7 +308,7 @@
                             </td>
                             % if object.event_id.address_id.country_id.name:
                                 <td style="vertical-align:top;">
-                                    <img src="/web_editor/font_to_img/61505/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34"/>
+                                    <img src="/web_editor/font_to_img/61505/rgb(81,81,102)/34" style="padding:4px;max-width:inherit;" height="34" alt=""/>
                                 </td>
                                 <td style="padding: 0px 10px 0px 10px;width:50%;vertical-align:top;">
                                     % set location = ''
@@ -371,10 +371,10 @@
                         <tr>
                             <td style="padding:25px 0px;">
                                 <strong>Add this event to your calendar</strong>
-                                <a href="https://www.google.com/calendar/render?action=TEMPLATE&amp;text=${object.event_id.name}&amp;dates=${date_begin}/${date_end}&amp;location=${location}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16"/> Google</a>
-                                <a href="https://bay02.calendar.live.com/calendar/calendar.aspx?rru=addevent&amp;summary=${object.event_id.name}&amp;dtstart=${date_begin}&amp;dtend=${date_end}&amp;location=${location}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16"/> Outlook</a>
+                                <a href="https://www.google.com/calendar/render?action=TEMPLATE&amp;text=${object.event_id.name}&amp;dates=${date_begin}/${date_end}&amp;location=${location}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16" alt=""/> Google</a>
+                                <a href="https://bay02.calendar.live.com/calendar/calendar.aspx?rru=addevent&amp;summary=${object.event_id.name}&amp;dtstart=${date_begin}&amp;dtend=${date_end}&amp;location=${location}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new"><img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16" alt=""/> Outlook</a>
                                 <a href="https://calendar.yahoo.com/?v=60&amp;view=d&amp;type=20&amp;title=${object.event_id.name}&amp;in_loc=${location}&amp;st=${format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%S')}&amp;et=${format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%S')}" style="padding:3px 5px;border:1px solid #875A7B;color:#875A7B;text-decoration:none;border-radius:3px;" target="new">
-                                    <img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16"/> Yahoo</a>
+                                    <img src="/web_editor/font_to_img/61525/rgb(135,90,123)/16" style="vertical-align:middle;" height="16" alt=""/> Yahoo</a>
                             </td>
                         </tr>
                     </table>
@@ -387,7 +387,7 @@
                     <table style="width:100%;"><tr><td>
                         <div>
                             <a href="https://maps.google.com/maps?q=${location}" target="new">
-                                <img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&amp;size=598x200&amp;maptype=roadmap&amp;format=png&amp;visual_refresh=true&amp;markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom; width: 100%;"/>
+                                <img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&amp;size=598x200&amp;maptype=roadmap&amp;format=png&amp;visual_refresh=true&amp;markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom; width: 100%;" alt="Google Maps"/>
                             </a>
                         </div>
                     </td></tr></table>
diff --git a/addons/event/report/event_event_templates.xml b/addons/event/report/event_event_templates.xml
index 8490dc4aaca6b6c9f6c5902e7709d45d43c1050d..6c3b2e70eff5874251c61608e9a3247627c8304b 100644
--- a/addons/event/report/event_event_templates.xml
+++ b/addons/event/report/event_event_templates.xml
@@ -15,10 +15,10 @@
                                         <div t-field="o.event_id.event_logo"/>
                                     </t>
                                     <span t-if="not o.event_id.event_logo and o.event_id.organizer_id.company_id.logo_web and o.event_id.organizer_id.is_company">
-                                        <img t-att-src="'data:image/png;base64,%s' % to_text(o.event_id.organizer_id.company_id.logo_web)" style="max-height:1cm; max-width:4cm;"/>
+                                        <img t-att-src="'data:image/png;base64,%s' % to_text(o.event_id.organizer_id.company_id.logo_web)" style="max-height:1cm; max-width:4cm;" alt="Logo"/>
                                     </span>
                                     <h5 t-field="o.event_id.name"/>
-                                    <h5>( <i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="o.event_id.with_context(tz=o.event_id.date_tz).date_begin" t-options='{"hide_seconds": True}'> </span> <i>to</i> <span itemprop="endDate" t-field="o.event_id.with_context(tz=o.event_id.date_tz).date_end" t-options='{"hide_seconds": True}'> </span> )</h5>
+                                    <h5>( <i class="fa fa-clock-o" aria-label="Period" role="img" title="Period"></i> <span itemprop="startDate" t-field="o.event_id.with_context(tz=o.event_id.date_tz).date_begin" t-options='{"hide_seconds": True}'> </span> <i>to</i> <span itemprop="endDate" t-field="o.event_id.with_context(tz=o.event_id.date_tz).date_end" t-options='{"hide_seconds": True}'> </span> )</h5>
                                 </div>
                                 <div class="row">
                                     <div class="col-xs-12 text-center" id="o_event_name">
@@ -65,11 +65,11 @@
                                 <div class="col-xs-12">
                                     <span t-if="event.organizer_id.is_company and event.organizer_id.company_id.logo_web">
                                         <div t-field="event.event_logo">
-                                            <img t-att-src="'data:image/png;base64,%s' % to_text(event.organizer_id.company_id.logo_web)" style="max-height:1cm; max-width:4cm;"/>
+                                            <img t-att-src="'data:image/png;base64,%s' % to_text(event.organizer_id.company_id.logo_web)" style="max-height:1cm; max-width:4cm;" alt="Logo"/>
                                         </div>
                                     </span>
                                     <h4 t-field="event.name"/>
-                                    <h5>( <i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.date_begin" t-options='{"hide_seconds": True}'> </span> <i>to</i> <span itemprop="endDate" t-field="event.date_end" t-options='{"hide_seconds": True}'> </span> )</h5>
+                                    <h5>( <i class="fa fa-clock-o" aria-label="Period" role="img" title="Period"></i> <span itemprop="startDate" t-field="event.date_begin" t-options='{"hide_seconds": True}'> </span> <i>to</i> <span itemprop="endDate" t-field="event.date_end" t-options='{"hide_seconds": True}'> </span> )</h5>
                                 </div>
                             </div>
                             <div class="row" t-ignore="true">
diff --git a/addons/event/views/event_views.xml b/addons/event/views/event_views.xml
index af015656140c83ce01a1c3dd5a2faac1582aa2a3..229100cbb5db61b89e369063c7e5be8c70f22f22 100644
--- a/addons/event/views/event_views.xml
+++ b/addons/event/views/event_views.xml
@@ -305,14 +305,14 @@
                             <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
                                 <div class="o_dropdown_kanban dropdown">
 
-                                    <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                    <a class="dropdown-toggle btn" role="button" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                         <span class="fa fa-ellipsis-v"/>
                                     </a>
-                                    <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
+                                    <ul class="dropdown-menu" role="menu">
                                         <t t-if="widget.deletable">
-                                            <li><a type="delete">Delete</a></li>
+                                            <li><a role="menuitem" type="delete">Delete</a></li>
                                         </t>
-                                        <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                        <li role="menuitem" aria-haspopup="true"><ul class="oe_kanban_colorpicker" data-field="color" role="menu"/></li>
                                     </ul>
                                 </div>
                                 <div class="o_event_left">
@@ -327,8 +327,7 @@
                                     <h4 class="o_kanban_record_title"><field name="name"/></h4>
                                     <div>
                                         <t t-if="record.country_id.raw_value"> <b class="o_kanban_record_subtitle"> <field name="country_id"/> </b> <br/> </t>
-                                        <i class="fa fa-clock-o"/>
-                                        <b>To</b> <t t-esc="moment(record.date_end.raw_value).format('lll')"/>
+                                        <b class="fa fa-clock-o">To</b> <t t-esc="moment(record.date_end.raw_value).format('lll')"/>
                                     </div>
                                     <h4>
                                         <a name="%(act_event_registration_from_event)d" type="action">
diff --git a/addons/event/wizard/event_confirm_view.xml b/addons/event/wizard/event_confirm_view.xml
index 26741e434ea6f3b925dbd0175d2d3d517a3516c1..1cd67ac8da8add58463459ef5152120ee440812e 100644
--- a/addons/event/wizard/event_confirm_view.xml
+++ b/addons/event/wizard/event_confirm_view.xml
@@ -7,7 +7,7 @@
             <field name="model">event.confirm</field>
             <field name="arch" type="xml">
               <form string="Event Confirmation">
-                  <label string="Warning: This Event has not reached its Minimum Registration Limit. Are you sure you want to confirm it?"/>
+                  <span class="o_form_label">Warning: This Event has not reached its Minimum Registration Limit. Are you sure you want to confirm it?</span>
                   <footer>
                       <button name="confirm" string="Confirm Anyway" type="object" class="btn-primary"/>
                       <button string="Cancel" class="btn-default" special="cancel" />
diff --git a/addons/event_sale/data/event_demo.xml b/addons/event_sale/data/event_demo.xml
index 54b88827055ac91901ce4b685ff83e29311b7f23..3c90dae2b59ee67b55f1ddc17a12e75bde8cc382 100644
--- a/addons/event_sale/data/event_demo.xml
+++ b/addons/event_sale/data/event_demo.xml
@@ -142,7 +142,7 @@
             <div class="row">
                 <div class="col-xs-5">
                 <p>
-                    <i class="fa fa-twitter"/> #OpenDays
+                    <i class="fa fa-twitter" role="img" aria-label="Twitter" title="Twitter"/> #OpenDays
                 </p>
                 </div>
                 <div class="col-xs-6">
@@ -154,7 +154,7 @@
                 <small class="col-xs-3" style="float: left; padding-right: 0px; padding-left: 0px;">sponsored by</small>
                 <div class="col-xs-2" style="padding-right: 0px; padding-left: 0px;">
                 <span>
-                    <img class="img img-responsive" src="/base/static/img/logo_white.png"/>
+                    <img class="img img-responsive" src="/base/static/img/logo_white.png alt="Logo"/>
                 </span>
                 </div>
             </div>
diff --git a/addons/fleet/views/fleet_vehicle_model_views.xml b/addons/fleet/views/fleet_vehicle_model_views.xml
index fb7f111b45082c30a1c995813b30d22f6695ddf7..d04413af0b5db4368e07a3308ea146b8ae80122c 100644
--- a/addons/fleet/views/fleet_vehicle_model_views.xml
+++ b/addons/fleet/views/fleet_vehicle_model_views.xml
@@ -25,7 +25,7 @@
                                     <templates>
                                         <t t-name="kanban-box">
                                             <div style="position: relative">
-                                                <a t-if="! read_only_mode" type="delete" style="position: absolute; right: 0; padding: 4px; diplay: inline-block"><i class="fa fa-times text-danger"/></a>
+                                                <a t-if="! read_only_mode" type="delete" style="position: absolute; right: 0; padding: 4px; diplay: inline-block" aria-label="Delete" title="Delete"><i class="fa fa-times text-danger"/></a>
                                                 <div class="oe_module_vignette">
                                                     <div class="oe_module_desc o_kanban_record_title">
                                                         <field name="name"/>
@@ -125,7 +125,7 @@
                     <t t-name="kanban-box">
                         <div class="oe_kanban_vignette oe_semantic_html_override">
                             <a type="open" href="#" class="o_kanban_image oe_kanban_action">
-                                <img t-att-src="kanban_image('fleet.vehicle.model.brand', 'image_small', record.id.raw_value)" class="img-responsive" style="width:100px;"/>
+                                <img alt="Open" t-att-src="kanban_image('fleet.vehicle.model.brand', 'image_small', record.id.raw_value)" class="img-responsive" style="width:100px;"/>
                             </a>
                             <div class="oe_kanban_details">
                                 <h4 class="oe_partner_heading">
diff --git a/addons/fleet/views/fleet_vehicle_views.xml b/addons/fleet/views/fleet_vehicle_views.xml
index 9076e6ce5b0075beda2260da6c686e5f373c0a7a..a30918dda2162ad9cff50d8f89eb11d21a7bb80f 100644
--- a/addons/fleet/views/fleet_vehicle_views.xml
+++ b/addons/fleet/views/fleet_vehicle_views.xml
@@ -197,7 +197,7 @@
                     <t t-name="kanban-box">
                         <div class="oe_kanban_global_click">
                             <div class="o_kanban_image">
-                                <img t-att-src="kanban_image('fleet.vehicle', 'image_small', record.id.raw_value)"/>
+                                <img t-att-src="kanban_image('fleet.vehicle', 'image_small', record.id.raw_value)" alt="Vehicle"/>
                             </div>
                             <div class="oe_kanban_details">
                                 <strong class="o_kanban_record_title">
@@ -222,10 +222,10 @@
                                     <field name="contract_count"/>
                                     Contract(s)
                                     <span t-if="record.contract_renewal_due_soon.raw_value and !record.contract_renewal_overdue.raw_value"
-                                        class="fa fa-exclamation-triangle" t-att-style="'color:orange'">
+                                        class="fa fa-exclamation-triangle" t-att-style="'color:orange'" role="img" aria-label="Warning: renewal due soon" title="Warning: renewal due soon">
                                     </span>
                                      <span t-if="record.contract_renewal_overdue.raw_value"
-                                        class="fa fa-exclamation-triangle" t-att-style="'color:red;'">
+                                        class="fa fa-exclamation-triangle" t-att-style="'color:red;'" role="img" aria-label="Attention: renewal overdue" title="Attention: renewal overdue">
                                     </span>
                                 </a>
                             </div>
diff --git a/addons/gamification/views/badge.xml b/addons/gamification/views/badge.xml
index 1f384a16e5d3cbe805e0ba2f46be464665b45765..10ef3a616055aaedfff273f87dc52e3e1b407b70 100644
--- a/addons/gamification/views/badge.xml
+++ b/addons/gamification/views/badge.xml
@@ -111,7 +111,7 @@
                     <t t-name="kanban-box">
                         <div t-attf-class="o_kanban_gamification oe_kanban_global_click #{record.stat_my.raw_value ? 'oe_kanban_color_5' : 'oe_kanban_color_white'}">
                             <div class="o_kanban_image">
-                                <img t-att-src="kanban_image('gamification.badge', 'image', record.id.raw_value)" t-att-title="record.name.value"/>
+                                <img t-att-src="kanban_image('gamification.badge', 'image', record.id.raw_value)" t-att-title="record.name.value" t-att-alt="record.name.value"/>
                             </div>
                             <div class="oe_kanban_details">
                                 <strong class="o_kanban_record_title"><field name="name"/></strong>
@@ -132,7 +132,7 @@
                                     <em><field name="description"/></em>
                                     <div>
                                         <t t-foreach="record.unique_owner_ids.raw_value.slice(0,11)" t-as="owner">
-                                            <img width="24" height="24" class="oe_kanban_avatar" t-att-src="kanban_image('res.users', 'image_small', owner)" t-att-data-member_id="owner"/>
+                                            <img width="24" height="24" class="oe_kanban_avatar" t-att-src="kanban_image('res.users', 'image_small', owner)" t-att-data-member_id="owner" alt="Owner"/>
                                         </t>
                                     </div>
                                 </div>
@@ -165,7 +165,7 @@
                         <div class="oe_kanban_card oe_kanban_global_click oe_kanban_badge oe_kanban_color_white o_kanban_gamification">
                             <div class="o_kanban_content">
                                 <div class="o_kanban_image">
-                                    <a type="open"><img t-att-src="kanban_image('gamification.badge', 'image', record.badge_id.raw_value)" t-att-title="record.badge_name.value" /></a>
+                                    <a type="open"><img t-att-src="kanban_image('gamification.badge', 'image', record.badge_id.raw_value)" t-att-title="record.badge_name.value" t-att-alt="record.badge_name.value" /></a>
                                 </div>
                                 <div class="oe_kanban_details">
                                     <h4 class="mt0 mb0">
diff --git a/addons/gamification/views/challenge.xml b/addons/gamification/views/challenge.xml
index 0d70e6cfd81512ab1a7d085bf11ff61c73c9142f..518d6edc7d4ffa193efc98bb50b50a5fd48a04df 100644
--- a/addons/gamification/views/challenge.xml
+++ b/addons/gamification/views/challenge.xml
@@ -158,7 +158,7 @@
                                    </div>
                                </strong>
                                 <t t-foreach="record.user_ids.raw_value.slice(0,11)" t-as="member">
-                                    <img class="o_kanban_badge_avatars" t-att-src="kanban_image('res.users', 'image_small', member)" t-att-data-member_id="member"/>
+                                    <img class="o_kanban_badge_avatars" t-att-src="kanban_image('res.users', 'image_small', member)" t-att-data-member_id="member" alt="Member"/>
                                 </t>
                             </div>
                         </div>
diff --git a/addons/gamification/views/goal.xml b/addons/gamification/views/goal.xml
index 11c3b029c2ac1a9a5dae137b83a0efd3900443b5..b46e0e6844d146eab28fa1ea2d95310097dd8ef0 100644
--- a/addons/gamification/views/goal.xml
+++ b/addons/gamification/views/goal.xml
@@ -150,15 +150,15 @@
                             <div class="o_kanban_content">
                                 <p><strong><h4 class="oe_goal_name text-center" tooltip="kanban-tooltip"><field name="definition_id" /></h4></strong></p>
                                 <div class="pull-left">
-                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" />
+                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" />
                                 </div>
                                 <field name="user_id" />
                                 <div class="o_goal_state_block">
                                     <t t-if="record.definition_display.raw_value == 'boolean'">
                                         <div class="o_goal_state text-center">
-                                            <t t-if="record.state.raw_value=='reached'"><i class="o_green fa fa-check fa-3x" title="Goal Reached"/></t>
-                                            <t t-if="record.state.raw_value=='inprogress'"><i class="fa fa-clock-o fa-3x" title="Goal in Progress"/></t>
-                                            <t t-if="record.state.raw_value=='failed'"><i class="o_red fa fa-times fa-3x" title="Goal Failed"/></t>
+                                            <t t-if="record.state.raw_value=='reached'"><i role="img" class="o_green fa fa-check fa-3x" title="Goal Reached" aria-label="Goal Reached"/></t>
+                                            <t t-if="record.state.raw_value=='inprogress'"><i role="img" class="fa fa-clock-o fa-3x" title="Goal in Progress" aria-label="Goal in Progress"/></t>
+                                            <t t-if="record.state.raw_value=='failed'"><i role="img" class="o_red fa fa-times fa-3x" title="Goal Failed" aria-label="Goal Failed"/></t>
                                         </div>
                                     </t>
                                     <t t-if="record.definition_display.raw_value == 'progress'">
diff --git a/addons/google_calendar/views/res_config_settings_views.xml b/addons/google_calendar/views/res_config_settings_views.xml
index 9959ae612dafb37bdd60d3d88eb45e374810789b..8bcf1f467fe73da4e7c4cb1ac8a75e8fd4c21df2 100644
--- a/addons/google_calendar/views/res_config_settings_views.xml
+++ b/addons/google_calendar/views/res_config_settings_views.xml
@@ -13,7 +13,7 @@
                             <label for="cal_client_secret" string="Client Secret" class="col-xs-3 col-md-3 o_light_label"/>
                             <field name="cal_client_secret" password="True" nolabel="1"/>
                         </div>
-                        <a href="https://www.odoo.com/documentation/user/11.0/crm/optimize/google_calendar_credentials.html" class="oe-link" target="_blank"><i class="fa fa-fw fa-arrow-right"/>Tutorial</a>
+                        <a href="https://www.odoo.com/documentation/user/11.0/crm/optimize/google_calendar_credentials.html" class="oe-link fa fa-fw fa-arrow-right" target="_blank">Tutorial</a>
                     </div>
                 </div>
             </field>
diff --git a/addons/google_drive/views/res_config_settings_views.xml b/addons/google_drive/views/res_config_settings_views.xml
index 20a6955734095abb2789c318c17afa1963ab04b1..699ea10c93c236cd4b3b6d807ff1f37857d229ff 100644
--- a/addons/google_drive/views/res_config_settings_views.xml
+++ b/addons/google_drive/views/res_config_settings_views.xml
@@ -13,9 +13,9 @@
                         <field name="google_drive_authorization_code"/>
                     </div>
                     <div>
-                        <span type="button" class="btn-link o_btn-link-as-button fa-arrow-right">
+                        <button type="button" class="btn-link o_btn-link-as-button fa-arrow-right">
                             <field name="google_drive_uri" widget="url" text="Get Authorization Code"/>
-                        </span>
+                        </button>
                     </div>
                     <div>
                         <button type="action" name="%(action_google_drive_users_config)d" string="Google Drive Templates" icon="fa-arrow-right"  class="btn-link"/>
diff --git a/addons/hr/views/hr_views.xml b/addons/hr/views/hr_views.xml
index 94aa370d7925c6151c47da74d9554b8e5db153a2..1970a96d6a8377fc8cda7040af85e6046369575f 100644
--- a/addons/hr/views/hr_views.xml
+++ b/addons/hr/views/hr_views.xml
@@ -207,13 +207,13 @@
                     <t t-name="kanban-box">
                     <div class="oe_kanban_global_click">
                         <div class="o_kanban_image">
-                            <img t-att-src="kanban_image('hr.employee', 'image_medium', record.id.raw_value)"/>
+                            <img t-att-src="kanban_image('hr.employee', 'image_medium', record.id.raw_value)" alt="Employee"/>
                             <div class="o_employee_summary_icons">
                                 <t t-if="record.message_needaction_counter.raw_value">
-                                    <span class='oe_kanban_mail_new' title='Unread Messages'><i class='fa fa-comments'/><t t-raw="record.message_needaction_counter.raw_value"/></span>
+                                    <span role="alert" class='oe_kanban_mail_new' title='Unread Messages'><i class='fa fa-comments' role="img" aria-label="Unread Messages"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
                                 </t>
-                                <span title='Messages'><i class='fa fa-comments'/><t t-esc="record.message_ids.raw_value.length"/></span>
-                                <span title='Followers'><i class='fa fa-users'/><t t-esc="record.message_follower_ids.raw_value.length"/></span>
+                                <span title='Messages'><i class='fa fa-comments' role="img" aria-label="Messages"/><t t-esc="record.message_ids.raw_value.length"/></span>
+                                <span title='Followers'><i class='fa fa-users' role="img" aria-label="Followers"/><t t-esc="record.message_follower_ids.raw_value.length"/></span>
                             </div>
                         </div>
                         <div class="oe_kanban_details">
@@ -229,9 +229,9 @@
                             <ul>
                                 <li id="last_login"/>
                                 <li t-if="record.work_location.raw_value"><field name="work_location"/></li>
-                                <li t-if="record.work_email.raw_value"><i class="fa fa-envelope"></i> <field name="work_email"/></li>
-                                <li t-if="record.work_phone.raw_value"><i class="fa fa-phone"></i> <field name="work_phone"/></li>
-                                <li t-if="record.mobile_phone.raw_value"><i class="fa fa-mobile"></i> <field name="mobile_phone"/></li>
+                                <li t-if="record.work_email.raw_value"><i class="fa fa-envelope" role="img" aria-label="Email" title="Email"></i> <field name="work_email"/></li>
+                                <li t-if="record.work_phone.raw_value"><i class="fa fa-phone" role="img" aria-label="Phone" title="Phone"></i> <field name="work_phone"/></li>
+                                <li t-if="record.mobile_phone.raw_value"><i class="fa fa-mobile" role="img" aria-label="Mobile" title="Mobile"></i> <field name="mobile_phone"/></li>
                             </ul>
                         </div>
                     </div>
@@ -567,7 +567,7 @@
                                         <div class="o_secondary"><field name="company_id" groups="base.group_multi_company"/></div>
                                     </div>
                                     <div class="o_kanban_manage_button_section">
-                                        <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" /></a>
+                                        <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
                                     </div>
                                 </div>
                                 <div class="container o_kanban_card_content">
@@ -578,19 +578,19 @@
                                         <div class="col-xs-6 o_kanban_primary_right">
                                         </div>
                                     </div>
-                                </div><div class="container o_kanban_card_manage_pane dropdown-menu">
+                                </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
                                     <div class="row">
-                                        <div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_to_do">
+                                        <div role="menuitem" class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_to_do">
                                             <div class="o_kanban_card_manage_title">
                                                 <span>To Do</span>
                                             </div>
                                         </div>
-                                        <div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_to_approve">
+                                        <div role="menuitem" class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_to_approve">
                                             <div class="o_kanban_card_manage_title">
                                                 <span>To Approve</span>
                                             </div>
                                         </div>
-                                        <div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_reports">
+                                        <div role="menuitem" class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_reports">
                                             <div class="o_kanban_card_manage_title">
                                                 <span>Reporting</span>
                                             </div>
@@ -598,11 +598,11 @@
                                     </div>
 
                                     <div t-if="widget.editable" class="o_kanban_card_manage_settings row">
-                                        <div class="col-xs-8">
-                                            <ul class="oe_kanban_colorpicker" data-field="color"/>
+                                        <div role="menuitem" aria-haspopup="true" class="col-xs-8">
+                                            <ul class="oe_kanban_colorpicker" data-field="color" role="menu"/>
                                         </div>
                                         <div class="col-xs-4 text-right">
-                                            <a type="edit">Settings</a>
+                                            <a role="menuitem" type="edit">Settings</a>
                                         </div>
                                     </div>
                                 </div>
diff --git a/addons/hr/views/res_config_settings_views.xml b/addons/hr/views/res_config_settings_views.xml
index 37c2e566b4d511ea8d92e8b12a8ab04667dbb188..30d4d30f04e9954e1fb32a948027c69d678bca3d 100644
--- a/addons/hr/views/res_config_settings_views.xml
+++ b/addons/hr/views/res_config_settings_views.xml
@@ -13,7 +13,7 @@
                         <div class="col-xs-12 col-md-6 o_setting_box">
                             <div class="o_setting_right_pane">
                                 <label for="resource_calendar_id"/>
-                                <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." role="img" aria-label="Values set here are company-specific." groups="base.group_multi_company"/>
                                 <div class="row">
                                     <div class="text-muted col-md-8">
                                         Set default calendar used to compute time allocation for leaves, timesheets, ...
diff --git a/addons/hr_attendance/report/hr_employee_badge.xml b/addons/hr_attendance/report/hr_employee_badge.xml
index cac5c5eee167470916b8bcc7275ebda80c9e0bfe..ea1191de1a91258f42230b59078f0eee4de0c761 100644
--- a/addons/hr_attendance/report/hr_employee_badge.xml
+++ b/addons/hr_attendance/report/hr_employee_badge.xml
@@ -34,7 +34,7 @@
                                 <table style="width:155pt; height:85pt">
                                     <tr><th><div style="font-size:15pt; margin-bottom:0pt;margin-top:0pt;" align="center"><t t-esc="employee.name"/></div></th></tr>
                                     <tr><td><div align="center" style="font-size:10pt;margin-bottom:5pt;"><t t-esc="employee.job_id.name"/></div></td></tr>
-                                    <tr><td><img t-if="employee.barcode" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', employee.barcode, 600, 120)" style="max-height:50pt;max-width:100%;" align="center"/></td></tr>
+                                    <tr><td><img alt="barcode" t-if="employee.barcode" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', employee.barcode, 600, 120)" style="max-height:50pt;max-width:100%;" align="center"/></td></tr>
                                 </table>
                             </td>
                         </table>
@@ -43,4 +43,4 @@
             </div>
         </t>
     </template>
-</odoo>
\ No newline at end of file
+</odoo>
diff --git a/addons/hr_attendance/static/src/xml/attendance.xml b/addons/hr_attendance/static/src/xml/attendance.xml
index 5c334bcfa4c8845d07406c044dc2ac4bc0b960c7..f2ae4b73cda8fc8ec83e8b13dcfb6f62d8a94d86 100644
--- a/addons/hr_attendance/static/src/xml/attendance.xml
+++ b/addons/hr_attendance/static/src/xml/attendance.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <template xml:space="preserve">
     <t t-name="PresenceIndicator">
-        <div id="oe_hr_attendance_status" class="fa fa-user">
+        <div id="oe_hr_attendance_status" class="fa fa-user" role="img" aria-label="Available" title="Available">
         </div>
     </t>
 
@@ -42,8 +42,9 @@
                     </div>
                     <h1 class="mb8"><t t-esc="widget.employee.name"/></h1>
                     <h3 class="mt8 mb24"><t t-if="!checked_in">Welcome!</t><t t-else="">Want to check out?</t></h3>
-                    <a t-attf-class="fa fa-7x o_hr_attendance_sign_in_out_icon {{checked_in? 'fa-sign-out btn-warning' : 'fa-sign-in btn-default'}}"/>
-                    <h3 class="mt0 mb0 text-muted">Click to <b t-if="checked_in">check out</b><b t-else="">check in</b></h3>
+                    <a class="fa fa-7x o_hr_attendance_sign_in_out_icon fa-sign-out btn-warning" t-if="checked_in" aria-label="Sign out" title="Sign out"/>
+                    <a class="fa fa-7x o_hr_attendance_sign_in_out_icon fa-sign-in btn-default" t-if="!checked_in" aria-label="Sign in" title="Sign in"/>
+                    <h3 class="mt0 mb0 text-muted">Click to <b t-if="checked_in">check out</b><b t-if="!checked_in">check in</b></h3>
                 </t>
                 <t t-else="">
                     Error : Could not find employee linked to user.
@@ -59,8 +60,8 @@
             <div class="o_hr_attendance_kiosk_mode">
                 <t t-set="checked_in" t-value="widget.employee_state=='checked_in'"/>
                 <div class="o_hr_attendance_back_button">
-                    <span class="btn btn-default btn-lg visible-xs"><i class="fa fa-chevron-left mr8"/> Go back</span>
-                    <span class="btn btn-default hidden-xs"><i class="fa fa-chevron-left"/></span>
+                    <span class="btn btn-default btn-lg visible-xs"><span class="fa fa-chevron-left mr8"> Go back</span></span>
+                    <span class="btn btn-default hidden-xs"><i role="img" class="fa fa-chevron-left" aria-label="Go back" title="Go back"/></span>
                 </div>
                 <t t-if="widget.employee_id">
                     <div class="o_hr_attendance_user_badge o_home_menu_background">
@@ -69,7 +70,8 @@
                     <h1 class="mb8"><t t-esc="widget.employee_name"/></h1>
                     <h3 class="mt8 mb24"><t t-if="!checked_in">Welcome!</t><t t-else="">Want to check out?</t></h3>
                     <t t-if="!widget.use_pin">
-                        <a t-attf-class="fa fa-7x o_hr_attendance_sign_in_out_icon {{checked_in? 'fa-sign-out btn-warning' : 'fa-sign-in btn-default'}}"/>
+                        <a class="fa fa-7x o_hr_attendance_sign_in_out_icon fa-sign-out btn-warning" t-if="checked_in" aria-label="Sign out" title="Sign out"/>
+                        <a class="fa fa-7x o_hr_attendance_sign_in_out_icon fa-sign-in btn-default" t-if="!checked_in" aria-label="Sign in" title="Sign in"/>
                         <h3 class="mt0 mb0 text-muted">Click to <b t-if="checked_in">check out</b><b t-else="">check in</b></h3>
                     </t>
                     <t t-else="">
@@ -90,10 +92,10 @@
                         </div>
                     </t>
                 </t>
-                <div t-else="" class="alert alert-danger">
+                <div t-else="" class="alert alert-danger" role="alert">
                     <b>Error: could not find corresponding employee.</b><br/>Please return to the main menu.
                 </div>
-                <div class="oe_attendance_sign_in_out"/>
+                <a role="button" class="oe_attendance_sign_in_out" aria-label="Sign out" title="Sign out"/>
             </div>
         </div>
     </t>
@@ -110,20 +112,20 @@
                     <t t-if="widget.attendance.check_out">
                         <h1 class="mb0">Goodbye <t t-esc="widget.employee_name"/>!</h1>
                         <h2 class="o_hr_attendance_message_message mt4 mb24"/>
-                        <div class="alert alert-info h2 mt0">
+                        <div class="alert alert-info h2 mt0" role="status">
                             Checked out at <b><t t-esc="widget.attendance.check_out_time"/></b>
                         </div>
                         <h3 class="o_hr_attendance_random_message mb24"/>
-                        <div class="o_hr_attendance_warning_message mt24 alert alert-warning" style="display:none"/>
+                        <div class="o_hr_attendance_warning_message mt24 alert alert-warning" style="display:none" role="alert"/>
                     </t>
                     <t t-else="">
                         <h1 class="mb0">Welcome <t t-esc="widget.employee_name"/>!</h1>
                         <h2 class="o_hr_attendance_message_message mt4 mb24"/>
-                        <div class="alert alert-info h2 mt0">
+                        <div class="alert alert-info h2 mt0" role="status">
                             Checked in at <b><t t-esc="widget.attendance.check_in_time"/></b>
                         </div>
                         <h3 class="o_hr_attendance_random_message mb24"/>
-                        <div class="o_hr_attendance_warning_message mt24 alert alert-warning" style="display:none"/>
+                        <div class="o_hr_attendance_warning_message mt24 alert alert-warning" style="display:none" role="alert"/>
                     </t>
                     <button class="o_hr_attendance_button_dismiss btn btn-primary btn-lg">
                         <span class="text-capitalize" t-if="widget.attendance.check_out">Goodbye</span>
@@ -131,7 +133,7 @@
                     </button>
                 </t>
                 <t t-else="">
-                    <div class="alert alert-warning">Invalid request, please return to the main menu.</div>
+                    <div class="alert alert-warning" role="alert">Invalid request, please return to the main menu.</div>
                     <button class="o_hr_attendance_button_dismiss btn btn-default btn-lg">Go back</button>
                 </t>
             </div>
diff --git a/addons/hr_attendance/views/hr_attendance_view.xml b/addons/hr_attendance/views/hr_attendance_view.xml
index 497d90d799d0215707ee83baf5152b4b57186507..6a715ef7f4126e816beda8c4637b52eba98c62fe 100644
--- a/addons/hr_attendance/views/hr_attendance_view.xml
+++ b/addons/hr_attendance/views/hr_attendance_view.xml
@@ -27,14 +27,14 @@
                     <t t-name="kanban-box">
                         <div t-attf-class="oe_kanban_global_click">
                             <div>
-                                <img t-att-src="kanban_image('hr.employee', 'image_small', record.employee_id.raw_value)" t-att-title="record.employee_id.value" width="24" height="24" class="oe_kanban_avatar mr4"/>
+                                <img t-att-src="kanban_image('hr.employee', 'image_small', record.employee_id.raw_value)" t-att-title="record.employee_id.value" t-att-alt="record.employee_id.value" width="24" height="24" class="oe_kanban_avatar mr4"/>
                                 <span class="o_kanban_record_title">
                                     <strong><t t-esc="record.employee_id.value"/></strong>
                                 </span>
                             </div>
                             <hr class="mt4 mb8"/>
                             <div class="o_kanban_record_subtitle">
-                                <i class="fa fa-calendar" aria-hidden="true"></i>
+                                <i class="fa fa-calendar" aria-label="Period" role="img" title="Period"></i>
                                 <t t-esc="record.check_in.value"/>
                                 - <t t-esc="record.check_out.value"/>
                             </div>
diff --git a/addons/hr_attendance/views/hr_employee_view.xml b/addons/hr_attendance/views/hr_employee_view.xml
index e412a850bbf9b7ec2e18fead5fee63a5b7ddece7..e2b1019286851d3f034ce7a6019be06f02c69faf 100644
--- a/addons/hr_attendance/views/hr_employee_view.xml
+++ b/addons/hr_attendance/views/hr_employee_view.xml
@@ -12,8 +12,8 @@
                 <button name="%(hr_attendance_action_employee)d"
                     class="oe_stat_button"
                     type="action" attrs="{'invisible': [('attendance_state', '=', False)]}">
-                    <div id="oe_hr_attendance_status" class="fa fa-fw fa-user o_button_icon oe_hr_attendance_status_green" attrs="{'invisible': [('attendance_state', '=', 'checked_out')]}"/>
-                    <div id="oe_hr_attendance_status" class="fa fa-fw fa-user o_button_icon oe_hr_attendance_status_red" attrs="{'invisible': [('attendance_state', '=', 'checked_in')]}"/>
+                    <div role="img" id="oe_hr_attendance_status" class="fa fa-fw fa-user o_button_icon oe_hr_attendance_status_green" attrs="{'invisible': [('attendance_state', '=', 'checked_out')]}" aria-label="Available" title="Available"/>
+                    <div role="img" id="oe_hr_attendance_status" class="fa fa-fw fa-user o_button_icon oe_hr_attendance_status_red" attrs="{'invisible': [('attendance_state', '=', 'checked_in')]}" aria-label="Not available" title="Not available"/>
                     <div class="o_stat_info">
                         <span class="o_stat_text">Attendance</span>
                     </div>
@@ -55,15 +55,15 @@
                     <t t-name="kanban-box">
                     <div class="oe_kanban_global_click">
                         <div class="o_kanban_image">
-                            <img t-att-src="kanban_image('hr.employee', 'image_medium', record.id.raw_value)"/>
+                            <img t-att-src="kanban_image('hr.employee', 'image_medium', record.id.raw_value)" alt="Employee"/>
                         </div>
                         <div class="oe_kanban_details">
                             <div id="textbox">
                                 <div class="pull-right" t-if="record.attendance_state.raw_value == 'checked_in'">
-                                    <span id="oe_hr_attendance_status" class="fa fa-user oe_hr_attendance_status_green"></span>
+                                    <span id="oe_hr_attendance_status" class="fa fa-user oe_hr_attendance_status_green" role="img" aria-label="Available" title="Available"></span>
                                 </div>
                                 <div class="pull-right" t-if="record.attendance_state.raw_value == 'checked_out'">
-                                    <span id="oe_hr_attendance_status" class="fa fa-user oe_hr_attendance_status_red"></span>
+                                    <span id="oe_hr_attendance_status" class="fa fa-user oe_hr_attendance_status_red" role="img" aria-label="Not available" title="Not available"></span>
                                 </div>
                                 <strong>
                                     <field name="name"/>
@@ -93,10 +93,10 @@
             <field name="name" position="replace">
                 <div>
                     <div class="pull-right" t-if="record.attendance_state.raw_value == 'checked_in'">
-                        <span id="oe_hr_attendance_status" class="fa fa-user oe_hr_attendance_status_green"></span>
+                        <span id="oe_hr_attendance_status" class="fa fa-user oe_hr_attendance_status_green" role="img" aria-label="Available" title="Available"></span>
                     </div>
                     <div class="pull-right" t-if="record.attendance_state.raw_value == 'checked_out'">
-                        <span id="oe_hr_attendance_status" class="fa fa-user oe_hr_attendance_status_red"></span>
+                        <span id="oe_hr_attendance_status" class="fa fa-user oe_hr_attendance_status_red" role="img" aria-label="Not available" title="Not available"></span>
                     </div>
                     <strong>
                         <field name="name" placeholder="Employee's Name"/>
diff --git a/addons/hr_attendance/views/res_config_settings_views.xml b/addons/hr_attendance/views/res_config_settings_views.xml
index 9cbeeba3f7dcc81382637a70400fa078ba5a7ffc..6d04db7ee6115beef72aa71bb700e1e5bc86014a 100644
--- a/addons/hr_attendance/views/res_config_settings_views.xml
+++ b/addons/hr_attendance/views/res_config_settings_views.xml
@@ -15,7 +15,7 @@
                                 <field name="group_attendance_use_pin"/>
                             </div>
                             <div class="o_setting_right_pane">
-                                <label string="Employee PIN"/>
+                                <span class="o_form_label">Employee PIN</span>
                                 <div class="text-muted">
                                     Use PIN codes to check in in Kiosk Mode
                                 </div>
diff --git a/addons/hr_contract/views/hr_contract_views.xml b/addons/hr_contract/views/hr_contract_views.xml
index 78c57240ab89b8c7964e484e929385e7bf55072a..ef1cfad0f33197b992e1ee5655ecfc452d075dd3 100644
--- a/addons/hr_contract/views/hr_contract_views.xml
+++ b/addons/hr_contract/views/hr_contract_views.xml
@@ -175,12 +175,12 @@
                     <t t-name="kanban-box">
                         <div class="oe_kanban_card oe_kanban_global_click">
                             <div class="o_dropdown_kanban dropdown" groups="base.group_user">
-                                <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                <a class="dropdown-toggle btn" role="button" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                     <span class="fa fa-ellipsis-v"/>
                                 </a>
-                                <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                    <t t-if="widget.editable"><li><a type="edit">Edit Contract</a></li></t>
-                                    <t t-if="widget.deletable"><li><a type="delete">Delete</a></li></t>
+                                <ul class="dropdown-menu" role="menu">
+                                    <t t-if="widget.editable"><li><a role="menuitem" type="edit">Edit Contract</a></li></t>
+                                    <t t-if="widget.deletable"><li><a role="menuitem" type="delete">Delete</a></li></t>
                                 </ul>
                             </div>
                             <div class="oe_kanban_content">
@@ -191,7 +191,7 @@
                                     <field name="job_id"/>
                                 </div>
                                 <div class="oe_kanban_bottom_right">
-                                    <img t-att-src="kanban_image('hr.employee', 'image_medium', record.employee_id.raw_value)" t-att-title="record.employee_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                    <img t-att-src="kanban_image('hr.employee', 'image_medium', record.employee_id.raw_value)" t-att-title="record.employee_id.value" t-att-alt="record.employee_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                                 </div>
                             </div>
                             <div class="oe_clear"></div>
diff --git a/addons/hr_expense/views/res_config_settings_views.xml b/addons/hr_expense/views/res_config_settings_views.xml
index 7d5aab933bfb73ee0610b570bdc22cb4253ad238..b27b20d6e0b53bd639cc2fe42a5659bb3f1dca51 100644
--- a/addons/hr_expense/views/res_config_settings_views.xml
+++ b/addons/hr_expense/views/res_config_settings_views.xml
@@ -22,7 +22,7 @@
                                     </div>
                                     <div class="content-group" attrs="{'invisible': ['|', ('use_mailgateway', '=',  False), ('alias_domain', 'in', ['localhost', '', False])]}">
                                         <div class="mt16">
-                                            <label string="Email Alias" class="o_light_label"/>
+                                            <label for="expense_alias_prefix" string="Email Alias" class="o_light_label"/>
                                             <field name="expense_alias_prefix" class="oe_inline"/>
                                             <span>@</span>
                                             <field name="alias_domain"  class="oe_inline" readonly="1"/>
diff --git a/addons/hr_holidays/report/hr_leave_reports.xml b/addons/hr_holidays/report/hr_leave_reports.xml
index c3728fff21360836a7dc5fc4276ac86da4a8b6e1..a1c59ae63fa553cf1e79b148dc76549d52d277c3 100644
--- a/addons/hr_holidays/report/hr_leave_reports.xml
+++ b/addons/hr_holidays/report/hr_leave_reports.xml
@@ -73,7 +73,7 @@
                         <div t-attf-class="oe_kanban_global_click">
                             <div>
                                 <span>
-                                    <img t-att-src="kanban_image('hr.employee', 'image_small', record.employee_id.raw_value)" t-att-title="record.employee_id.value" width="40" height="40" class="oe_kanban_avatar pull-left mr4"/>
+                                    <img t-att-src="kanban_image('hr.employee', 'image_small', record.employee_id.raw_value)" t-att-title="record.employee_id.value" t-att-alt="record.employee_id.value" width="40" height="40" class="oe_kanban_avatar pull-left mr4"/>
                                 </span>
                                 <span>
                                     <div>
diff --git a/addons/hr_holidays/views/hr_leave_allocation_views.xml b/addons/hr_holidays/views/hr_leave_allocation_views.xml
index d5fc5abe820ac5c9c4123e1aacc8a33202948661..620ef641a08ca4910f377be12e9ba7e29e214626 100644
--- a/addons/hr_holidays/views/hr_leave_allocation_views.xml
+++ b/addons/hr_holidays/views/hr_leave_allocation_views.xml
@@ -75,7 +75,8 @@
                             <field name="type_request_unit" invisible="1"/>
                             <field name="name" attrs="{'readonly':[('state','!=','draft'),('state','!=','confirm')]}"/>
                             <field name="holiday_status_id" context="{'employee_id':employee_id}"/>
-                            <label string="Duration" attrs="{'invisible': [('accrual', '=', True)]}"/>
+                            <label for="number_of_days_temp" string="Duration" attrs="{'invisible': [('type_request_unit', '=', 'hour'),('accrual', '=', True)]}"/>
+                            <label for="number_of_hours" string="Duration" attrs="{'invisible': [('type_request_unit', '!=', 'hour'),('accrual', '=', True)]}"/>
                             <div>
                                 <div attrs="{'invisible': ['|', ('type_request_unit', '=', 'hour'), ('accrual', '=', True)]}">
                                     <field name="number_of_days_temp" class="oe_inline" attrs="{'readonly': [('state', '=', 'validate')]}"/> days
diff --git a/addons/hr_maintenance/views/maintenance_views.xml b/addons/hr_maintenance/views/maintenance_views.xml
index 292bd62429e99fa6a9c5892655695066e8f09507..24aa8ad73746ffd1846fcd17c4bd1b3ba98439f2 100644
--- a/addons/hr_maintenance/views/maintenance_views.xml
+++ b/addons/hr_maintenance/views/maintenance_views.xml
@@ -99,7 +99,7 @@
                 <field name="department_id"/>
             </xpath>
             <xpath expr="//img[@t-att-title='record.owner_user_id.value']" position='replace'>
-                <img t-att-src="kanban_image('hr.employee', 'image_small', record.employee_id.raw_value)" t-att-title="record.employee_id.value" width="27" height="27" class="oe_kanban_avatar"/>
+                <img t-att-src="kanban_image('hr.employee', 'image_small', record.employee_id.raw_value)" t-att-title="record.employee_id.value" t-att-alt="record.employee_id.value" width="27" height="27" class="oe_kanban_avatar"/>
             </xpath>
             <div t-if="record.serial_no.raw_value" position='after'>
                 <div t-if="!record.employee_id.raw_value">Unassigned</div>
diff --git a/addons/hr_org_chart/static/src/xml/hr_org_chart.xml b/addons/hr_org_chart/static/src/xml/hr_org_chart.xml
index f4e7c53b12593cba48936d1120195a2900bb1f34..2984d98a72ddea53617ec3cf20e1ddcc115177a7 100644
--- a/addons/hr_org_chart/static/src/xml/hr_org_chart.xml
+++ b/addons/hr_org_chart/static/src/xml/hr_org_chart.xml
@@ -63,7 +63,7 @@
                     <a class="well media-object text-center o_employee_redirect"
                             t-att-href="managers[0].link"
                             t-att-data-employee-id="managers[0].id">
-                        <i t-attf-class="fa fa-angle-double-up"/>
+                        <i t-attf-class="fa fa-angle-double-up" role="img" aria-label="More managers" title="More managers"/>
                     </a>
                 </div>
             </div>
@@ -83,7 +83,7 @@
     </t>
 
     <t t-if="!children.length &amp;&amp; !managers.length">
-        <div class="alert alert-info">
+        <div class="alert alert-info" role="alert">
             <p><b>No hierarchy position.</b></p>
             <p>This employee has no manager or subordinate.</p>
             <p>In order to get an organigram, set a manager and save the record.</p>
@@ -152,7 +152,7 @@
 <t t-name="hr_orgchart_emp_popover_title">
     <div>
         <span t-att-style='"background-image:url(\"/web/image/hr.employee/" + employee.id + "/image/\")"'/>
-        <a href="#" class="pull-right o_employee_redirect" t-att-data-employee-id="employee.id"><i class="fa fa-external-link"></i></a>
+        <a href="#" class="pull-right o_employee_redirect" t-att-data-employee-id="employee.id"><i class="fa fa-external-link" role="img" aria-label='Redirect' title="Redirect"></i></a>
         <b><t t-esc="employee.name"/></b>
     </div>
 </t>
diff --git a/addons/hr_payroll/views/res_config_settings_views.xml b/addons/hr_payroll/views/res_config_settings_views.xml
index 1e2193325064f564111bdf39c8abed2ddc482712..5b72ee8cd7b5e4b72439a138ca4dfbb9ed86f134 100644
--- a/addons/hr_payroll/views/res_config_settings_views.xml
+++ b/addons/hr_payroll/views/res_config_settings_views.xml
@@ -23,7 +23,7 @@
                     <div class="row mt16 o_settings_container" id="hr_payroll_localization" attrs="{'invisible': ['|', '|', ('module_l10n_fr_hr_payroll', '=', True), ('module_l10n_be_hr_payroll', '=', True), ('module_l10n_in_hr_payroll', '=', True)]}">
                         <div class="col-md-6 col-xs-12 o_setting_box">
                             <div class="o_setting_right_pane">
-                                <label string="Payroll Rules"/>
+                                <span class="o_form_label">Payroll Rules</span>
                                 <div class="text-muted">
                                     Payroll rules that apply to your country
                                 </div>
diff --git a/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees_views.xml b/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees_views.xml
index 0607cbc5d578f17a9db4ef1822083ee45bb71d39..64417d67a50d4e979dbbeadde07acf9fdaa1ccaa 100644
--- a/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees_views.xml
+++ b/addons/hr_payroll/wizard/hr_payroll_payslips_by_employees_views.xml
@@ -10,7 +10,7 @@
                         <button icon="fa-cogs" string="Generate" name="compute_sheet" type="object" class="oe_highlight"  />
                     </header>
                     <group>
-                        <label colspan="4" nolabel="1" string="This wizard will generate payslips for all selected employee(s) based on the dates and credit note specified on Payslips Run." />
+                        <span colspan="4" nolabel="1">This wizard will generate payslips for all selected employee(s) based on the dates and credit note specified on Payslips Run.</span>
                     </group>
                     <group colspan="4" >
                         <separator string="Employees" colspan="4"/>
diff --git a/addons/hr_recruitment/data/hr_recruitment_data.xml b/addons/hr_recruitment/data/hr_recruitment_data.xml
index 8cfb048e4402316c3d328a684017a5120338d87c..0a5a6fad082611c548203e70ce59a19ed7b844da 100644
--- a/addons/hr_recruitment/data/hr_recruitment_data.xml
+++ b/addons/hr_recruitment/data/hr_recruitment_data.xml
@@ -221,7 +221,7 @@
             % if object.job_id.address_id:
             <div style="width:598px;margin:0px auto;border-left:1px solid #dddddd;border-right:1px solid #dddddd;border-bottom:1px solid #dddddd;">
                 <a href="https://maps.google.com/maps?q=${location}" target="new">
-                    <img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&size=598x200&maptype=roadmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom;"/>
+                    <img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&size=598x200&maptype=roadmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom;" alt="Google Maps"/>
                 </a>
             </div>
             % endif
@@ -360,7 +360,7 @@
             % if object.job_id.address_id:
             <div style="width:598px;margin:0px auto;border-left:1px solid #dddddd;border-right:1px solid #dddddd;border-bottom:1px solid #dddddd;">
                 <a href="https://maps.google.com/maps?q=${location}" target="new">
-                    <img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&size=598x200&maptype=roadmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom;"/>
+                    <img src="http://maps.googleapis.com/maps/api/staticmap?autoscale=1&size=598x200&maptype=roadmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xa5117d%7Clabel:%7C${location}" style="vertical-align:bottom;" alt="Google Maps"/>
                 </a>
             </div>
             % endif
diff --git a/addons/hr_recruitment/views/hr_job_views.xml b/addons/hr_recruitment/views/hr_job_views.xml
index 201d58970cf920b032a7bbc155b254bd039a59df..cab60a27839484c2de621aafdca2dfa5f2ef3d29 100644
--- a/addons/hr_recruitment/views/hr_job_views.xml
+++ b/addons/hr_recruitment/views/hr_job_views.xml
@@ -30,11 +30,11 @@
                                 <div class="o_kanban_card_header_title">
                                     <div class="o_primary"><t t-esc="record.name.value"/></div>
                                     <div t-if="record.alias_name.value and record.alias_domain.value and record.state.raw_value == 'recruit'" class="o_secondary o_job_alias">
-                                        <small> <i class="fa fa-envelope-o"></i> <field name="alias_id"/> </small>
+                                        <small> <i class="fa fa-envelope-o" role="img" aria-label="Alias" title="Alias"></i> <field name="alias_id"/> </small>
                                     </div>
                                 </div>
                                 <div class="o_kanban_manage_button_section">
-                                    <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" /></a>
+                                    <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
                                 </div>
                             </div>
                             <div class="container o_kanban_card_content">
@@ -47,7 +47,7 @@
                                     <div name="kanban_boxes" class="row o_recruitment_kanban_boxes">
                                         <div class="o_recruitment_kanban_box o_kanban_primary_bottom bottom_block">
                                             <a name="action_get_attachment_tree_view" type="object">
-                                                <span title='Documents'><i class='fa fa-book'/>
+                                                <span title='Documents'><i class='fa fa-book' role="img" aria-label="Documents"/>
                                                 </span>
                                             </a>
                                         </div>
@@ -66,16 +66,16 @@
                                         </div>
                                     </div>
                                 </t>
-                            </div><div class="container o_kanban_card_manage_pane dropdown-menu">
+                            </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
                                 <div t-if="widget.editable" class="o_kanban_card_manage_settings row">
-                                    <div class="col-xs-8">
-                                        <ul class="oe_kanban_colorpicker" data-field="color"/>
+                                    <div class="col-xs-8" role="menuitem" aria-haspopup="true">
+                                        <ul class="oe_kanban_colorpicker" data-field="color" role="menu"/>
                                     </div>
                                     <div class="col-xs-4">
-                                        <a t-if="record.state.raw_value == 'recruit'" name="set_open" type="object">Recruitment Done</a>
-                                        <a t-if="record.state.raw_value == 'open'" name="set_recruit" type="object">Start recruitment</a>
-                                        <br/>
-                                        <a name="edit_job" type="edit">Edit</a>
+                                        <a role="menuitem" t-if="record.state.raw_value == 'recruit'" name="set_open" type="object">Recruitment Done</a>
+                                        <a role="menuitem" t-if="record.state.raw_value == 'open'" name="set_recruit" type="object">Start recruitment</a>
+                                        <br role="separator"/>
+                                        <a role="menuitem" name="edit_job" type="edit">Edit</a>
                                     </div>
                                 </div>
                             </div>
diff --git a/addons/hr_recruitment/views/hr_recruitment_views.xml b/addons/hr_recruitment/views/hr_recruitment_views.xml
index 96e18b5436b54231100d8d7209d03afa3de1ecd2..cda14788ae33f487be05d8890064a8ee8c7fdd9d 100644
--- a/addons/hr_recruitment/views/hr_recruitment_views.xml
+++ b/addons/hr_recruitment/views/hr_recruitment_views.xml
@@ -290,13 +290,13 @@
                         <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click oe_applicant_kanban oe_semantic_html_override">
                             <div class="o_dropdown_kanban dropdown">
 
-                                <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                <a class="dropdown-toggle btn" role="button" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                     <span class="fa fa-ellipsis-v"/>
                                 </a>
-                                <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                    <t t-if="widget.deletable"><li><a type="delete">Delete</a></li></t>
-                                    <li><a name="action_makeMeeting" type="object">Schedule Interview</a></li>
-                                    <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                <ul class="dropdown-menu" role="menu">
+                                    <t t-if="widget.deletable"><li><a role="menuitem" type="delete">Delete</a></li></t>
+                                    <li><a role="menuitem" name="action_makeMeeting" type="object">Schedule Interview</a></li>
+                                    <li role="menuitem" aira-haspopup="true"><ul role="menu" class="oe_kanban_colorpicker" data-field="color"/></li>
                                 </ul>
                             </div>
                             <div class="oe_kanban_content">
@@ -313,7 +313,7 @@
                                     </div>
                                 </div>
                                 <field name="categ_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
-                                <t t-if="record.partner_mobile.raw_value"><i class="fa fa-mobile mr4"/><field name="partner_mobile"/><br/></t>
+                                <t t-if="record.partner_mobile.raw_value"><i class="fa fa-mobile mr4" role="img" aria-label="Mobile" title="Mobile"/><field name="partner_mobile"/><br/></t>
                                 <div class="o_kanban_record_bottom mt4">
                                     <div class="oe_kanban_bottom_left">
                                         <div class="pull-left mr4" groups="base.group_user">
@@ -323,12 +323,12 @@
                                             <field name="activity_ids" widget="kanban_activity"/>
                                         </div>
                                         <t t-if="record.message_needaction_counter.raw_value">
-                                            <span class='oe_kanban_mail_new mr4' title='Unread Messages'><i class='fa fa-comments'/><t t-raw="record.message_needaction_counter.raw_value"/></span>
+                                            <span role="alert" class='oe_kanban_mail_new mr4' title='Unread Messages'><i class='fa fa-comments' role="img" aria-label="Unread messages"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
                                         </t>
                                     </div>
                                     <div class="oe_kanban_bottom_right">
                                         <a name="action_get_attachment_tree_view" type="object">
-                                            <span title='Documents'><i class='fa fa-book'/>
+                                            <span title='Documents'><i class='fa fa-book' role="img" aria-label="Documents"/>
                                                 <t t-esc="record.attachment_number.raw_value"/>
                                             </span>
                                         </a>
@@ -338,7 +338,7 @@
                                             <field name="legend_blocked" invisible="1"/>
                                             <field name="legend_done" invisible="1"/>
                                         </div>
-                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="30" height="30" class="oe_kanban_avatar"/>
+                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="30" height="30" class="oe_kanban_avatar"/>
                                     </div>
                                     
                                 </div>
diff --git a/addons/hr_recruitment/views/res_config_settings_views.xml b/addons/hr_recruitment/views/res_config_settings_views.xml
index e651f2bae83d74d4db715ffd2b001419253b8faa..1c91baa043bc3be55933dcd4e203b8dd9821c5c3 100644
--- a/addons/hr_recruitment/views/res_config_settings_views.xml
+++ b/addons/hr_recruitment/views/res_config_settings_views.xml
@@ -16,7 +16,7 @@
                                     <field name="module_website_hr_recruitment"/>
                                 </div>
                                 <div class="o_setting_right_pane">
-                                    <label string="Online Posting"/>
+                                    <label for="module_website_hr_recruitment" string="Online Posting"/>
                                     <div class="text-muted">
                                         Publish available jobs on your website
                                     </div>
@@ -30,7 +30,7 @@
                                     <field name="module_hr_recruitment_survey"/>
                                 </div>
                                 <div class="o_setting_right_pane">
-                                    <label string="Interview Forms"/>
+                                    <label for="module_hr_recruitment_survey" string="Interview Forms"/>
                                     <div class="text-muted">
                                         Use interview forms during recruitment process
                                     </div>
diff --git a/addons/hr_timesheet/views/hr_timesheet_views.xml b/addons/hr_timesheet/views/hr_timesheet_views.xml
index caefdad4c90fb896e4d55ed80db1abea8987bc9e..9b430471cdfec1f9d8ad3497b96da045e3919b00 100644
--- a/addons/hr_timesheet/views/hr_timesheet_views.xml
+++ b/addons/hr_timesheet/views/hr_timesheet_views.xml
@@ -176,7 +176,7 @@
                             <div t-attf-class="oe_kanban_global_click">
                                 <div class="row">
                                     <div class="col-xs-2">
-                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="40" height="40" class="oe_kanban_avatar pull-left"/>
+                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="40" height="40" class="oe_kanban_avatar pull-left"/>
                                     </div>
                                     <div class="col-xs-10">
                                         <div>
@@ -191,7 +191,7 @@
                                 </div>
                                 <hr class="mt4 mb4"/>
                                 <span>
-                                    <i class="fa fa-calendar" aria-hidden="true"></i>
+                                    <i class="fa fa-calendar" role="img" aria-label="Date" title="Date"></i>
                                     <t t-esc="record.date.value"/>
                                 </span>
                                 <span class="pull-right">
diff --git a/addons/hr_timesheet/views/project_views.xml b/addons/hr_timesheet/views/project_views.xml
index 619878cf45977d2d39305b12ad76df21d3de85cd..3efe8b9942b40fd60513ead8e362d4534bc23e84 100644
--- a/addons/hr_timesheet/views/project_views.xml
+++ b/addons/hr_timesheet/views/project_views.xml
@@ -77,7 +77,7 @@
                             </group>
                         </group>
                         <group name="timesheet_error" attrs="{'invisible': [('allow_timesheets', '!=', False)]}">
-                            <div class="alert alert-warning">
+                            <div class="alert alert-warning" role="alert">
                                 Your project is linked to an inactive analytic account. Change it, or reactivate the current one to timesheet on the project.
                             </div>
                         </group>
diff --git a/addons/iap/static/src/xml/iap_templates.xml b/addons/iap/static/src/xml/iap_templates.xml
index 4995c4527e325ef31d63243c36242691244c059c..7503e0aa3f80bec6f1e3e8229cb01be0b99fdb86 100644
--- a/addons/iap/static/src/xml/iap_templates.xml
+++ b/addons/iap/static/src/xml/iap_templates.xml
@@ -19,8 +19,8 @@
     <t t-extend="DashboardApps">
         <t t-jquery=".o_web_settings_dashboard_pills" t-operation="after">
             <div class="text-center" style="display: inline-block">
-                <a t-att-href="widget.data.url" target="_blank">
-                <i class="fa fa-money fa-2x text-muted"/> In-App Purchases</a>
+                <a t-att-href="widget.data.url" target="_blank" class="fa fa-money fa-2x text-muted">
+                In-App Purchases</a>
             </div>
         </t>
     </t>
diff --git a/addons/im_livechat/static/src/xml/copy_clipboard.xml b/addons/im_livechat/static/src/xml/copy_clipboard.xml
index a6c1cb8a1974aa1d16109aab08d4b4baa226680c..61c17cebb17a359a2a41dc295ab88e88bf92d41f 100644
--- a/addons/im_livechat/static/src/xml/copy_clipboard.xml
+++ b/addons/im_livechat/static/src/xml/copy_clipboard.xml
@@ -3,13 +3,13 @@
 
     <t t-name="CopyClipboardText">
         <button class="btn btn-xs btn-primary o_clipboard_button o_btn_text_copy">
-            <i class="fa fa-clipboard"/> Copy Text
+            <span class="fa fa-clipboard">Copy Text</span>
         </button>
     </t>
 
     <t t-name="CopyClipboardChar">
         <button class="btn btn-xs btn-primary o_clipboard_button o_btn_char_copy">
-            <i class="fa fa-clipboard"/> Copy Text
+            <span class="fa fa-clipboard">Copy Text</span>
         </button>
     </t>
 
diff --git a/addons/im_livechat/static/src/xml/im_livechat_backend.xml b/addons/im_livechat/static/src/xml/im_livechat_backend.xml
index 49018af65eb934253d72e0ede120b2ae398b23b8..185f3157a49e35189871f57672109ebee587185d 100644
--- a/addons/im_livechat/static/src/xml/im_livechat_backend.xml
+++ b/addons/im_livechat/static/src/xml/im_livechat_backend.xml
@@ -17,8 +17,7 @@
     <t t-extend="mail.discuss_mobile">
         <t t-jquery=".o_mail_mobile_tabs" t-operation="append">
             <div class="o_mail_mobile_tab" data-type="livechat">
-                <span class="fa fa-comments"/>
-                <span class="o_tab_title">Livechat</span>
+                <span class="fa fa-comments o_tab_title">Livechat</span>
             </div>
         </t>
     </t>
diff --git a/addons/im_livechat/views/im_livechat_channel_views.xml b/addons/im_livechat/views/im_livechat_channel_views.xml
index 3e1fa0bce284c40ea59f7b3f040211f6a7df7bfd..86312084fbdac19190110dbb13148b2ba6c98283 100644
--- a/addons/im_livechat/views/im_livechat_channel_views.xml
+++ b/addons/im_livechat/views/im_livechat_channel_views.xml
@@ -36,23 +36,23 @@
                         <t t-name="kanban-box">
                             <div class="oe_kanban_global_click">
                                 <div class="o_kanban_image">
-                                    <img t-att-src="kanban_image('im_livechat.channel', 'image_medium', record.id.raw_value)" class="img-responsive"/>
+                                    <img t-att-src="kanban_image('im_livechat.channel', 'image_medium', record.id.raw_value)" class="img-responsive" alt="Channel"/>
                                 </div>
                                 <div class="oe_kanban_details">
                                     <strong class="o_kanban_record_title"><field name="name"/></strong>
                                     <div>
                                         <p>
-                                            <i class="fa fa-user"></i>
+                                            <i class="fa fa-user" role="img" aria-label="User" title="User"></i>
                                             <t t-esc="(record.user_ids.raw_value || []).length"/> Operators
                                             <br/>
-                                            <i class="fa fa-comments"></i>
+                                            <i class="fa fa-comments" role="img" aria-label="Comments" title="Comments"></i>
                                             <t t-esc="record.nbr_channel.raw_value"/> Sessions
                                             <div>
                                                 <t t-if="record.rating_percentage_satisfaction.raw_value &gt; 0">
                                                     <a type="action" name="%(rating_rating_action_view_livechat_rating)d">
-                                                        <i class="fa fa-smile-o text-success" t-if="record.rating_percentage_satisfaction.raw_value &gt;= 70" title="Rating: Great"/>
-                                                        <i class="fa fa-meh-o text-warning" t-if="record.rating_percentage_satisfaction.raw_value &gt; 30 and record.rating_percentage_satisfaction.raw_value &lt; 70" title="Rating: Okay"/>
-                                                        <i class="fa fa-frown-o text-danger" t-if="record.rating_percentage_satisfaction.raw_value &lt;= 30" title="Rating: Bad"/>
+                                                        <i class="fa fa-smile-o text-success" t-if="record.rating_percentage_satisfaction.raw_value &gt;= 70" title="Rating: Great" role="img" aria-label="Happy face"/>
+                                                        <i class="fa fa-meh-o text-warning" t-if="record.rating_percentage_satisfaction.raw_value &gt; 30 and record.rating_percentage_satisfaction.raw_value &lt; 70" title="Rating: Okay" role="img" aria-label="Neutral face"/>
+                                                        <i class="fa fa-frown-o text-danger" t-if="record.rating_percentage_satisfaction.raw_value &lt;= 30" title="Rating: Bad" role="img" aria-label="Sad face"/>
                                                        <t t-esc="record.rating_percentage_satisfaction.raw_value"/>%
                                                    </a>
                                                 </t>
@@ -106,9 +106,9 @@
                                     <templates>
                                         <t t-name="kanban-box">
                                             <div>
-                                                <a t-if="!read_only_mode" type="delete" class="fa fa-times pull-right"/>
+                                                <a t-if="!read_only_mode" type="delete" class="fa fa-times pull-right" aria-label="Delete" title="Delete"/>
                                                 <div class="o_kanban_image">
-                                                    <img t-att-src="kanban_image('res.users', 'image', record.id.raw_value)"/>
+                                                    <img t-att-src="kanban_image('res.users', 'image', record.id.raw_value)" alt="User"/>
                                                 </div>
                                                 <div class="o_kanban_details">
                                                     <h4 class="o_kanban_record_title"><field name="name"/></h4>
diff --git a/addons/l10n_be_hr_payroll/views/l10n_be_hr_payroll_view.xml b/addons/l10n_be_hr_payroll/views/l10n_be_hr_payroll_view.xml
index b17cc36985800f3c527a48bc9e65d7d76778d009..674134cbbfddfb059fce595e19b720043db4812d 100644
--- a/addons/l10n_be_hr_payroll/views/l10n_be_hr_payroll_view.xml
+++ b/addons/l10n_be_hr_payroll/views/l10n_be_hr_payroll_view.xml
@@ -62,7 +62,7 @@
                     <field name="car_atn" attrs="{'invisible': [('transport_mode_car', '=', False)]}" invisible="1"/>
                     <field name="transport_employer_cost" invisible="1"/>
                     <field name="transport_mode_public"/>
-                    <label string="Public Transport" attrs="{'invisible': [('transport_mode_public', '=', False)]}" name="public_transport_label"/>
+                    <span class="o_form_label" attrs="{'invisible': [('transport_mode_public', '=', False)]}" name="public_transport_label">Public Transport</span>
                     <div attrs="{'invisible': [('transport_mode_public', '=', False)]}" name="public_transport_div">
                         <div>
                             <label for="public_transport_employee_amount" class="oe_inline"/>
@@ -74,7 +74,7 @@
                         </div>
                     </div>
                     <field name="transport_mode_others"/>
-                    <label string="Other" attrs="{'invisible': [('transport_mode_others', '=', False)]}" name="others_label"/>
+                    <span class="o_form_label" attrs="{'invisible': [('transport_mode_others', '=', False)]}" name="others_label">Other</span>
                     <div attrs="{'invisible': [('transport_mode_others', '=', False)]}" class="o_row" name="others_div">
                         <field name="others_reimbursed_amount" class="oe_inline" nolabel="1"/>
                         <span>/ month</span>
diff --git a/addons/l10n_be_hr_payroll_fleet/views/res_config_settings_views.xml b/addons/l10n_be_hr_payroll_fleet/views/res_config_settings_views.xml
index f4800282ec2ebfe371bbf2b1ded8e6c837f6fbf6..5e1647cab2329e0f827fe8bd97b5ca1cb076187b 100644
--- a/addons/l10n_be_hr_payroll_fleet/views/res_config_settings_views.xml
+++ b/addons/l10n_be_hr_payroll_fleet/views/res_config_settings_views.xml
@@ -14,7 +14,7 @@
                             <div class="col-xs-12 col-md-6 o_setting_box">
                                 <div class="o_setting_left_pane"/>
                                 <div class="o_setting_right_pane">
-                                    <label string="New Car Request"/>
+                                    <span class="o_form_label">New Car Request</span>
                                     <div class="text-muted content-group mt16">
                                         <span>An employee cannot request a new car if there are more than </span>
                                         <field name="max_unused_cars" class="text-center oe_inline" />
diff --git a/addons/l10n_ch/views/res_config_settings_views.xml b/addons/l10n_ch/views/res_config_settings_views.xml
index 2fa7a54386cc8762e00bb38b8c49e2da7a2cf0e7..486f2e3e1836987c05fc703aecd5a78e5a6a1d6f 100644
--- a/addons/l10n_ch/views/res_config_settings_views.xml
+++ b/addons/l10n_ch/views/res_config_settings_views.xml
@@ -32,7 +32,7 @@
                     <div class="col-xs-12 col-md-6 o_setting_box" id="l10n_ch-isr_print_scanline_offset">
                         <div class="o_setting_left_pane"/>
                         <div class="o_setting_right_pane">
-                            <label string="ISR scan line offset"/>
+                            <span class="o_form_label">ISR scan line offset</span>
                             <div class="text-muted">
                                 Offset to move the the scan line in mm
                             </div>
diff --git a/addons/l10n_fr_hr_payroll/views/res_config_settings_views.xml b/addons/l10n_fr_hr_payroll/views/res_config_settings_views.xml
index 4444039af5fb037e10839f58110e1f6d2556c986..60e08b96620751c6c1c8231acaa4e751f269385f 100644
--- a/addons/l10n_fr_hr_payroll/views/res_config_settings_views.xml
+++ b/addons/l10n_fr_hr_payroll/views/res_config_settings_views.xml
@@ -12,8 +12,8 @@
                     <div class="col-xs-12 col-md-6 o_setting_box">
                         <div class="o_setting_left_pane"/>
                         <div class="o_setting_right_pane">
-                            <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
-                            <label string="Paie"/>
+                            <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
+                            <span class="o_form_label">Paie</span>
                             <div class="content-group">
                                 <div class="row mt16">
                                     <label for="plafond_secu" class="col-md-3 o_light_label"/>
diff --git a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth_view.xml b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth_view.xml
index 3de7c0d4ebb311f3f71ca395e7ef92236d929563..1533a5c6e98bc8124d1a94b0d8bbecc77eb42054 100644
--- a/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth_view.xml
+++ b/addons/l10n_in_hr_payroll/wizard/hr_salary_employee_bymonth_view.xml
@@ -5,7 +5,7 @@
             <field name="model">hr.salary.employee.month</field>
             <field name="arch" type="xml">
             <form string="Employee Pay Head Breakup">
-                <label string="This wizard will print report which displays employees break-up of Net Head for a specified dates."/>
+                <span class="o_form_label">This wizard will print report which displays employees break-up of Net Head for a specified dates.</span>
                 <footer>
                     <button name="print_report" string="Print" type="object" class="btn-primary"/>
                     <button string="Cancel" class="btn-default" special="cancel" />
diff --git a/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail_view.xml b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail_view.xml
index 1b9b3fb0eab285ac62196724aa95034a3bfa69b0..fab60113887ccdb18527e8084eeb9a7441b00f74 100644
--- a/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail_view.xml
+++ b/addons/l10n_in_hr_payroll/wizard/hr_yearly_salary_detail_view.xml
@@ -5,7 +5,7 @@
             <field name="model">yearly.salary.detail</field>
             <field name="arch" type="xml">
             <form string="Pay Head Employee Breakup">
-                <label string="This wizard will print report which display a pay head employee breakup for a specified dates."/>
+                <span class="o_form_label">This wizard will print report which display a pay head employee breakup for a specified dates.</span>
                 <footer>
                     <button name="print_report" string="Print" type="object" class="btn-primary"/>
                     <button string="Cancel" class="btn-default" special="cancel" />
diff --git a/addons/lunch/static/src/xml/lunch.xml b/addons/lunch/static/src/xml/lunch.xml
index 4efb8f9f5de41c5b82cb9648684378fb800266b5..6b454f0b4ecbfbb3cd09fa8336dbaa0b1176837e 100644
--- a/addons/lunch/static/src/xml/lunch.xml
+++ b/addons/lunch/static/src/xml/lunch.xml
@@ -11,8 +11,7 @@
             <h3><t t-esc="supplier"/></h3>
             <div t-foreach='categories[supplier]' t-as='order' class="o_lunch_vignette">
                 <button type="button" class="pull-right o_add_button oe_edit_only oe_link" t-att-data-id="order.line_id">
-                    <span class="fa fa-plus-square"></span>
-                    <span>Add</span>
+                    <span class="fa fa-plus-square">Add</span>
                 </button>
                 <div>
                     <t t-esc="order.product_name"/>
diff --git a/addons/lunch/views/lunch_views.xml b/addons/lunch/views/lunch_views.xml
index 5281ed69a3b7313f7d6847607d29ec991d5a7b21..6016d9a0bc4d3be3fc59ad0657d97f9bf189ac75 100644
--- a/addons/lunch/views/lunch_views.xml
+++ b/addons/lunch/views/lunch_views.xml
@@ -105,17 +105,17 @@
                                     </div>
                                     <div class="col-xs-4 text-right">
                                         <span class="badge">
-                                            <strong><i class="fa fa-money"/> <field name="amount"/></strong>
+                                            <strong><i class="fa fa-money" role="img" aria-label="Amount" title="Amount"/> <field name="amount"/></strong>
                                         </span>
                                     </div>
                                 </div>
                                 <div class="row">
                                     <div class="col-xs-6">
-                                        <i class="fa fa-clock-o"/>
+                                        <i class="fa fa-clock-o" role="img" aria-label="Date" title="Date"/>
                                         <t t-esc="record.date.value"/>
                                     </div>
                                     <div class="col-xs-6">
-                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                                     </div>
                                 </div>
                             </div>
@@ -213,9 +213,9 @@
               </p><p>
                 Here you can see today's orders grouped by vendors.
               </p><p>
-                Click on the <span class="fa fa-phone text-success"/> to announce that the order is ordered.<br/>
-                Click on the <span class="fa fa-check text-success"/> to announce that the order is received.<br/>
-                Click on the <span class="fa fa-times-circle text-danger"/> to announce that the order isn't available.
+                Click on the <span class="fa fa-phone text-success" role="img" aria-label="Order button" title="Order button"/> to announce that the order is ordered.<br/>
+                Click on the <span class="fa fa-check text-success" role="img" aria-label="Receive button" title="Receive button"/> to announce that the order is received.<br/>
+                Click on the <span class="fa fa-times-circle text-danger" role="img" aria-label="Cancel button" title="Cancel button"/> to announce that the order isn't available.
               </p>
             </field>
         </record>
@@ -234,9 +234,9 @@
               </p><p>
                 Summary of all lunch orders, grouped by vendor and by date.
               </p><p>
-                Click on the <span class="fa fa-phone text-success"/> to announce that the order is ordered.<br/>
-                Click on the <span class="fa fa-check text-success"/> to announce that the order is received.<br/>
-                Click on the <span class="fa fa-times-circle text-danger"/> red X to announce that the order isn't available.
+                Click on the <span class="fa fa-phone text-success" role="img" aria-label="Order button" title="Order button"/> to announce that the order is ordered.<br/>
+                Click on the <span class="fa fa-check text-success" role="img" aria-label="Receive button" title="Receive button"/> to announce that the order is received.<br/>
+                Click on the <span class="fa fa-times-circle text-danger" role="img" aria-label="Cancel button" title="Cancel button"/> red X to announce that the order isn't available.
               </p>
             </field>
         </record>
@@ -390,26 +390,26 @@
                                 </div>
                                 <div class="row">
                                     <div class="col-xs-6">
-                                        <i class="fa fa-money"/> <field name="price"/>
+                                        <i class="fa fa-money" role="img" aria-label="Money" title="Money"/> <field name="price"/>
                                     </div>
                                     <div class="col-xs-6 text-right">
-                                        <i class="fa fa-clock-o"/> <field name="date"/>
+                                        <i class="fa fa-clock-o" role="img" aria-label="Date" title="Date"/> <field name="date"/>
                                     </div>
                                 </div>
                                 <div class="row mt4">
                                     <div class="col-xs-6">
-                                        <a class="btn btn-xs btn-success" name="order" string="Order" type="object" attrs="{'invisible': ['|',('state','=','confirmed'),('state','=','ordered')]}" groups="lunch.group_lunch_manager">
-                                            <i class="fa fa-phone"/>
+                                        <a class="btn btn-xs btn-success" role="button" name="order" string="Order" type="object" attrs="{'invisible': ['|',('state','=','confirmed'),('state','=','ordered')]}" groups="lunch.group_lunch_manager">
+                                            <i class="fa fa-phone" role="img" aria-label="Order button" title="Order button"/>
                                         </a>
-                                        <a class="btn btn-xs btn-info" name="confirm" string="Receive" type="object" attrs="{'invisible': [('state','!=','ordered')]}" groups="lunch.group_lunch_manager">
-                                            <i class="fa fa-check"/>
+                                        <a class="btn btn-xs btn-info" role="button" name="confirm" string="Receive" type="object" attrs="{'invisible': [('state','!=','ordered')]}" groups="lunch.group_lunch_manager">
+                                            <i class="fa fa-check" role="img" aria-label="Receive button" title="Receive button"/>
                                         </a>
-                                        <a class="btn btn-xs btn-danger" name="cancel" string="Cancel" type="object" attrs="{'invisible': [('state','=','cancelled')]}" groups="lunch.group_lunch_manager">
-                                            <i class="fa fa-times"/>
+                                        <a class="btn btn-xs btn-danger" role="button" name="cancel" string="Cancel" type="object" attrs="{'invisible': [('state','=','cancelled')]}" groups="lunch.group_lunch_manager">
+                                            <i class="fa fa-times" role="img" aria-label="Cancel button" title="Cancel button"/>
                                         </a>
                                     </div>
                                     <div class="col-xs-6">
-                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                                     </div>
                                 </div>
                             </div>
@@ -464,7 +464,7 @@
                                 <field name='date'/>
                             </group>
                             <div>
-                                <div attrs="{'invisible': ['|',('state','!=','new'),('alerts','=',False)]}" class="alert alert-danger oe_edit_only">
+                                <div attrs="{'invisible': ['|',('state','!=','new'),('alerts','=',False)]}" class="alert alert-danger oe_edit_only" role="alert">
                                     <field name='alerts'/>
                                 </div>
                             </div>
diff --git a/addons/mail/static/src/xml/activity.xml b/addons/mail/static/src/xml/activity.xml
index 9bdcfcdcb9097d1ba77bb7593b2212370730bda9..9d2f0d72ed8f35998139fed7b0993a1f5e45bca8 100644
--- a/addons/mail/static/src/xml/activity.xml
+++ b/addons/mail/static/src/xml/activity.xml
@@ -2,22 +2,22 @@
 <templates xml:space="preserve">
     <t t-name="mail.activity_items">
         <div class="o_thread_date_separator o_border_dashed" data-toggle="collapse" data-target="#o_chatter_planned_activities">
-            <span class="o_thread_date btn">
-                <i class="fa fa-fw fa-caret-down"/>
-                Planned activities
+            <a href="#" role="button" class="o_thread_date btn">
+                <span class="fa fa-fw fa-caret-down">
+                Planned activities</span>
                 <small class="o_chatter_planned_activities_summary ml8">
                     <span class="label img-circle label-danger"><t t-esc="nbOverdueActivities"/></span>
                     <span class="label img-circle label-warning"><t t-esc="nbTodayActivities"/></span>
                     <span class="label img-circle label-success"><t t-esc="nbPlannedActivities"/></span>
                 </small>
-            </span>
+            </a>
         </div>
         <div id="o_chatter_planned_activities" class="collapse in">
             <t t-foreach="activities" t-as="activity">
                 <div class="o_thread_message" style="margin-bottom: 10px">
                     <div class="o_thread_message_sidebar">
                         <div class="o_avatar_stack">
-                            <img t-attf-src="/web/image#{activity.user_id[0] >= 0 ? ('/res.users/' + activity.user_id[0] + '/image_small') : ''}" class="o_thread_message_avatar img-circle mb8" t-att-title="activity.user_id[1]"/>
+                            <img t-attf-src="/web/image#{activity.user_id[0] >= 0 ? ('/res.users/' + activity.user_id[0] + '/image_small') : ''}" class="o_thread_message_avatar img-circle mb8" t-att-title="activity.user_id[1]" t-att-alt="activity.user_id[1]"/>
                             <i t-att-class="'o_avatar_icon fa ' + activity.icon + ' bg-' + (activity.state == 'planned'? 'success' : (activity.state == 'today'? 'warning' : 'danger')) + '-full'"
                                t-att-title="activity.activity_type_id[1]"/>
                         </div>
@@ -30,7 +30,7 @@
                             <em> for </em>
                             <t t-esc="activity.user_id[1]" />
                             <a class="btn btn-link btn-info text-muted collapsed o_activity_info ml4" role="button" data-toggle="collapse" t-attf-data-target="#o_chatter_activity_info_#{activity.id}">
-                                <i class="fa fa-info-circle"></i>
+                                <i class="fa fa-info-circle" role="img" aria-label="Info" title="Info"></i>
                             </a>
                             <div class="o_thread_message_collapse collapse" t-attf-id="o_chatter_activity_info_#{activity.id}">
                                 <dl class="dl-horizontal well">
@@ -44,7 +44,7 @@
                                     </dd>
                                     <dt>Assigned to</dt>
                                     <dd class="mb8">
-                                        <img t-attf-src="/web/image#{activity.user_id[0] >= 0 ? ('/res.users/' + activity.user_id[0] + '/image_small') : ''}" height="18" width="18" class="img-circle mr4" t-att-title="activity.user_id[1]"/>
+                                        <img t-attf-src="/web/image#{activity.user_id[0] >= 0 ? ('/res.users/' + activity.user_id[0] + '/image_small') : ''}" height="18" width="18" class="img-circle mr4" t-att-title="activity.user_id[1]" t-att-alt="activity.user_id[1]"/>
                                         <b><t t-esc="activity.user_id[1]"/></b>
                                         <em>, due on </em><span t-attf-class="o_activity_color_#{activity.state}"><t t-esc="activity.date_deadline.format(date_format)"/></span>
                                     </dd>
@@ -55,14 +55,14 @@
                             <t t-raw="activity.note"/>
                         </div>
                         <div class="o_thread_message_tools btn-group">
-                            <a href="#" class="btn btn-link btn-success text-muted btn-sm o_activity_done o_activity_link mr8" t-att-data-activity-id="activity.id" t-att-data-previous-activity-type-id="activity.activity_type_id[0]" data-toggle="popover">
-                                <i class="fa fa-check"/> Mark Done
+                            <a role="button" href="#" class="btn btn-link btn-success text-muted btn-sm o_activity_done o_activity_link mr8" t-att-data-activity-id="activity.id" t-att-data-previous-activity-type-id="activity.activity_type_id[0]" data-toggle="popover">
+                                <span class="fa fa-check">Mark Done</span>
                             </a>
-                            <a href="#" class="btn btn-link btn-default text-muted btn-sm o_activity_edit o_activity_link" t-att-data-activity-id="activity.id">
-                                <i class="fa fa-pencil"/> Edit
+                            <a role="button" href="#" class="btn btn-link btn-default text-muted btn-sm o_activity_edit o_activity_link" t-att-data-activity-id="activity.id">
+                                <span class="fa fa-pencil">Edit</span>
                             </a>
-                            <a href="#" class="btn btn-link btn-sm btn-danger text-muted o_activity_unlink o_activity_link" t-att-data-activity-id="activity.id">
-                                <i class="fa fa-times"/> Cancel
+                            <a role="button" href="#" class="btn btn-link btn-sm btn-danger text-muted o_activity_unlink o_activity_link" t-att-data-activity-id="activity.id">
+                                <span class="fa fa-times">Cancel</span>
                             </a>
                         </div>
                     </div>
diff --git a/addons/mail/static/src/xml/chat_window.xml b/addons/mail/static/src/xml/chat_window.xml
index f1138db71d5c6a99e646fb527a6c96a529bcebc0..7d0fce19ee69749d4e4ec895aa3628390841c402 100644
--- a/addons/mail/static/src/xml/chat_window.xml
+++ b/addons/mail/static/src/xml/chat_window.xml
@@ -20,15 +20,15 @@
 
     <t t-name="mail.ChatWindowsDropdown">
         <div t-attf-class="o_chat_window o_in_home_menu o_chat_window_dropdown dropup #{open ? 'open' : ''}">
-            <span class="o_chat_window_dropdown_toggler dropdown-toggle" data-toggle="dropdown">
-                <i class="fa fa-comments-o"/> <t t-esc="sessions.length"/>
+            <span role="alert" class="o_chat_window_dropdown_toggler dropdown-toggle" data-toggle="dropdown" title="Unread messages">
+                <i class="fa fa-comments-o" role="img" aria-label="Messages"/> <t t-esc="sessions.length"/>
                 <span class="o_total_unread_counter">
                     <t t-if="unread_counter"><t t-esc="unread_counter"/></t>
                 </span>
             </span>
-            <ul class="dropdown-menu">
+            <ul class="dropdown-menu" role="menu">
                 <t t-foreach="sessions" t-as="session">
-                    <li class="o_chat_header" t-att-data-session-id="session.id">
+                    <li role="menuitem" class="o_chat_header" t-att-data-session-id="session.id">
                         <t t-call="mail.ChatWindowHeaderContent">
                             <t t-set="status" t-value="session.window.status"/>
                             <t t-set="title" t-value="session.window.title"/>
@@ -42,7 +42,7 @@
 
     <t t-name="mail.ChatWindowHeaderContent">
         <span t-if="widget.isMobile">
-            <a href="#" class="o_chat_window_close fa fa-1x fa-arrow-left mr4"/>
+            <a href="#" class="o_chat_window_close fa fa-1x fa-arrow-left mr4" aria-label="Close chat window" title="Close chat window"/>
         </span>
         <span class="o_chat_title">
             <t t-if="status" t-call="mail.chat.UserStatus"/>
@@ -50,7 +50,7 @@
             <span t-if="unread_counter"> (<t t-esc="unread_counter"/>)</span>
         </span>
         <span t-if="!widget.isMobile" class="o_chat_window_buttons">
-            <a href="#" class="o_chat_window_close fa fa-close"/>
+            <a href="#" class="o_chat_window_close fa fa-close" aria-label="Close chat window" title="Close chat window"/>
         </span>
     </t>
 
diff --git a/addons/mail/static/src/xml/chatter.xml b/addons/mail/static/src/xml/chatter.xml
index 70f98258fc855aeaed311478d97a4155be6b1df6..e6cd3995bc76bdae6e5f8c22896b0050e63e8177 100644
--- a/addons/mail/static/src/xml/chatter.xml
+++ b/addons/mail/static/src/xml/chatter.xml
@@ -42,7 +42,7 @@
 
         <!-- Add a button to open the full composer dialog -->
         <t t-jquery=".o_composer_button_add_attachment" t-operation="after">
-            <button tabindex="6" class="btn btn-sm btn-icon fa fa-expand o_composer_button_full_composer" type="button"/>
+            <button tabindex="6" class="btn btn-sm btn-icon fa fa-expand o_composer_button_full_composer" type="button" title="Full composer" aria-label="Full composer"/>
         </t>
     </t>
 
@@ -57,7 +57,7 @@
             Log note
         </button>
         <button t-if="schedule_activity_btn" class="btn btn-sm btn-link o_chatter_button_schedule_activity" title="Log or schedule an activity" disabled="disabled">
-            <i class="fa fa-clock-o"/> <t t-if="isMobile">Activity</t><t t-else="">Schedule activity</t>
+            <i class="fa fa-clock-o" role="img" aria-label="Dates" title="Dates"/> <t t-if="isMobile">Activity</t><t t-else="">Schedule activity</t>
         </button>
     </t>
 
@@ -65,9 +65,9 @@
         Chatter main div
     -->
     <t t-name="mail.Chatter">
-        <div class="o_chatter">
+        <aside class="o_chatter">
             <div class="o_chatter_topbar"/>
-        </div>
+        </aside>
     </t>
 
 </templates>
diff --git a/addons/mail/static/src/xml/composer.xml b/addons/mail/static/src/xml/composer.xml
index d09b6bc4f2295eadd1ccb20e117a0a620f3c4de9..752b9febdf9676de4cdd8ae0538342b0175f5483 100644
--- a/addons/mail/static/src/xml/composer.xml
+++ b/addons/mail/static/src/xml/composer.xml
@@ -3,7 +3,7 @@
 
      <div t-name="mail.ChatComposer" t-attf-class="o_chat_composer #{widget.extended ? 'o_chat_composer_extended' : (widget.notInline ? '' : 'o_chat_inline_composer')} #{widget.isMini ? 'o_chat_mini_composer' : ''}">
          <div class="o_composer_container">
-             <img t-if="widget.avatarURL" height="36" width="36" class="o_thread_message_sidebar o_chatter_avatar img-circle" t-att-src="widget.avatarURL"/>
+             <img t-if="widget.avatarURL" height="36" width="36" class="o_thread_message_sidebar o_chatter_avatar img-circle" t-att-src="widget.avatarURL" alt="Avatar"/>
              <div t-if="widget.extended" class="o_composer_subject">
                  <input tabindex="1" type="text" placeholder="Subject" class="o_input"/>
              </div>
@@ -11,9 +11,9 @@
                 <div class="o_composer_input">
                     <textarea class="o_input o_composer_text_field" tabindex="2" placeholder="Write something..."/>
                     <div class="o_chatter_composer_tools">
-                        <button tabindex="4" class="btn btn-sm btn-icon fa fa-smile-o o_composer_button_emoji" type="button" data-toggle="popover"/>
-                        <button tabindex="5" class="btn btn-sm btn-icon fa fa-paperclip o_composer_button_add_attachment" type="button"/>
-                        <button t-if="widget.options.isMobile" tabindex="3" class="btn btn-sm btn-icon fa fa-paper-plane-o o_composer_button_send" type="button"/>
+                        <button tabindex="4" class="btn btn-sm btn-icon fa fa-smile-o o_composer_button_emoji" type="button" data-toggle="popover" title="Emojis" aria-label="Emojis"/>
+                        <button tabindex="5" class="btn btn-sm btn-icon fa fa-paperclip o_composer_button_add_attachment" type="button" aria-label="Add attachment" title="Add attachment"/>
+                        <button t-if="widget.options.isMobile" tabindex="3" class="btn btn-sm btn-icon fa fa-paper-plane-o o_composer_button_send" type="button" title="Send" aria-label="Send"/>
                     </div>
                 </div>
              </div>
@@ -36,18 +36,18 @@
 
     <div t-name="mail.ChatComposer.emojis" class="o_mail_emoji_container">
         <t t-foreach="emojis" t-as="emoji">
-            <button t-att-data-emoji="emoji.source" class="btn btn-link o_mail_emoji" t-att-title="emoji.description">
+            <button t-att-data-emoji="emoji.source" class="btn btn-link o_mail_emoji" t-att-title="emoji.description" t-att-aria-label="emoji.description">
                 <t t-raw="emoji.unicode_source"/>
             </button>
         </t>
     </div>
 
     <t t-name="mail.AbstractMentionSuggestions">
-        <ul class="dropdown-menu" aria-labelledby="dropdownMailMentionMenu">
+        <ul class="dropdown-menu" role="menu">
             <t t-foreach="suggestions" t-as="suggestion">
-                <li t-if="suggestion.divider" class="divider"/>
+                <li role="separator" t-if="suggestion.divider" class="divider"/>
                 <li t-if="!suggestion.divider" class="o_mention_proposition" t-att-data-id="suggestion.id">
-                    <a href="#"/>
+                    <a role="menuitem" href="#"/>
                 </li>
             </t>
         </ul>
@@ -79,15 +79,15 @@
     </t>
 
     <t t-name="FieldMany2ManyTagsEmail" t-extend="FieldMany2ManyTag">
-        <t t-jquery="span[t-attf-class*=badge]" t-operation="replace">
+        <t t-jquery="button[t-attf-class*=badge]" t-operation="replace">
             <t t-set="email_error" t-value="''"/>
             <t t-if="el.email.indexOf('@') &lt; 0">
                 <t t-set="email_error" t-value="'o_tag_error'"/>
             </t>
-            <span t-attf-class="badge dropdown o_tag_color_0 #{email_error}" t-att-data-color="color" t-att-data-index="el_index" t-att-data-id="el.id">
+            <button t-attf-class="badge dropdown o_tag_color_0 #{email_error}" t-att-data-color="color" t-att-data-index="el_index" t-att-data-id="el.id">
                 <span class="o_badge_text" t-attf-title="#{el.email}"><t t-esc="el.display_name"/></span>
-                <span t-if="!readonly" class="fa fa-times o_delete"/>
-            </span>
+                <span t-if="!readonly" class="fa fa-times o_delete" role="img" aria-label="Delete" title="Delete"/>
+            </button>
         </t>
     </t>
 </templates>
diff --git a/addons/mail/static/src/xml/discuss.xml b/addons/mail/static/src/xml/discuss.xml
index 1eda1dfec1bd88a4ca59b8d529e99940223d8dc9..7901a870ea3e5c0f1382f861dc0f7be776836f94 100644
--- a/addons/mail/static/src/xml/discuss.xml
+++ b/addons/mail/static/src/xml/discuss.xml
@@ -9,7 +9,7 @@
                 <t t-if="widget.notification_bar">
                     <div class="o_mail_annoying_notification_bar">
                         <span class="o_mail_request_permission">Odoo needs your permission to <a href="#"> enable desktop notifications</a>.</span>
-                        <span class="fa fa-close"></span>
+                        <span class="fa fa-close" role="button" aria-label="Close" title="Close"></span>
                     </div>
                 </t>
             </div>
@@ -19,13 +19,13 @@
         <div class="o_mail_chat_sidebar">
             <div t-attf-class="o_mail_chat_title_main o_mail_chat_channel_item #{(active_channel_id === 'channel_inbox') ? 'o_active': ''}"
                  data-channel-id="channel_inbox">
-                <span class="o_channel_name"><i class="fa fa-inbox mr8"/>Inbox</span>
+                <span class="o_channel_name fa fa-inbox mr8">Inbox</span>
                 <t t-set="counter" t-value="needaction_counter"/>
                 <t t-call="mail.chat.SidebarNeedaction"/>
             </div>
             <div t-attf-class="o_mail_chat_title_main o_mail_chat_title_starred o_mail_chat_channel_item #{(active_channel_id === 'channel_starred') ? 'o_active': ''}"
                  data-channel-id="channel_starred">
-                <span class="o_channel_name"><i class="fa fa-star-o mr8"/>Starred</span>
+                <span class="o_channel_name fa fa-star-o mr8">Starred</span>
                 <t t-set="counter" t-value="starred_counter"/>
                 <t t-call="mail.chat.SidebarNeedaction"/>
             </div>
@@ -87,10 +87,10 @@
         <t t-if="!disable_add_channel || !empty">
             <div class="o_mail_sidebar_title">
                 <h4 t-att-class="channel_type == 'public' ? 'o_mail_open_channels' : ''">
-                    <i t-if="channel_icon" t-attf-class="mr4 fa-fw fa #{channel_icon}"></i>
+                    <i t-if="channel_icon" t-attf-class="mr4 fa-fw fa #{channel_icon}" role="img" aria-label="Channel" title="Channel"></i>
                     <b><t t-esc="channel_title"/></b>
                 </h4>
-                <span t-if="!disable_add_channel" class="fa fa-plus o_add" title="Add" t-attf-data-type="#{channel_type}"/>
+                <span t-if="!disable_add_channel" class="fa fa-plus o_add" title="Add" t-attf-data-type="#{channel_type}" role="img" aria-label="Add"/>
             </div>
         </t>
     </t>
@@ -111,21 +111,21 @@
                     </span>
                     <span t-if="display_hash" class="o_mail_hash">#</span>
                     <t t-esc="channel.name"/>
-                    <i t-if="channel.mass_mailing" class="fa fa-envelope-o" title="Sends messages by email"/>
+                    <i t-if="channel.mass_mailing" class="fa fa-envelope-o" title="Sends messages by email" role="img" aria-label="Send by mail"/>
                 </span>
                 <span t-attf-class="fa fa-cog o_mail_channel_settings"
-                      title="Channel settings" t-att-data-channel-id="channel.id"/>
+                      title="Channel settings" role="img" aria-label="Channel settings" t-att-data-channel-id="channel.id"/>
                 <t t-call="mail.chat.SidebarNeedaction"/>
                 <span t-if="! channel.group_based_subscription" t-attf-class="fa fa-times o_mail_partner_unpin #{counter ? 'hide' : ''}"
-                      title="Leave this channel" t-att-data-channel-id="channel.id"/>
+                      title="Leave this channel" role="img" aria-label="Leave this channel" t-att-data-channel-id="channel.id"/>
             </div>
         </t>
     </t>
 
     <t t-name="mail.chat.UserStatus">
-        <i t-if="status == 'online'" class="o_mail_user_status o_user_online fa fa-circle" title="Online"/>
-        <i t-if="status == 'away'" class="o_mail_user_status o_user_idle fa fa-circle" title="Idle"/>
-        <i t-if="status == 'offline'" class="o_mail_user_status fa fa-circle-o" title="Offline"/>
+        <i t-if="status == 'online'" class="o_mail_user_status o_user_online fa fa-circle" title="Online" role="img" aria-label="User is online"/>
+        <i t-if="status == 'away'" class="o_mail_user_status o_user_idle fa fa-circle" title="Idle" role="img" aria-label="User is idle"/>
+        <i t-if="status == 'offline'" class="o_mail_user_status fa fa-circle-o" title="Offline" role="img" aria-label="User is offline"/>
     </t>
 
     <t t-name="mail.chat.MessageSentSnackbar">
@@ -174,20 +174,16 @@
             <div class="o_mail_chat_content"/>
             <div class="o_mail_mobile_tabs">
                 <div class="o_mail_mobile_tab" data-type="channel_inbox">
-                    <span class="fa fa-inbox"/>
-                    <span class="o_tab_title">Inbox</span>
+                    <span class="o_tab_title fa fa-inbox">Inbox</span>
                 </div>
                 <div class="o_mail_mobile_tab" data-type="dm">
-                    <span class="fa fa-user"/>
-                    <span class="o_tab_title">Chat</span>
+                    <span class="o_tab_title fa fa-user">Chat</span>
                 </div>
                 <div class="o_mail_mobile_tab" data-type="public">
-                    <span class="fa fa-users"/>
-                    <span class="o_tab_title">Channels</span>
+                    <span class="o_tab_title fa fa-users">Channels</span>
                 </div>
                 <div class="o_mail_mobile_tab" data-type="private">
-                    <span class="fa fa-eye-slash"/>
-                    <span class="o_tab_title">Private Channels</span>
+                    <span class="o_tab_title fa fa-eye-slash">Private Channels</span>
                 </div>
             </div>
         </div>
@@ -212,9 +208,9 @@
         <div t-attf-class="o_mail_channel_preview #{channel.unread_counter ? 'o_channel_unread' : ''}"
              t-att-data-channel_id="channel.id" t-att-data-res_id="channel.res_id" t-att-data-res_model="channel.model">
             <div t-attf-class="o_mail_channel_image #{channel.model? 'o_mail_channel_app' : ''}">
-                <img class="o_mail_channel_image" t-att-src="channel.image_src"/>
-                <i t-if="channel.status === 'online'" class="o_mail_user_status o_user_online fa fa-circle" title="Online"/>
-                <i t-if="channel.status === 'away'" class="o_mail_user_status o_user_idle fa fa-circle" title="Idle"/>
+                <img class="o_mail_channel_image" t-att-src="channel.image_src" alt="Channel"/>
+                <i t-if="channel.status === 'online'" class="o_mail_user_status o_user_online fa fa-circle" title="Online" role="img" aria-label="User is online"/>
+                <i t-if="channel.status === 'away'" class="o_mail_user_status o_user_idle fa fa-circle" title="Idle" role="img" aria-label="User is idle"/>
             </div>
             <div class="o_channel_info">
                 <div class="o_channel_title">
@@ -228,7 +224,7 @@
                 </div>
                 <div t-if="channel.last_message" class="o_last_message_preview">
                     <t t-if="channel.last_message.is_author">
-                        <span class="fa fa-mail-reply"/> You:
+                        <span class="fa fa-mail-reply" role="img" aria-label="Reply"/> You:
                     </t>
                     <t t-else="">
                         <t t-if="channel.last_message.displayed_author">
diff --git a/addons/mail/static/src/xml/extended_chat_window.xml b/addons/mail/static/src/xml/extended_chat_window.xml
index 3e183d99bd2cfd31bc559039097315bbd3fc741e..c5188feadfa436c493817e86458bcf2e9ac91f0e 100644
--- a/addons/mail/static/src/xml/extended_chat_window.xml
+++ b/addons/mail/static/src/xml/extended_chat_window.xml
@@ -12,7 +12,7 @@
 
     <t t-extend="mail.ChatWindowHeaderContent">
         <t t-jquery=".o_chat_window_buttons" t-operation="prepend">
-            <a href="#" class="o_chat_window_expand fa fa-expand" title="Open in Discuss"/>
+            <a href="#" class="o_chat_window_expand fa fa-expand" title="Open in Discuss" aria-label="Open in discuss"/>
         </t>
     </t>
 
diff --git a/addons/mail/static/src/xml/followers.xml b/addons/mail/static/src/xml/followers.xml
index d50d334cb4feb85f03264ac8af58faac4c34e77f..89df5c48b2cf7979202dc948220855033ac23e8d 100644
--- a/addons/mail/static/src/xml/followers.xml
+++ b/addons/mail/static/src/xml/followers.xml
@@ -7,9 +7,9 @@
     <t t-name="mail.Followers">
         <div class="o_followers">
             <div class="o_followers_title_box">
-                <button class="btn btn-sm btn-link dropdown-toggle"
+                <button class="btn btn-sm btn-link dropdown-toggle" title="Dropdown menu - Followers"
                         data-toggle="dropdown" aria-expanded="false">
-                    <i class="fa fa-user"></i>
+                    <i class="fa fa-user" role="img" aria-label="Dropdown menu - Followers"></i>
                     <span class="o_followers_count"/>
                 </button>
                 <ul class="dropdown-menu o_followers_list" role="menu"></ul>
@@ -18,12 +18,10 @@
                 <div class="btn-group btn-group-sm o_subtypes_list">
                     <button class="btn btn-sm btn-link o_followers_follow_button o_followers_notfollow">
                         <span class="o_follow">Follow</span>
-                        <span class="fa fa-times o_followers_unfollow"/>
-                        <span class="o_followers_unfollow"> Unfollow</span>
-                        <span class="fa fa-check o_followers_following"/>
-                        <span class="o_followers_following"> Following</span>
+                        <span class="fa fa-times o_followers_unfollow"> Unfollow</span>
+                        <span class="fa fa-check o_followers_following"> Following</span>
                     </button><button class="btn btn-sm btn-link dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
-                        <span class="fa fa-bell"/>
+                        <span class="fa fa-bell" role="img" aria-label="Alarm menu" title="Alarm menu"/>
                     </button>
                     <ul class="dropdown-menu" role="menu"/>
                 </div>
@@ -35,8 +33,8 @@
         Partner or channel following the record
     -->
     <t t-name="mail.Followers.partner">
-        <li class='o_partner'>
-            <img t-att-src="record.avatar_url"/>
+        <li role="menuitem" class='o_partner'>
+            <img t-att-src="record.avatar_url" alt="Avatar"/>
             <a class="o_mail_redirect"
                href="#"
                t-att-title="record.name"
@@ -44,10 +42,12 @@
                t-att-data-oe-id="record.res_id"><t t-esc="record.name"/></a>
             <i t-if="record.is_editable" class="fa fa-pencil o_edit_subtype hide"
                title="Edit subscription"
+               aria-label="Edit subscription" role="img"
                t-att-data-follower-id="record.id"
                t-att-data-oe-id="record.res_id"
                t-att-data-oe-model="record.res_model"/>
             <i t-if="widget.isEditable" class="fa fa-remove o_remove_follower"
+               aria-label="Remove this follower" role="img"
                title="Remove this follower"/>
         </li>
     </t>
@@ -57,13 +57,13 @@
     -->
     <t t-name="mail.Followers.add_more">
         <t t-if="widget.isEditable">
-            <li class="o_add_follower">
+            <li role="menuitem" class="o_add_follower">
                 <a href="#"> Add Followers </a>
             </li>
-            <li class="o_add_follower_channel">
+            <li role="menuitem" class="o_add_follower_channel">
                 <a href="#"> Add Channels </a>
             </li>
-            <li t-if="widget.followers.length > 0" class="divider"/>
+            <li role="separator" t-if="widget.followers.length > 0" class="divider"/>
         </t>
     </t>
 
@@ -71,7 +71,7 @@
         Message subtypes of a follower subscription
     -->
     <t t-name="mail.Followers.subtype">
-        <li class="o_subtype">
+        <li role="menuitem" class="o_subtype">
             <div class="o_checkbox">
                 <input type="checkbox" t-att-checked="record.followed"
                        t-att-id="'input_mail_followers_subtype_'+record.id+(dialog ? '_in_dialog': '')"
@@ -81,12 +81,12 @@
             <span t-att-for="'input_mail_followers_subtype_'+record.id+(dialog ? '_in_dialog': '')">
                 <t t-esc="record.name"/>
             </span>
-            <i t-if="display_warning" class="fa fa-warning text-warning"/>
+            <i t-if="display_warning" class="fa fa-warning text-warning" role="img" aria-label="Warning" title="Warning"/>
         </li>
     </t>
     <t t-name="mail.Followers.subtypes.warning">
-        <span class="text-warning">
-            <i class="fa fa-warning"/> Be careful with channels following internal notifications
+        <span class="text-warning" role="alert">
+            <span class="fa fa-warning"> Be careful with channels following internal notifications</span>
         </span>
     </t>
 
diff --git a/addons/mail/static/src/xml/systray.xml b/addons/mail/static/src/xml/systray.xml
index a6e52ab555a88a5ba35c878f6375b4ae21e0c593..6350e07d2da4355ce0a8bab5a5afa2d09c2cb63b 100644
--- a/addons/mail/static/src/xml/systray.xml
+++ b/addons/mail/static/src/xml/systray.xml
@@ -4,15 +4,15 @@
     <t t-name="mail.chat.MessagingMenu">
         <li class="o_mail_navbar_item">
             <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" title="Conversations" href="#">
-                <i class="fa fa-comments"/> <span class="o_notification_counter badge"/>
+                <i class="fa fa-comments" role="img" aria-label="Messages"/> <span class="o_notification_counter badge"/>
             </a>
             <ul class="o_mail_navbar_dropdown dropdown-menu" role="menu">
-                <li t-if="widget.isMobile">
+                <li role="menuitem" t-if="widget.isMobile">
                     <div class="o_mail_navbar_mobile_header">
                         <button type="button" class="btn btn-default btn-sm o_new_message"> New message </button>
                     </div>
                 </li>
-                <li t-if="!widget.isMobile" class="o_mail_navbar_dropdown_top">
+                <li role="menuitem" t-if="!widget.isMobile" class="o_mail_navbar_dropdown_top">
                     <div>
                         <button type="button" class="btn btn-sm btn-link o_filter_button active"> All </button>
                         <button type="button" class="btn btn-sm btn-link o_filter_button" data-filter='chat'> Chat </button>
@@ -20,20 +20,17 @@
                     </div>
                     <button type="button" class="btn btn-sm btn-link o_new_message"> New message </button>
                 </li>
-                <li class="o_mail_navbar_dropdown_channels"/>
-                <li t-if="widget.isMobile">
+                <li role="menuitem" class="o_mail_navbar_dropdown_channels"/>
+                <li role="menuitem" t-if="widget.isMobile">
                     <div class="o_mail_mobile_tabs">
                         <div class="o_mail_mobile_tab o_filter_button active">
-                            <span class="fa fa-envelope"/>
-                            <span class="o_tab_title">All</span>
+                            <span class="o_tab_title fa fa-envelope">All</span>
                         </div>
                         <div class="o_mail_mobile_tab o_filter_button" data-filter='chat'>
-                            <span class="fa fa-user"/>
-                            <span class="o_tab_title">Chat</span>
+                            <span class="o_tab_title fa fa-user">Chat</span>
                         </div>
                         <div class="o_mail_mobile_tab o_filter_button" data-filter='channels'>
-                            <span class="fa fa-users"/>
-                            <span class="o_tab_title">Channels</span>
+                            <span class="o_tab_title fa fa-users">Channels</span>
                         </div>
                     </div>
                 </li>
@@ -61,7 +58,7 @@
         <t t-foreach="activities" t-as="activity">
             <div class="o_mail_channel_preview" t-att-data-res_model="activity.model" t-att-data-model_name="activity.name" data-filter='my'>
                 <div class="o_mail_channel_image o_mail_channel_app">
-                    <img t-att-src="activity.icon"/>
+                    <img t-att-src="activity.icon" alt="Activity"/>
                 </div>
                 <div class="o_channel_info">
                     <div class="o_channel_title">
@@ -85,10 +82,10 @@
     <t t-name="mail.chat.ActivityMenu">
         <li class="o_mail_navbar_item">
             <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" title="Activities" href="#">
-                <i class="fa fa-clock-o"/> <span class="o_notification_counter badge"/>
+                <i class="fa fa-clock-o" role="img" aria-label="Activities"/> <span class="o_notification_counter badge"/>
             </a>
             <ul class="o_mail_navbar_dropdown dropdown-menu" role="menu">
-                <li class="o_mail_navbar_dropdown_channels"/>
+                <li role="menuitem" class="o_mail_navbar_dropdown_channels"/>
             </ul>
         </li>
     </t>
diff --git a/addons/mail/static/src/xml/thread.xml b/addons/mail/static/src/xml/thread.xml
index ca8ae9b8319a1c9e69020b626189da2534005e48..60779ea656365fbded7f65d5ed8a400e198fea5a 100644
--- a/addons/mail/static/src/xml/thread.xml
+++ b/addons/mail/static/src/xml/thread.xml
@@ -23,20 +23,20 @@
         <div class="o_viewer_content">
             <div class="o_viewer-header">
                 <span class="o_image_caption">
-                    <i class="fa fa-picture-o mr8" t-if="widget.activeAttachment.type == 'image'"/>
-                    <i class="fa fa-file-text mr8" t-if="widget.activeAttachment.type == 'application/pdf'"/>
-                    <i class="fa fa-video-camera mr8" t-if="widget.activeAttachment.type == 'video'"/>
+                    <i class="fa fa-picture-o mr8" t-if="widget.activeAttachment.type == 'image'" role="img" aria-label="Image" title="Image"/>
+                    <i class="fa fa-file-text mr8" t-if="widget.activeAttachment.type == 'application/pdf'" role="img" aria-label="PDF file" title="PDF file"/>
+                    <i class="fa fa-video-camera mr8" t-if="widget.activeAttachment.type == 'video'" role="img" aria-label="Video" title="Video"/>
                     <t t-esc="widget.activeAttachment.name"/>
-                    <a href="#" class="o_download_btn ml8 small" data-toggle="tooltip" data-placement="right" title="Download"><i class="fa fa-fw fa-download"/></a>
+                    <a role="button" href="#" class="o_download_btn ml8 small" data-toggle="tooltip" data-placement="right" title="Download"><i class="fa fa-fw fa-download" role="img" aria-label="Download"/></a>
                 </span>
-                <a class="o_close_btn pull-right" href="#">×</a>
+                <a role="button" class="o_close_btn pull-right" href="#" aria-label="Close" title="Close">×</a>
             </div>
             <div class="o_viewer_img_wrapper">
                 <div class="o_viewer_zoomer">
                     <div t-if="widget.activeAttachment.type == 'image'" class="o_loading_img text-center">
-                        <i class="fa fa-circle-o-notch fa-spin text-gray-light fa-3x fa-fw" aria-hidden="true"/>
+                        <i class="fa fa-circle-o-notch fa-spin text-gray-light fa-3x fa-fw" role="img" aria-label="Loading" title="Loading"/>
                     </div>
-                    <img t-if="widget.activeAttachment.type == 'image'" class="o_viewer_img" t-attf-src="/web/image/#{widget.activeAttachment.id}?unique=1"/>
+                    <img t-if="widget.activeAttachment.type == 'image'" class="o_viewer_img" t-attf-src="/web/image/#{widget.activeAttachment.id}?unique=1" alt="Viewer"/>
                     <iframe class="mt32 o_viewer_pdf" t-if="widget.activeAttachment.type == 'application/pdf'" t-attf-src="/web/static/lib/pdfjs/web/viewer.html?file=/web/content/#{widget.activeAttachment.id}" />
                     <video t-if="widget.activeAttachment.type == 'video'" class="o_viewer_video" controls="controls">
                         <source t-attf-src="/web/image/#{widget.activeAttachment.id}" t-att-data-type="widget.activeAttachment.mimetype"/>
@@ -45,31 +45,31 @@
             </div>
             <div t-if="widget.activeAttachment.type == 'image'" class="o_viewer_toolbar btn-toolbar" role="toolbar">
                 <div class="btn-group ml0" role="group">
-                    <a href="#" class="o_viewer_toolbar_btn btn o_zoom_in" data-toggle="tooltip" title="Zoom In"><i class="fa fa-fw fa-plus"/></a>
-                    <a href="#" class="o_viewer_toolbar_btn btn o_zoom_reset disabled" data-toggle="tooltip" title="Reset Zoom"><i class="fa fa-fw fa-search"/></a>
-                    <a href="#" class="o_viewer_toolbar_btn btn o_zoom_out disabled" data-toggle="tooltip" title="Zoom Out"><i class="fa fa-fw fa-minus"/></a>
+                    <a role="button" href="#" class="o_viewer_toolbar_btn btn o_zoom_in" data-toggle="tooltip" title="Zoom In"><i class="fa fa-fw fa-plus" role="img" aria-label="Zoom In"/></a>
+                    <a role="button" href="#" class="o_viewer_toolbar_btn btn o_zoom_reset disabled" data-toggle="tooltip" title="Reset Zoom"><i class="fa fa-fw fa-search" role="img" aria-label="Reset Zoom"/></a>
+                    <a role="button" href="#" class="o_viewer_toolbar_btn btn o_zoom_out disabled" data-toggle="tooltip" title="Zoom Out"><i class="fa fa-fw fa-minus" role="img" aria-label="Zoom Out"/></a>
                 </div>
                 <div class="btn-group ml8" role="group">
-                    <a href="#" class="o_viewer_toolbar_btn btn o_rotate" data-toggle="tooltip" title="Rotate"><i class="fa fa-fw fa-repeat"/></a>
+                    <a role="button" href="#" class="o_viewer_toolbar_btn btn o_rotate" data-toggle="tooltip" title="Rotate"><i class="fa fa-fw fa-repeat" role="img" aria-label="Rotate"/></a>
                 </div>
                 <div class="btn-group ml8" role="group">
-                    <a href="#" class="o_viewer_toolbar_btn btn o_print_btn" data-toggle="tooltip" title="Print"><i class="fa fa-fw fa-print"/></a>
-                    <a href="#" class="o_viewer_toolbar_btn btn o_download_btn" data-toggle="tooltip" title="Download"><i class="fa fa-fw fa-download"/></a>
+                    <a role="button" href="#" class="o_viewer_toolbar_btn btn o_print_btn" data-toggle="tooltip" title="Print"><i class="fa fa-fw fa-print" role="img" aria-label="Print"/></a>
+                    <a role="button" href="#" class="o_viewer_toolbar_btn btn o_download_btn" data-toggle="tooltip" title="Download"><i class="fa fa-fw fa-download" role="img" aria-label="Download"/></a>
                 </div>
             </div>
         </div>
     </t>
 
     <t t-name="DocumentViewer">
-        <div class="modal o_modal_fullscreen" tabindex="-1" data-keyboard="false" role="dialog" aria-hidden="true">
+        <div class="modal o_modal_fullscreen" tabindex="-1" data-keyboard="false" role="dialog">
             <t t-call="DocumentViewer.Content"/>
 
             <t t-if="widget.attachment.length != 1">
                 <a class="arrow arrow-left move_previous" href="#">
-                    <span class="fa fa-chevron-left"/>
+                    <span class="fa fa-chevron-left" role="img" aria-label="Previous" title="Previous"/>
                 </a>
                 <a class="arrow arrow-right move_next" href="#">
-                    <span class="fa fa-chevron-right"/>
+                    <span class="fa fa-chevron-right" role="img" aria-label="Next" title="Next"/>
                 </a>
             </t>
         </div>
@@ -88,7 +88,7 @@
                 </script>
             </head>
             <body onload='onload_img()'>
-                <img t-att-src='src' />
+                <img t-att-src='src' alt=""/>
             </body>
         </html>
     </t>
@@ -129,6 +129,7 @@
             <div t-if="options.display_avatar" class="o_thread_message_sidebar">
                 <t t-if="!message.mailto and message.author_id[0]">
                     <img t-if="message.avatar_src and message.display_author"
+                        alt=""
                         t-att-src="message.avatar_src"
                         data-oe-model="res.partner"
                         t-att-data-oe-id="message.author_redirect ? message.author_id[0] : ''"
@@ -136,6 +137,7 @@
                 </t>
                 <t t-if="message.mailto || !message.author_id[0]">
                     <img t-if="message.avatar_src and message.display_author"
+                        alt=""
                         t-att-src="message.avatar_src"
                         class="o_thread_message_avatar img-circle"/>
                 </t>
@@ -144,7 +146,7 @@
                 </span>
                 <i t-if="!message.display_author and options.display_stars and message.message_type != 'notification'"
                     t-att-class="'fa o_thread_message_star o_thread_icon ' + (message.is_starred ? 'fa-star' : 'fa-star-o')"
-                    t-att-data-message-id="message.id" title="Mark as Todo"/>
+                    t-att-data-message-id="message.id" title="Mark as Todo" role="img" aria-label="Mark as todo"/>
             </div>
             <div class="o_thread_message_core">
                 <p t-if="message.display_author" class="o_mail_info text-muted">
@@ -183,11 +185,11 @@
                         <span class="o_thread_tooltip_content">
                             <t t-foreach="message.customer_email_data" t-as="customer">
                                 <span>
-                                    <t t-if="customer[2] === 'sent'"><i class='fa fa-check'/></t>
-                                    <t t-if="customer[2] === 'bounce'"><i class='fa fa-exclamation'/></t>
-                                    <t t-if="customer[2] === 'exception'"><i class='fa fa-exclamation'/></t>
-                                    <t t-if="customer[2] === 'ready'"><i class='fa fa-send-o'/></t>
-                                    <t t-if="customer[2] === 'canceled'"><i class='fa fa-trash-o'/></t>
+                                    <t t-if="customer[2] === 'sent'"><i class='fa fa-check' title="Sent" role="img" aria-label="Sent"/></t>
+                                    <t t-if="customer[2] === 'bounce'"><i class='fa fa-exclamation' title="Bounced" role="img" aria-label="Bounced"/></t>
+                                    <t t-if="customer[2] === 'exception'"><i class='fa fa-exclamation' title="Error" role="img" aria-label="Error"/></t>
+                                    <t t-if="customer[2] === 'ready'"><i class='fa fa-send-o' title="Ready" role="img" aria-label="Ready"/></t>
+                                    <t t-if="customer[2] === 'canceled'"><i class='fa fa-trash-o' title="Canceled" role="img" aria-label="Canceled"/></t>
                                     <t t-esc="customer[1]"/>
                                 </span>
                                 <br />
@@ -197,13 +199,13 @@
                     <span t-attf-class="o_thread_icons">
                         <i t-if="options.display_stars and !message.is_system_notification and !message.needsModeration"
                             t-att-class="'fa fa-lg o_thread_icon o_thread_message_star ' + (message.is_starred ? 'fa-star' : 'fa-star-o')"
-                            t-att-data-message-id="message.id" title="Mark as Todo"/>
+                            t-att-data-message-id="message.id" title="Mark as Todo" role="img" aria-label="Mark as Todo"/>
                        <i t-if="message.record_name &amp;&amp; message.model != 'mail.channel' &amp;&amp; options.display_reply_icon"
                            class="fa fa-reply o_thread_icon o_thread_message_reply"
-                           t-att-data-message-id="message.id" title="Reply"/>
+                           t-att-data-message-id="message.id" title="Reply" role="img" aria-label="Reply"/>
                         <i t-if="message.is_needaction &amp;&amp; options.display_needactions"
                            class="fa fa-check o_thread_icon o_thread_message_needaction"
-                           t-att-data-message-id="message.id" title="Mark as Read"/>
+                           t-att-data-message-id="message.id" title="Mark as Read" role="img" aria-label="Mark as Read"/>
 
                         <t t-if="message.needsModeration and message.model === 'mail.channel'">
                             <t t-if="message.isModerator">
@@ -279,7 +281,7 @@
                     <t t-esc="value.changed_field"/>:
                     <t t-if="value.old_value">
                         <span> <t t-esc="value.old_value || ((value.field_type !== 'boolean') and '')"/> </span>
-                        <span t-if="value.old_value != value.new_value" class="fa fa-long-arrow-right"/>
+                        <span t-if="value.old_value != value.new_value" class="fa fa-long-arrow-right" role="img" aria-label="Changed" title="Changed"/>
                     </t>
                     <span t-if="value.old_value != value.new_value">
                         <t t-esc="value.new_value || ((value.field_type !== 'boolean') and '')"/>
@@ -307,7 +309,7 @@
                     <div t-attf-class="o_image_overlay o_attachment_view"  t-att-data-id="attachment.id">
                         <span class="o_attachment_title text-white"><t t-esc="attachment.name"/></span>
                         <a class="o_attachment_download" t-att-href='attachment.url'>
-                            <i t-attf-class="fa fa-download text-white" t-att-title="'Download ' + attachment.name" aria-hidden="true"></i>
+                            <i t-attf-class="fa fa-download text-white" t-att-title="'Download ' + attachment.name" role="img" aria-label="Download"></i>
                         </a>
                     </div>
                 </div>
@@ -328,10 +330,10 @@
                          t-att-style="type == 'image' ? 'background-image:url(/web/image/' + attachment.id + '/38x38/?crop=true' : '' "
                          t-att-data-mimetype="attachment.mimetype">
                     </div>
-                    <a t-elif="!editable" t-att-href='attachment.url' t-att-title="'Download ' + attachment.name">
+                    <a t-elif="!editable" t-att-href='attachment.url' t-att-title="'Download ' + attachment.name" aria-label="Download">
                         <span class="o_image o_hover" t-att-data-mimetype="attachment.mimetype" t-att-data-ext="ext"/>
                     </a>
-                    <span t-else="" class="o_image" t-att-data-mimetype="attachment.mimetype" t-att-data-ext="ext"/>
+                    <span t-else="" class="o_image" t-att-data-mimetype="attachment.mimetype" t-att-data-ext="ext" role="img" aria-label="Document not downloadable"/>
                 </div>
 
                 <div class="caption">
@@ -347,10 +349,10 @@
                 <div t-if="!editable" class="caption small">
                     <b t-if="has_preview" class="ml4 small text-uppercase o_attachment_view" t-att-data-id="attachment.id"><t t-esc="ext"/></b>
                     <a t-else="" class="ml4 small text-uppercase" t-att-href="attachment.url" t-att-title="'Download ' + attachment.name"><b><t t-esc='ext'/></b></a>
-                    <a class="ml4 o_attachment_download pull-right" t-att-title="'Download ' + attachment.name" t-att-href='attachment.url'><i t-attf-class="fa fa-download"/></a>
+                    <a class="ml4 o_attachment_download pull-right" t-att-title="'Download ' + attachment.name" t-att-href='attachment.url'><i t-attf-class="fa fa-download" role="img" aria-label="Download"/></a>
                 </div>
-                <div t-if="editable" class="o_attachment_uploaded"><i class="text-success fa fa-check"/></div>
-                <div t-if="editable" class="o_attachment_delete" t-att-data-id="attachment.id"><span class="text-white">×</span></div>
+                <div t-if="editable" class="o_attachment_uploaded"><i class="text-success fa fa-check" role="img" aria-label="Uploaded" title="Uploaded"/></div>
+                <div t-if="editable" class="o_attachment_delete" t-att-data-id="attachment.id"><span class="text-white" role="img" aria-label="Delete" title="Delete">×</span></div>
             </div>
         </div>
     </t>
@@ -358,7 +360,7 @@
      <t t-name="mail.ChatThread.LoadMore">
         <div class="o_thread_show_more">
             <t t-if="options.loadMoreOnScroll">
-                <span><i class="fa fa-spinner fa-spin"/> Loading older messages... </span>
+                <span><i class="fa fa-spinner fa-spin" role="img" aria-label="Please wait" title="Please wait"/> Loading older messages... </span>
             </t>
             <t t-else="">
                 <button class="btn btn-sm btn-link">-------- Show older messages --------</button>
diff --git a/addons/mail/static/src/xml/web_kanban_activity.xml b/addons/mail/static/src/xml/web_kanban_activity.xml
index dff33f6465adb87fa693783ab6e4406b403aa456..b078e2807224c300e3982f82641c82eddab59cca 100644
--- a/addons/mail/static/src/xml/web_kanban_activity.xml
+++ b/addons/mail/static/src/xml/web_kanban_activity.xml
@@ -3,8 +3,8 @@
 
 <t t-name="mail.KanbanActivity">
     <div class="o_kanban_inline_block dropdown o_kanban_selection o_mail_activity">
-        <a class="dropdown-toggle o_activity_btn" data-toggle="dropdown">
-            <span class="fa fa-clock-o fa-lg fa-fw" t-att-title="widget.selection[widget.activity_state]"/>
+        <a role="button" class="dropdown-toggle o_activity_btn" data-toggle="dropdown">
+            <span class="fa fa-clock-o fa-lg fa-fw" t-att-title="widget.selection[widget.activity_state]" role="img" t-att-aria-label="widget.selection[widget.activity_state]"/>
         </a>
         <ul class="dropdown-menu o_activity" role="menu">
         </ul>
@@ -13,49 +13,49 @@
 
 <t t-name="mail.KanbanActivityLoading">
     <li class="text-center o_no_activity">
-        <span class="fa fa-spinner fa-spin fa-2x" />
+        <span class="fa fa-spinner fa-spin fa-2x" role="img" aria-label="Loading..." title="Loading..."/>
     </li>
 </t>
 
 <t t-name="mail.KanbanActivityDropdown">
-    <li t-if="_.isEmpty(records)" class="text-center o_no_activity">
+    <li role="menuitem" t-if="_.isEmpty(records)" class="text-center o_no_activity">
         <span>No activities planned.</span>
     </li>
-    <li t-if="!_.isEmpty(records)">
-        <ul class="nav o_activity_log">
+    <li t-if="!_.isEmpty(records)" aria-haspopup="true" role="menu">
+        <ul class="nav o_activity_log" role="menu">
             <t t-foreach="_.keys(records)" t-as="key">
                 <t t-set="logs" t-value="records[key]" />
-                <li class="o_activity_label">
+                <li role="menuitem" class="o_activity_label">
                     <strong t-attf-class="o_activity_color_#{key}">
                         <t t-esc="selection[key]" /> (<t t-esc="logs.length"/>)
                     </strong>
                 </li>
-                <li t-foreach="logs" t-as="log" t-att-data-activity-id="log.id" class="o_schedule_activity">
+                <li role="menuitem" t-foreach="logs" t-as="log" t-att-data-activity-id="log.id" class="o_schedule_activity">
                     <div class="o_activity_title pull-left">
-                        <span t-attf-class="fa #{log.icon} fa-fw" />
+                        <span t-attf-class="fa #{log.icon} fa-fw" role="img" aria-label="Log" title="Log"/>
                         <strong>
                             <t t-esc="log.title_action or log.activity_type_id[1]" />
                         </strong>
                         <div>
-                            <span class="fa fa-clock-o fa-fw" />
+                            <span class="fa fa-clock-o fa-fw" role="img" aria-label="Deadline" title="Deadline"/>
                             <span t-att-title="log.date_deadline"><t t-esc="log.label_delay" /></span>
                             <t t-if="log.user_id[0] != uid">
-                                <span class="ml4 fa fa-user" />
+                                <span class="ml4 fa fa-user" role="img" aria-label="User" title="User"/>
                                 <span><t t-esc="log.user_id[1]" /></span>
                             </t>
                         </div>
                     </div>
                     <div class="pull-right">
-                        <span class="o_mark_as_done o_activity_link o_activity_link_kanban fa fa-check-circle fa-2x mt4" t-att-data-activity-id="log.id" title="Mark as done" />
+                        <span class="o_mark_as_done o_activity_link o_activity_link_kanban fa fa-check-circle fa-2x mt4" t-att-data-activity-id="log.id" title="Mark as done" role="img" aria-label="Mark as done"/>
                     </div>
                 </li>
             </t>
         </ul>
     </li>
-    <li class="o_schedule_activity text-center">
-        <span class="btn btn-link btn-block">
-            <i class="fa fa-plus fa-fw" aria-hidden="true"></i><strong>Schedule an activity</strong>
-        </span>
+    <li role="menuitem" class="o_schedule_activity text-center">
+        <a role="button" class="btn btn-link btn-block">
+            <strong class="fa fa-plus fa-fw">Schedule an activity</strong>
+        </a>
     </li>
 </t>
 
diff --git a/addons/mail/static/tests/chatter_tests.js b/addons/mail/static/tests/chatter_tests.js
index 46de2e22d3f8154aea326f05503746df87d551a2..f42170c696e1793287a0ca244253b752735d29e4 100644
--- a/addons/mail/static/tests/chatter_tests.js
+++ b/addons/mail/static/tests/chatter_tests.js
@@ -690,7 +690,7 @@ QUnit.test('chatter: Attachment viewer', function (assert) {
     assert.strictEqual($('.o_modal_fullscreen img.o_viewer_img[data-src="/web/image/1?unique=1"]').length, 1,
         "Modal popup should open with first image src");
     //  click on next button
-    $('.modal .arrow.arrow-right.move_next span').click();
+    $('[role="dialog"] .arrow.arrow-right.move_next span').click();
     assert.strictEqual($('.o_modal_fullscreen img.o_viewer_img[data-src="/web/image/2?unique=1"]').length, 1,
         "Modal popup should have now second image src");
     assert.strictEqual($('.o_modal_fullscreen .o_viewer_toolbar .o_download_btn').length, 1,
@@ -1172,8 +1172,8 @@ QUnit.test('followers widget: follow/unfollow, edit subtypes', function (assert)
 
     // click to unfollow
     form.$('.o_followers_follow_button').click(); // click to open the dropdown
-    assert.ok($('.modal').length, 'a confirm modal should be opened');
-    $('.modal .modal-footer .btn-primary').click(); // click on 'OK'
+    assert.ok($('[role="dialog"]').length, 'a confirm modal should be opened');
+    $('footer.modal-footer .btn-primary').click(); // click on 'OK'
     assert.strictEqual(form.$('.o_followers_count').text(), "0", 'should have no followers');
     assert.ok(form.$('.o_followers_follow_button.o_followers_notfollow').length,
         'should display the "Follow" button');
@@ -1366,9 +1366,9 @@ QUnit.test('fieldmany2many tags email', function (assert) {
     }).then(function (form) {
         // should read it 3 times (1 with the form view, one with the form dialog and one after save)
         assert.verifySteps([[12, 14], [14], [14]]);
-        assert.strictEqual(form.$('.o_field_many2manytags[name="timmy"] span.o_tag_color_0').length, 2,
+        assert.strictEqual(form.$('.o_field_many2manytags[name="timmy"] button.o_tag_color_0').length, 2,
             "two tags should be present");
-        var firstTag = form.$('.o_field_many2manytags[name="timmy"] span.o_tag_color_0').first();
+        var firstTag = form.$('.o_field_many2manytags[name="timmy"] button.o_tag_color_0').first();
         assert.strictEqual(firstTag.find('.o_badge_text').text(), "gold",
             "tag should only show display_name");
         assert.strictEqual(firstTag.find('.o_badge_text').attr('title'), "coucou@petite.perruche",
@@ -1377,16 +1377,16 @@ QUnit.test('fieldmany2many tags email', function (assert) {
         done();
     });
 
-    assert.strictEqual($('.modal-body.o_act_window').length, 1,
+    assert.strictEqual($('main.modal-body.o_act_window').length, 1,
         "there should be one modal opened to edit the empty email");
-    assert.strictEqual($('.modal-body.o_act_window input[name="display_name"]').val(), "silver",
+    assert.strictEqual($('main.modal-body input[name="display_name"]').val(), "silver",
         "the opened modal should be a form view dialog with the partner_type 14");
-    assert.strictEqual($('.modal-body.o_act_window input[name="email"]').length, 1,
+    assert.strictEqual($('main.modal-body input[name="email"]').length, 1,
         "there should be an email field in the modal");
 
     // set the email and save the modal (will render the form view)
-    $('.modal-body.o_act_window input[name="email"]').val('coucou@petite.perruche').trigger('input');
-    $('.modal-footer .btn-primary').click();
+    $('main.modal-body input[name="email"]').val('coucou@petite.perruche').trigger('input');
+    $('footer.modal-footer .btn-primary').click();
 });
 
 QUnit.test('fieldmany2many tags email (edition)', function (assert) {
@@ -1421,7 +1421,7 @@ QUnit.test('fieldmany2many tags email (edition)', function (assert) {
     });
 
     assert.verifySteps([[12]]);
-    assert.strictEqual(form.$('.o_field_many2manytags[name="timmy"] span.o_tag_color_0').length, 1,
+    assert.strictEqual(form.$('.o_field_many2manytags[name="timmy"] button.o_tag_color_0').length, 1,
         "should contain one tag");
 
     // add an other existing tag
@@ -1429,18 +1429,18 @@ QUnit.test('fieldmany2many tags email (edition)', function (assert) {
     $input.click(); // opens the dropdown
     $input.autocomplete('widget').find('li:first').click(); // add 'silver'
 
-    assert.strictEqual($('.modal-body.o_act_window').length, 1,
+    assert.strictEqual($('main.modal-body.o_act_window').length, 1,
         "there should be one modal opened to edit the empty email");
-    assert.strictEqual($('.modal-body.o_act_window input[name="display_name"]').val(), "silver",
-        "the opened modal should be a form view dialog with the partner_type 14");
-    assert.strictEqual($('.modal-body.o_act_window input[name="email"]').length, 1,
+    assert.strictEqual($('main.modal-body input[name="display_name"]').val(), "silver",
+        "the opened modal in edit mode should be a form view dialog with the partner_type 14");
+    assert.strictEqual($('main.modal-body input[name="email"]').length, 1,
         "there should be an email field in the modal");
 
     // set the email and save the modal (will rerender the form view)
-    $('.modal-body.o_act_window input[name="email"]').val('coucou@petite.perruche').trigger('input');
-    $('.modal-footer .btn-primary').click();
+    $('main.modal-body input[name="email"]').val('coucou@petite.perruche').trigger('input');
+    $('footer.modal-footer .btn-primary').click();
 
-    assert.strictEqual(form.$('.o_field_many2manytags[name="timmy"] span.o_tag_color_0').length, 2,
+    assert.strictEqual(form.$('.o_field_many2manytags[name="timmy"] button.o_tag_color_0').length, 2,
         "should contain the second tag");
     // should have read [14] three times: when opening the dropdown, when opening the modal, and
     // after the save
diff --git a/addons/mail/static/tests/discuss_moderation_tests.js b/addons/mail/static/tests/discuss_moderation_tests.js
index da8e8b1c68db45be438ba3de1ca432b22dc6428e..97ea5cb3c1db55b51219f5c93033114012d0b84f 100644
--- a/addons/mail/static/tests/discuss_moderation_tests.js
+++ b/addons/mail/static/tests/discuss_moderation_tests.js
@@ -551,7 +551,7 @@ QUnit.test('moderator: discard pending moderation message (reject without explan
         // check discard dialog prompt
         assert.strictEqual($('.modal-dialog').length, 1,
             "a dialog should be prompt to the moderator on click discard");
-        assert.strictEqual($('.modal-body').text(),
+        assert.strictEqual($('.modal-body:first').text(),
             "You are going to discard 1 message. Do you confirm the action?",
             "should warn the user on discard action");
         assert.strictEqual($('.modal-footer button').length, 2,
diff --git a/addons/mail/views/mail_channel_views.xml b/addons/mail/views/mail_channel_views.xml
index 24115dde2fb7ff3495749ae25d4f38a6c2d7ac38..dde3d288b65fea4fbb3e4ec099b79c66f6859f97 100644
--- a/addons/mail/views/mail_channel_views.xml
+++ b/addons/mail/views/mail_channel_views.xml
@@ -61,7 +61,7 @@
                         </t>
                         <t t-name="kanban-box">
                             <div class="oe_module_vignette oe_kanban_global_click">
-                                <img t-att-src="kanban_image('mail.channel', 'image_medium', record.id.raw_value)" class="oe_module_icon"/>
+                                <img t-att-src="kanban_image('mail.channel', 'image_medium', record.id.raw_value)" class="oe_module_icon" alt="Channel"/>
                                 <div class="oe_module_desc">
                                     <h4 class="o_kanban_record_title">#<field name="name"/></h4>
                                     <p class="oe_module_name">
@@ -109,7 +109,7 @@
                             <field name="description" placeholder="Topics discussed in this group..."/>
                         </group>
                         <group name="group_alias" attrs="{'invisible': [('alias_domain', '=', False)]}">
-                            <label for="alias_id" string=" " class="fa fa-envelope-o" style="min-width: 20px;"/>
+                            <label for="alias_id" string=" " class="fa fa-envelope-o" style="min-width: 20px;" aria-label="Email" title="Email" role="img"/>
                             <div name="alias_def">
                                 <field name="alias_id" class="oe_read_only oe_inline"
                                         string="Email Alias" required="0"/>
diff --git a/addons/mail/views/mail_message_views.xml b/addons/mail/views/mail_message_views.xml
index 09bb34c86ac3854d737851bd4b3b68e548f28415..6993ca81e0a3d6b7e7067f6546748f962edca952 100644
--- a/addons/mail/views/mail_message_views.xml
+++ b/addons/mail/views/mail_message_views.xml
@@ -154,7 +154,7 @@
                                                 <t t-set="webimage" t-value="new RegExp('image.*(gif|jpeg|jpg|png)').test(record.mimetype.value)"/>
                                                 <div t-if="!webimage" class="o_image" t-att-data-mimetype="record.mimetype.value"/>
                                                 <div t-if="webimage" class="o_attachment_image">
-                                                    <img t-attf-src="/web/image/#{record.id.raw_value}?download=1"/>
+                                                    <img t-attf-src="/web/image/#{record.id.raw_value}?download=1" alt="Download"/>
                                                 </div>
                                             </a>
                                         </div>
diff --git a/addons/mail/views/res_config_settings_views.xml b/addons/mail/views/res_config_settings_views.xml
index 8450b6de760c51b63fff3936b7fecaab43058071..3abf7d094382bafd0148bb78b5951a1ed17132e8 100644
--- a/addons/mail/views/res_config_settings_views.xml
+++ b/addons/mail/views/res_config_settings_views.xml
@@ -12,7 +12,7 @@
                         <div class="col-xs-12 col-md-6 o_setting_box">
                             <div class="o_setting_left_pane"/>
                             <div class="o_setting_right_pane">
-                                <label string="Activities"/>
+                                <span class="o_form_label">Activities</span>
                                 <div class="text-muted">
                                     Configure your activity types
                                 </div>
diff --git a/addons/mail/wizard/mail_resend_message_views.xml b/addons/mail/wizard/mail_resend_message_views.xml
index 85af6dc4b0960eab4407483d0869a05e7d1a1548..2ff9dfd3bd4bace168e90080a6ba9f82174e7f4b 100644
--- a/addons/mail/wizard/mail_resend_message_views.xml
+++ b/addons/mail/wizard/mail_resend_message_views.xml
@@ -20,7 +20,7 @@
                             <field name="resend" widget="boolean_toggle"/>
                         </tree>
                     </field>
-                    <p attrs="{'invisible':[('has_cancel', '==', False)]}"> <span class="fa fa-info-circle"/> Caution: It won't be possible to send this mail again to the recipients you did not select.</p>
+                    <p attrs="{'invisible':[('has_cancel', '==', False)]}"> <span class="fa fa-info-circle"> Caution: It won't be possible to send this mail again to the recipients you did not select.</span></p>
                     <footer>
                         <button string="Resend to selected" name="resend_mail_action" type="object" class="btn-primary o_mail_send"/>
                         <button string="Ignore all failure" name="cancel_mail_action" type="object" class="btn-default" />
diff --git a/addons/maintenance/views/maintenance_views.xml b/addons/maintenance/views/maintenance_views.xml
index 06709b3bb3b3d6fe2b53dbcb1e6767ef09ada94b..5e06a9eff59cccb0b8941833c3a047d005ea35be 100644
--- a/addons/maintenance/views/maintenance_views.xml
+++ b/addons/maintenance/views/maintenance_views.xml
@@ -90,7 +90,7 @@
                             <label for="schedule_date"/>
                             <div class="o_row">
                                 <field name="schedule_date"/>
-                                <label string="for"/>
+                                <label for="duration" string="for"/>
                                 <field name="duration" class="oe_inline"/> hours
                             </div>
                             <field name="priority" widget="priority"/>
@@ -134,13 +134,13 @@
                         <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click oe_semantic_html_override">
                             <div class="o_dropdown_kanban dropdown">
 
-                                <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                     <span class="fa fa-ellipsis-v"/>
                                 </a>
-                                <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                    <t t-if="widget.editable"><li><a type="edit">Edit...</a></li></t>
-                                    <t t-if="widget.deletable"><li><a type="delete">Delete</a></li></t>
-                                    <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                <ul class="dropdown-menu" role="menu">
+                                    <t t-if="widget.editable"><li><a role="menuitem" type="edit">Edit...</a></li></t>
+                                    <t t-if="widget.deletable"><li><a role="menuitem" type="delete">Delete</a></li></t>
+                                    <li role="menuitem" aria-haspopup="true"><ul role="menu" class="oe_kanban_colorpicker" data-field="color"/></li>
                                 </ul>
                             </div>
                             <div class="oe_kanban_content" tooltip="kanban-tooltip">
@@ -156,7 +156,7 @@
                                     <div class="oe_kanban_bottom_left">
                                         <field name="priority" widget="priority"/>
                                         <t t-if="record.message_needaction_counter.raw_value">
-                                            <span class='oe_kanban_mail_new' title='Unread Messages'><i class='fa fa-comments'/><t t-raw="record.message_needaction_counter.raw_value"/></span>
+                                            <span role="alert" class='oe_kanban_mail_new' title='Unread Messages'><i class='fa fa-comments' role="img" aria-label="Unread Messages"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
                                         </t>
                                         <div class="o_kanban_inline_block ml4 mr4">
                                             <field name="activity_ids" widget="kanban_activity" />
@@ -164,7 +164,7 @@
                                     </div>
                                     <div class="oe_kanban_bottom_right">
                                         <field name="kanban_state" widget="state_selection"/>
-                                        <img t-att-src="kanban_image('res.users', 'image_small', record.technician_user_id.raw_value)" t-att-title="record.technician_user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                        <img t-att-src="kanban_image('res.users', 'image_small', record.technician_user_id.raw_value)" t-att-title="record.technician_user_id.value" t-att-alt="record.technician_user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                                     </div>
                                 </div>
                             </div>
@@ -431,15 +431,15 @@
                         <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
                             <div class="o_dropdown_kanban dropdown">
 
-                                <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                     <span class="fa fa-ellipsis-v"/>
                                 </a>
-                                <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                    <t t-if="widget.editable"><li><a type="edit">Edit...</a></li></t>
-                                    <t t-if="widget.deletable"><li><a type="delete">Delete</a></li></t>
-                                    <li class="divider"></li>
-                                    <li class="dropdown-header">Record Colour</li>
-                                    <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                <ul class="dropdown-menu" role="menu">
+                                    <t t-if="widget.editable"><li><a role="menuitem" type="edit">Edit...</a></li></t>
+                                    <t t-if="widget.deletable"><li><a role="menuitem" type="delete">Delete</a></li></t>
+                                    <li role="separator" class="divider"></li>
+                                    <li role="separator" class="dropdown-header">Record Colour</li>
+                                    <li role="menuitem" aria-haspopup="true"><ul role="menu" class="oe_kanban_colorpicker" data-field="color"/></li>
                                 </ul>
                             </div>
                             <div class="oe_kanban_content" tooltip="kanban-tooltip">
@@ -462,7 +462,7 @@
                                         <div class="o_kanban_inline_block">
                                             <field name="activity_ids" widget="kanban_activity" />
                                         </div>
-                                        <img t-att-src="kanban_image('res.users', 'image_small', record.owner_user_id.raw_value)" t-att-title="record.owner_user_id.value" width="27" height="27" class="oe_kanban_avatar"/>
+                                        <img t-att-src="kanban_image('res.users', 'image_small', record.owner_user_id.raw_value)" t-att-title="record.owner_user_id.value" t-att-alt="record.owner_user_id.value" width="27" height="27" class="oe_kanban_avatar"/>
                                     </div>
                                 </div>
                             </div>
@@ -654,7 +654,7 @@
                         <div t-attf-class="oe_kanban_global_click">
                             <div class="mb4">
                                 <strong><field name="name"/></strong>
-                                <img t-att-src="kanban_image('res.users', 'image_small', record.technician_user_id.raw_value)" t-att-title="record.technician_user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                <img t-att-src="kanban_image('res.users', 'image_small', record.technician_user_id.raw_value)" t-att-title="record.technician_user_id.value" t-att-alt="record.technician_user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                             </div>
                             <div class="row mt4">
                                 <div class="col-xs-6">
@@ -825,7 +825,7 @@
                                         </a></div>
                                 </div>
                                 <div class="o_kanban_manage_button_section">
-                                    <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" /></a>
+                                    <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
                                 </div>
                             </div>
                             <div class="container o_kanban_card_content">
@@ -872,38 +872,38 @@
                                         </div>
                                     </div>
                                 </div>
-                            </div><div class="container o_kanban_card_manage_pane dropdown-menu">
+                            </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
                                 <div class="row">
                                     <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_view">
-                                        <div class="o_kanban_card_manage_title">
+                                        <div role="menuitem" class="o_kanban_card_manage_title">
                                             <span>View</span>
                                         </div>
-                                        <div>
+                                        <div role="menuitem">
                                             <a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action">
                                                 All
                                             </a>
                                         </div>
-                                        <div>
+                                        <div role="menuitem">
                                             <a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_todo': 1}">
                                                 To Do
                                             </a>
                                         </div>
-                                        <div>
+                                        <div role="menuitem">
                                             <a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_progress': 1}">
                                                 In Progress
                                             </a>
                                         </div>
-                                        <div>
+                                        <div role="menuitem">
                                             <a name="%(hr_equipment_todo_request_action_from_dashboard)d" type="action" context="{'search_default_done': 1}">
                                                 Done
                                             </a>
                                         </div>
                                     </div>
                                     <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_new">
-                                        <div class="o_kanban_card_manage_title">
+                                        <div role="menuitem" class="o_kanban_card_manage_title">
                                             <span>Reporting</span>
                                         </div>
-                                        <div>
+                                        <div role="menuitem">
                                             <a name="%(maintenance_request_action_reports)d" type="action" context="{'search_default_maintenance_team_id': active_id}">
                                             Maintenance Requests
                                             </a>
@@ -911,10 +911,10 @@
                                     </div>
                                 </div>
                                 <div t-if="widget.editable" class="o_kanban_card_manage_settings row">
-                                    <div class="col-xs-8">
-                                        <ul class="oe_kanban_colorpicker" data-field="color"/>
+                                    <div class="col-xs-8" role="menuitem" aria-haspopup="true">
+                                        <ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
                                     </div>
-                                    <div class="col-xs-4 text-right">
+                                    <div role="menuitem" class="col-xs-4 text-right">
                                         <a type="edit">Settings</a>
                                     </div>
                                 </div>
diff --git a/addons/mass_mailing/data/mass_mailing_demo.xml b/addons/mass_mailing/data/mass_mailing_demo.xml
index 347a04deaf10d28a8d5eae04e8aa7d49911fab68..3a8b4a57e6e21bdb07eda261c0c41f53fd6adcb7 100644
--- a/addons/mass_mailing/data/mass_mailing_demo.xml
+++ b/addons/mass_mailing/data/mass_mailing_demo.xml
@@ -40,7 +40,7 @@
             <field name="use_default_to" eval="True"/>
             <field name="auto_delete" eval="True"/>
             <field name="body_html"><![CDATA[<div class="snippet_row bg-color" style="padding:0px;width:600px;margin:auto;background: #ffffff repeat top /100%">
-                <table cellpadding="0" cellspacing="0" style="border-collapse:collapse" width="100%"><tbody><tr><td style="padding:10px 10px 10px 5px" valign="center" width="270"> <a style="text-decoration:none" href="http://www.example.com"><strong>My Company</strong></a> </td><td style="padding:10px 15px 10px 10px;vertical-align:middle" valign="center" width="270"><table align="right" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse"><tbody><tr><td align="right"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-facebook-square fa-2x" style="color:#44B7B7;"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-google-plus-square fa-2x" style="color:#44B7B7;"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-linkedin-square fa-2x" style="color:#44B7B7;"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-twitter-square fa-2x" style="color:#44B7B7;"></span></a></td></tr></tbody></table></td></tr></tbody></table></div><div style="padding:0px;width:600px;margin:auto;background-color:#44B7B7;color:#168484"><table cellpadding="0" cellspacing="0" style="width:100%;background-color:inherit;border-collapse:collapse;color:inherit"><tbody><tr><td class="col_mv bg-color" style="text-align:left; padding-left:20px;vertical-align:middle;font-size:14px"><p style="margin:0;font-size:20px;color:#fff">You get a 20% discount for signing up!</p><p style="margin:0">Discount Code: <strong>45A9E77DGW8455</strong></p></td><td class="col_mv bg-color" style="padding:20px;text-align:center;vertical-align:middle">  <span class="fa fa-6x fa-ticket"></span>  </td></tr></tbody></table></div><div class="snippet_row bg-color" style="padding:0;width:600px;max-width:600px;margin:0 auto;background: #fff repeat top /100%;color:#168484"><table style="width:100%;text-align:justify;margin:0 auto;inherit;border-collapse:collapse;color:inherit"><tbody><tr><td style="padding:10px 30px;font-size:14px;line-height:20px"><p style="margin:0">Dear ${object.name}</p><p style="margin:0">Great stories have personality. Consider telling a great story that provides personality. Writing a story with personality for potential clients will assist with making a relationship connection. This shows up in small quirks like word choices or phrases. Write from your point of view, not from someone else's experience.<br></p><p style="margin:0">Great stories are for everyone even when only written for just one person. If you try to write with a wide general audience in mind, your story will ring false and be bland. No one will be interested. Write for one person. If it’s genuine for the one, it’s genuine for the rest.</p><p style="margin:0">Kind Regards,</p><p style="margin:0">Michael Fletcher</p></td></tr></tbody></table></div><div style="padding:0;width:600px;max-width:600px;margin:0 auto"><table style="width:100%;text-align:justify;margin:0 auto;background-color:inherit;border-collapse:collapse"><tbody><tr><td class="col_mv bg-color" style="padding:10px 0;background-color:#168484;color:#fff"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-check fa-3x"></span>  </td><td style="padding-left:10px;color:#fff;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 1:</p><p style="margin:0">Place Order</p></td></tr></tbody></table></td><td class="col_mv bg-color" style="padding:10px 0;background-color:#FFFFFF;color:#808080"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-truck fa-3x"></span>  </td><td style="padding-left:10px;color:#808080;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 2:</p><p style="margin:0">Shipping</p></td></tr></tbody></table></td><td class="col_mv bg-color" style="padding:10px 0;background-color:#FFFFFF;color:#808080"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-dollar fa-3x"></span>  </td><td style="padding-left:10px;color:#808080;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 3:</p><p style="margin:0">Payment</p></td></tr></tbody></table></td></tr></tbody></table></div><div class="snippet_row bg-color" style="padding:0px;width:600px;margin:auto;background: #414141 repeat top /100%;color:#44B7B7"><div style="padding:10px"><table cellpadding="0" cellspacing="0" style="margin: 0 auto;width:100%;border-collapse:collapse;color:inherit;color:inherit"><tbody><tr><td style="text-align:center"> <a target="_blank" style="text-decoration: none;" href="https://www.facebook.com/Odoo"><span class="fa fa-facebook-square fa-2x"></span></a><a target="_blank" style="text-decoration: none;" href="https://plus.google.com/+Odooapps"><span class="fa fa-google-plus-square fa-2x"></span></a><a target="_blank" style="text-decoration: none;" href="https://www.linkedin.com/company/odoo"><span class="fa fa-linkedin-square fa-2x"></span></a><a target="_blank" style="text-decoration: none;" href="https://twitter.com/Odoo"><span class="fa fa-twitter-square fa-2x"></span></a> </td></tr><tr><td style="font-size:12px;text-align:center;padding-top:10px;padding-bottom:5px"> <a href="/unsubscribe_from_list" style="color:#44B7B7">Unsubscribe</a>|<a href="/page/contactus" style="color:#44B7B7">Contact</a> </td></tr></tbody></table></div>
+                <table cellpadding="0" cellspacing="0" style="border-collapse:collapse" width="100%"><tbody><tr><td style="padding:10px 10px 10px 5px" valign="center" width="270"> <a style="text-decoration:none" href="http://www.example.com"><strong>My Company</strong></a> </td><td style="padding:10px 15px 10px 10px;vertical-align:middle" valign="center" width="270"><table align="right" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse"><tbody><tr><td align="right"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-facebook-square fa-2x" style="color:#44B7B7;" role="img" aria-label="Facebook" title="Facebook"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-google-plus-square fa-2x" style="color:#44B7B7;" role="img" aria-label="Google Plus" title="Google Plus"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-linkedin-square fa-2x" style="color:#44B7B7;" role="img" aria-label="LinkedIn" title="LinkedIn"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-twitter-square fa-2x" style="color:#44B7B7;" role="img" aria-label="Twitter" title="Twitter"></span></a></td></tr></tbody></table></td></tr></tbody></table></div><div style="padding:0px;width:600px;margin:auto;background-color:#44B7B7;color:#168484"><table cellpadding="0" cellspacing="0" style="width:100%;background-color:inherit;border-collapse:collapse;color:inherit"><tbody><tr><td class="col_mv bg-color" style="text-align:left; padding-left:20px;vertical-align:middle;font-size:14px"><p style="margin:0;font-size:20px;color:#fff">You get a 20% discount for signing up!</p><p style="margin:0">Discount Code: <strong>45A9E77DGW8455</strong></p></td><td class="col_mv bg-color" style="padding:20px;text-align:center;vertical-align:middle">  <span class="fa fa-6x fa-ticket" role="img" aria-label="Ticket" title="Ticket"></span>  </td></tr></tbody></table></div><div class="snippet_row bg-color" style="padding:0;width:600px;max-width:600px;margin:0 auto;background: #fff repeat top /100%;color:#168484"><table style="width:100%;text-align:justify;margin:0 auto;inherit;border-collapse:collapse;color:inherit"><tbody><tr><td style="padding:10px 30px;font-size:14px;line-height:20px"><p style="margin:0">Dear ${object.name}</p><p style="margin:0">Great stories have personality. Consider telling a great story that provides personality. Writing a story with personality for potential clients will assist with making a relationship connection. This shows up in small quirks like word choices or phrases. Write from your point of view, not from someone else's experience.<br></p><p style="margin:0">Great stories are for everyone even when only written for just one person. If you try to write with a wide general audience in mind, your story will ring false and be bland. No one will be interested. Write for one person. If it’s genuine for the one, it’s genuine for the rest.</p><p style="margin:0">Kind Regards,</p><p style="margin:0">Michael Fletcher</p></td></tr></tbody></table></div><div style="padding:0;width:600px;max-width:600px;margin:0 auto"><table style="width:100%;text-align:justify;margin:0 auto;background-color:inherit;border-collapse:collapse"><tbody><tr><td class="col_mv bg-color" style="padding:10px 0;background-color:#168484;color:#fff"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-check fa-3x" role="img" aria-label="Check" title="Check"></span>  </td><td style="padding-left:10px;color:#fff;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 1:</p><p style="margin:0">Place Order</p></td></tr></tbody></table></td><td class="col_mv bg-color" style="padding:10px 0;background-color:#FFFFFF;color:#808080"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-truck fa-3x" role="img" aria-label="Truck" title="Truck"></span>  </td><td style="padding-left:10px;color:#808080;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 2:</p><p style="margin:0">Shipping</p></td></tr></tbody></table></td><td class="col_mv bg-color" style="padding:10px 0;background-color:#FFFFFF;color:#808080"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-dollar fa-3x" role="img" aria-label="Money" title="Money"></span>  </td><td style="padding-left:10px;color:#808080;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 3:</p><p style="margin:0">Payment</p></td></tr></tbody></table></td></tr></tbody></table></div><div class="snippet_row bg-color" style="padding:0px;width:600px;margin:auto;background: #414141 repeat top /100%;color:#44B7B7"><div style="padding:10px"><table cellpadding="0" cellspacing="0" style="margin: 0 auto;width:100%;border-collapse:collapse;color:inherit;color:inherit"><tbody><tr><td style="text-align:center"> <a target="_blank" style="text-decoration: none;" href="https://www.facebook.com/Odoo"><span class="fa fa-facebook-square fa-2x" role="img" aria-label="Facebook" title="Facebook"></span></a><a target="_blank" style="text-decoration: none;" href="https://plus.google.com/+Odooapps"><span class="fa fa-google-plus-square fa-2x" role="img" aria-label="Google Plus" title="Google Plus"></span></a><a target="_blank" style="text-decoration: none;" href="https://www.linkedin.com/company/odoo"><span class="fa fa-linkedin-square fa-2x" role="img" aria-label="LinkedIn" title="LinkedIn"></span></a><a target="_blank" style="text-decoration: none;" href="https://twitter.com/Odoo"><span class="fa fa-twitter-square fa-2x" role="img" aria-label="Twitter" title="Twitter"></span></a> </td></tr><tr><td style="font-size:12px;text-align:center;padding-top:10px;padding-bottom:5px"> <a href="/unsubscribe_from_list" style="color:#44B7B7">Unsubscribe</a>|<a href="/page/contactus" style="color:#44B7B7">Contact</a> </td></tr></tbody></table></div>
             </div>]]></field>
         </record>
 
@@ -69,7 +69,7 @@
             <field name="reply_to_mode">email</field>
             <field name="reply_to"><![CDATA[Info <info@yourcompany.example.com>]]></field>
             <field name="body_html"><![CDATA[<div class="snippet_row bg-color" style="padding:0px;width:600px;margin:auto;background: #ffffff repeat top /100%">
-                <table cellpadding="0" cellspacing="0" style="border-collapse:collapse" width="100%"><tbody><tr><td style="padding:10px 10px 10px 5px" valign="center" width="270"> <a style="text-decoration:none" href="http://www.example.com"><strong>My Company</strong></a> </td><td style="padding:10px 15px 10px 10px;vertical-align:middle" valign="center" width="270"><table align="right" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse"><tbody><tr><td align="right"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-facebook-square fa-2x" style="color:#44B7B7;"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-google-plus-square fa-2x" style="color:#44B7B7;"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-linkedin-square fa-2x" style="color:#44B7B7;"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-twitter-square fa-2x" style="color:#44B7B7;"></span></a></td></tr></tbody></table></td></tr></tbody></table></div><div style="padding:0px;width:600px;margin:auto;background-color:#44B7B7;color:#168484"><table cellpadding="0" cellspacing="0" style="width:100%;background-color:inherit;border-collapse:collapse;color:inherit"><tbody><tr><td class="col_mv bg-color" style="text-align:left; padding-left:20px;vertical-align:middle;font-size:14px"><p style="margin:0;font-size:20px;color:#fff">You get a 20% discount for signing up!</p><p style="margin:0">Discount Code: <strong>45A9E77DGW8455</strong></p></td><td class="col_mv bg-color" style="padding:20px;text-align:center;vertical-align:middle">  <span class="fa fa-6x fa-ticket"></span>  </td></tr></tbody></table></div><div class="snippet_row bg-color" style="padding:0;width:600px;max-width:600px;margin:0 auto;background: #fff repeat top /100%;color:#168484"><table style="width:100%;text-align:justify;margin:0 auto;inherit;border-collapse:collapse;color:inherit"><tbody><tr><td style="padding:10px 30px;font-size:14px;line-height:20px"><p style="margin:0">Dear ${object.name}</p><p style="margin:0">Great stories have personality. Consider telling a great story that provides personality. Writing a story with personality for potential clients will assist with making a relationship connection. This shows up in small quirks like word choices or phrases. Write from your point of view, not from someone else's experience.<br></p><p style="margin:0">Great stories are for everyone even when only written for just one person. If you try to write with a wide general audience in mind, your story will ring false and be bland. No one will be interested. Write for one person. If it’s genuine for the one, it’s genuine for the rest.</p><p style="margin:0">Kind Regards,</p><p style="margin:0">Michael Fletcher</p></td></tr></tbody></table></div><div style="padding:0;width:600px;max-width:600px;margin:0 auto"><table style="width:100%;text-align:justify;margin:0 auto;background-color:inherit;border-collapse:collapse"><tbody><tr><td class="col_mv bg-color" style="padding:10px 0;background-color:#168484;color:#fff"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-check fa-3x"></span>  </td><td style="padding-left:10px;color:#fff;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 1:</p><p style="margin:0">Place Order</p></td></tr></tbody></table></td><td class="col_mv bg-color" style="padding:10px 0;background-color:#FFFFFF;color:#808080"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-truck fa-3x"></span>  </td><td style="padding-left:10px;color:#808080;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 2:</p><p style="margin:0">Shipping</p></td></tr></tbody></table></td><td class="col_mv bg-color" style="padding:10px 0;background-color:#FFFFFF;color:#808080"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-dollar fa-3x"></span>  </td><td style="padding-left:10px;color:#808080;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 3:</p><p style="margin:0">Payment</p></td></tr></tbody></table></td></tr></tbody></table></div><div class="snippet_row bg-color" style="padding:0px;width:600px;margin:auto;background: #414141 repeat top /100%;color:#44B7B7"><div style="padding:10px"><table cellpadding="0" cellspacing="0" style="margin: 0 auto;width:100%;border-collapse:collapse;color:inherit;color:inherit"><tbody><tr><td style="text-align:center"> <a target="_blank" style="text-decoration: none;" href="https://www.facebook.com/Odoo"><span class="fa fa-facebook-square fa-2x"></span></a><a target="_blank" style="text-decoration: none;" href="https://plus.google.com/+Odooapps"><span class="fa fa-google-plus-square fa-2x"></span></a><a target="_blank" style="text-decoration: none;" href="https://www.linkedin.com/company/odoo"><span class="fa fa-linkedin-square fa-2x"></span></a><a target="_blank" style="text-decoration: none;" href="https://twitter.com/Odoo"><span class="fa fa-twitter-square fa-2x"></span></a> </td></tr><tr><td style="font-size:12px;text-align:center;padding-top:10px;padding-bottom:5px"> <a href="/unsubscribe_from_list" style="color:#44B7B7">Unsubscribe</a>|<a href="/page/contactus" style="color:#44B7B7">Contact</a> </td></tr></tbody></table></div>
+                <table cellpadding="0" cellspacing="0" style="border-collapse:collapse" width="100%"><tbody><tr><td style="padding:10px 10px 10px 5px" valign="center" width="270"> <a style="text-decoration:none" href="http://www.example.com"><strong>My Company</strong></a> </td><td style="padding:10px 15px 10px 10px;vertical-align:middle" valign="center" width="270"><table align="right" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse"><tbody><tr><td align="right"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-facebook-square fa-2x" style="color:#44B7B7;" role="img" aria-label="Facebook" title="Facebook"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-google-plus-square fa-2x" style="color:#44B7B7;" role="img" aria-label="Google Plus" title="Google Plus"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-linkedin-square fa-2x" style="color:#44B7B7;" role="img" aria-label="LinkedIn" title="LinkedIn"></span></a></td><td align="right" style="padding-left:5px"><a target="_blank" href="https://www.facebook.com/Odoo"><span class="fa fa-twitter-square fa-2x" style="color:#44B7B7;" role="img" aria-label="Twitter" title="Twitter"></span></a></td></tr></tbody></table></td></tr></tbody></table></div><div style="padding:0px;width:600px;margin:auto;background-color:#44B7B7;color:#168484"><table cellpadding="0" cellspacing="0" style="width:100%;background-color:inherit;border-collapse:collapse;color:inherit"><tbody><tr><td class="col_mv bg-color" style="text-align:left; padding-left:20px;vertical-align:middle;font-size:14px"><p style="margin:0;font-size:20px;color:#fff">You get a 20% discount for signing up!</p><p style="margin:0">Discount Code: <strong>45A9E77DGW8455</strong></p></td><td class="col_mv bg-color" style="padding:20px;text-align:center;vertical-align:middle">  <span class="fa fa-6x fa-ticket" role="img" aria-label="Ticket" title="Ticket"></span>  </td></tr></tbody></table></div><div class="snippet_row bg-color" style="padding:0;width:600px;max-width:600px;margin:0 auto;background: #fff repeat top /100%;color:#168484"><table style="width:100%;text-align:justify;margin:0 auto;inherit;border-collapse:collapse;color:inherit"><tbody><tr><td style="padding:10px 30px;font-size:14px;line-height:20px"><p style="margin:0">Dear ${object.name}</p><p style="margin:0">Great stories have personality. Consider telling a great story that provides personality. Writing a story with personality for potential clients will assist with making a relationship connection. This shows up in small quirks like word choices or phrases. Write from your point of view, not from someone else's experience.<br></p><p style="margin:0">Great stories are for everyone even when only written for just one person. If you try to write with a wide general audience in mind, your story will ring false and be bland. No one will be interested. Write for one person. If it’s genuine for the one, it’s genuine for the rest.</p><p style="margin:0">Kind Regards,</p><p style="margin:0">Michael Fletcher</p></td></tr></tbody></table></div><div style="padding:0;width:600px;max-width:600px;margin:0 auto"><table style="width:100%;text-align:justify;margin:0 auto;background-color:inherit;border-collapse:collapse"><tbody><tr><td class="col_mv bg-color" style="padding:10px 0;background-color:#168484;color:#fff"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-check fa-3x" role="img" aria-label="Check" title="Check"></span>  </td><td style="padding-left:10px;color:#fff;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 1:</p><p style="margin:0">Place Order</p></td></tr></tbody></table></td><td class="col_mv bg-color" style="padding:10px 0;background-color:#FFFFFF;color:#808080"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-truck fa-3x" role="img" aria-label="Truck" title="Truck"></span>  </td><td style="padding-left:10px;color:#808080;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 2:</p><p style="margin:0">Shipping</p></td></tr></tbody></table></td><td class="col_mv bg-color" style="padding:10px 0;background-color:#FFFFFF;color:#808080"><table style="border-collapse:collapse;background-color:inherit"><tbody><tr><td rowspan="2" style="padding-left:10px">  <span class="fa fa-dollar fa-3x" role="img" aria-label="Money" title="Money"></span>  </td><td style="padding-left:10px;color:#808080;font-size:14px"><p style="font-weight:bold;font-size:18px;margin:0 0 3px 0">Step 3:</p><p style="margin:0">Payment</p></td></tr></tbody></table></td></tr></tbody></table></div><div class="snippet_row bg-color" style="padding:0px;width:600px;margin:auto;background: #414141 repeat top /100%;color:#44B7B7"><div style="padding:10px"><table cellpadding="0" cellspacing="0" style="margin: 0 auto;width:100%;border-collapse:collapse;color:inherit;color:inherit"><tbody><tr><td style="text-align:center"> <a target="_blank" style="text-decoration: none;" href="https://www.facebook.com/Odoo"><span class="fa fa-facebook-square fa-2x" role="img" aria-label="Facebook" title="Facebook"></span></a><a target="_blank" style="text-decoration: none;" href="https://plus.google.com/+Odooapps"><span class="fa fa-google-plus-square fa-2x" role="img" aria-label="Google Plus" title="Google Plus"></span></a><a target="_blank" style="text-decoration: none;" href="https://www.linkedin.com/company/odoo"><span class="fa fa-linkedin-square fa-2x" role="img" aria-label="LinkedIn" title="LinkedIn"></span></a><a target="_blank" style="text-decoration: none;" href="https://twitter.com/Odoo"><span class="fa fa-twitter-square fa-2x" role="img" aria-label="Twitter" title="Twitter"></span></a> </td></tr><tr><td style="font-size:12px;text-align:center;padding-top:10px;padding-bottom:5px"> <a href="/unsubscribe_from_list" style="color:#44B7B7">Unsubscribe</a>|<a href="/page/contactus" style="color:#44B7B7">Contact</a> </td></tr></tbody></table></div>
         </div>]]></field>
             <field name="attachment_ids" eval="[(4, ref('mass_mail_attach_1'))]"/>
         </record>
diff --git a/addons/mass_mailing/static/src/xml/mass_mailing.xml b/addons/mass_mailing/static/src/xml/mass_mailing.xml
index 71f00f2937d29a17c8c1317576ae8149a8fc0f19..0cb519ed16dffc62c11c3ff2a2c7328b6a084335 100644
--- a/addons/mass_mailing/static/src/xml/mass_mailing.xml
+++ b/addons/mass_mailing/static/src/xml/mass_mailing.xml
@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <templates id="template" xml:space="preserve">
     <div t-name="mass_mailing.theme_selector" class="o_mail_theme_selector">
-        <a href="#" class="btn btn-xs dropdown-toggle" data-toggle="dropdown">
-            <i class="fa fa-paint-brush"/> Change Style
+        <a role="button" href="#" class="btn btn-xs dropdown-toggle" data-toggle="dropdown">
+            <span class="fa fa-paint-brush">Change Style</span>
         </a>
-        <div class="dropdown-menu">
+        <div class="dropdown-menu" role="menu">
             <li t-foreach="themes" t-as="theme">
-                <a href="#">
+                <a role="menuitem" href="#">
                     <div class="o_thumb small"  t-attf-style="background-image: url(#{theme.img}_small.png)"/>
                     <div class="o_thumb large" t-attf-style="background-image: url(#{theme.img}_large.png)"/>
                     <div class="o_thumb logo" t-attf-style="background-image: url(#{theme.img}_logo.png)"/>
                 </a>
             </li>
             <li t-if="themes.length === 1" class="o_mass_mailing_themes_upgrade">
-                <a href="#">
-                    <div class="o_thumb"><i class="fa fa-plus"/></div>
+                <a role="menuitem" href="#">
+                    <div class="o_thumb"><i class="fa fa-plus" role="img" aria-label="Upgrade theme" title="Upgrade theme"/></div>
                 </a>
             </li>
         </div>
diff --git a/addons/mass_mailing/views/editor_field_html.xml b/addons/mass_mailing/views/editor_field_html.xml
index 560af01a7f1e29c31c82e63e5864f3f22d487721..ed5ce631e619e9f170230e35d1e4fcf2e1d2d212 100644
--- a/addons/mass_mailing/views/editor_field_html.xml
+++ b/addons/mass_mailing/views/editor_field_html.xml
@@ -26,7 +26,7 @@
         <t t-set="head">
             <link rel="stylesheet" href="/mass_mailing/static/src/css/mass_mailing_popup.css" type="text/css"/>
         </t>
-        <div class="modal-dialog modal-md show" id="o_newsletter_popup">
+        <div role="dialog" class="modal-dialog modal-md show" id="o_newsletter_popup">
             <div class="modal-content o_popup_modal_content">
                 <div class="o_popup_modal_body text-center">
                     <div class="o_popup_content_dev">
diff --git a/addons/mass_mailing/views/mass_mailing_stats_views.xml b/addons/mass_mailing/views/mass_mailing_stats_views.xml
index 7cf644dad93b7a65125e62e47874ef4c27510270..0090a92f214be584ece6004875de1ff9603f2baa 100644
--- a/addons/mass_mailing/views/mass_mailing_stats_views.xml
+++ b/addons/mass_mailing/views/mass_mailing_stats_views.xml
@@ -51,7 +51,7 @@
         <field name="model">mail.mail.statistics</field>
         <field name="arch" type="xml">
             <form string="Mail Statistics" create="0">
-                <div class="oe_form_box_info bg-info oe_text_center alert-info" attrs="{'invisible': [('exception', '=', False)]}">
+                <div class="oe_form_box_info bg-info oe_text_center alert-info" attrs="{'invisible': [('exception', '=', False)]}" role="alert">
                     <p><strong>This email could not be sent.</strong></p>
                 </div>
                 <sheet>
diff --git a/addons/mass_mailing/views/mass_mailing_views.xml b/addons/mass_mailing/views/mass_mailing_views.xml
index b0faff60be31caf36923eb6371acc5efba97f5ab..6648a015b2bb24787441adbaca43c149ed3aad14 100644
--- a/addons/mass_mailing/views/mass_mailing_views.xml
+++ b/addons/mass_mailing/views/mass_mailing_views.xml
@@ -84,7 +84,7 @@
                                         </strong>
                                     </div>
                                     <span class="badge" title="Number of bounced email.">
-                                        <i class="fa fa-exclamation-triangle"/> <t t-esc="record.message_bounce.value" title=""/>
+                                        <i class="fa fa-exclamation-triangle" role="img" aria-label="Warning" title="Warning"/> <t t-esc="record.message_bounce.value" title=""/>
                                     </span>
                                 </div>
                                 <div class="o_kanban_record_body">
@@ -313,15 +313,15 @@
                                     </div>
                                     <div class="o_kanban_card_manage_pane">
                                         <div class="o_kanban_card_manage_section o_dropdown_kanban dropdown">
-                                            <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                            <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                                 <span class="fa fa-ellipsis-v"/>
                                             </a>
                                             <ul class="dropdown-menu" role="menu">
                                                 <li t-if="widget.editable">
-                                                    <a type="edit">Edit</a>
+                                                    <a role="menuitem" type="edit">Edit</a>
                                                 </li>
                                                 <li t-if="widget.deletable">
-                                                    <a type="delete">Delete</a>
+                                                    <a role="menuitem" type="delete">Delete</a>
                                                 </li>
                                             </ul>
                                         </div>
@@ -331,7 +331,7 @@
                                     <a class="o_project_kanban_box" name="%(action_view_mass_mailing_contacts_from_list)d" type="action">
                                         <div>
                                             <span class="badge">
-                                                <i class="fa fa-user"/>
+                                                <i class="fa fa-user" role="img" aria-label="Contacts" title="Contacts"/>
                                                 <t t-esc="record.contact_nbr.value"/>
                                             </span>
                                         </div>
@@ -433,7 +433,7 @@
                             </button>
                         </p>
                     </div>
-                    <div class="oe_form_box_info bg-info oe_text_center alert-info" attrs="{'invisible': ['|', ('state', '!=', 'done'), ('failed', '=', 0)]}">
+                    <div class="oe_form_box_info bg-info oe_text_center alert-info" attrs="{'invisible': ['|', ('state', '!=', 'done'), ('failed', '=', 0)]}" role="alert">
                         <p>
                             <button class="btn-link"
                                     name="%(action_view_mail_mail_statistics_mailing_list)d"
@@ -566,13 +566,13 @@
                         <t t-name="kanban-box">
                             <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click oe_kanban_mass_mailing">
                                 <div class="o_dropdown_kanban dropdown">
-                                    <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                    <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                         <span class="fa fa-ellipsis-v"/>
                                     </a>
-                                    <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                        <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                    <ul class="dropdown-menu" role="menu">
+                                        <li role="menuitem" aria-haspopup="true"><ul role="menu" class="oe_kanban_colorpicker" data-field="color"/></li>
                                         <t t-if="widget.deletable">
-                                            <li><a type="delete">Delete</a></li>
+                                            <li><a role="menuitem" type="delete">Delete</a></li>
                                         </t>
                                     </ul>
                                 </div>
@@ -920,19 +920,19 @@
                             <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click oe_kanban_mass_mailing_campaign">
                                 <div class="o_dropdown_kanban dropdown">
 
-                                    <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                    <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                         <span class="fa fa-ellipsis-v"/>
                                     </a>
-                                    <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
+                                    <ul class="dropdown-menu" role="menu">
                                         <t t-if="widget.editable">
-                                            <li><a type="edit">Settings</a></li>
+                                            <li><a role="menuitem" type="edit">Settings</a></li>
                                         </t>
                                         <t t-if="widget.deletable">
-                                            <li><a type="delete">Delete</a></li>
+                                            <li><a role="menuitem" type="delete">Delete</a></li>
                                         </t>
-                                        <li class="divider"/>
-                                        <li class="dropdown-header">Colour</li>
-                                        <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                        <li role="separator" class="divider"/>
+                                        <li role="separator" class="dropdown-header">Colour</li>
+                                        <li role="menuitem" aria-haspopup="true"><ul class="oe_kanban_colorpicker" role="menu" data-field="color"/></li>
                                     </ul>
                                 </div>
                                  <div class="oe_kanban_content">
@@ -958,7 +958,7 @@
                                             </div>
                                         </div>
                                         <div class="oe_kanban_bottom_right" style="height:90px">
-                                            <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="30" height="30" class="oe_kanban_avatar"/>
+                                            <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="30" height="30" class="oe_kanban_avatar"/>
                                         </div>
                                     </div>
                                 </div>
diff --git a/addons/mass_mailing/views/snippets_themes.xml b/addons/mass_mailing/views/snippets_themes.xml
index d2e52a2a6f7a3fdc2bd9fe2c660f23398c0b37e5..79bc68cdec90b9b7cb743be3e21add2e688e6d36 100644
--- a/addons/mass_mailing/views/snippets_themes.xml
+++ b/addons/mass_mailing/views/snippets_themes.xml
@@ -22,7 +22,7 @@
             </div>
             <div id="email_designer_default_headers" class="o_panel">
                 <div class="o_panel_header">
-                    <i class="fa fa-angle-double-up"/> Headers
+                    <span class="fa fa-angle-double-up">Headers</span>
                 </div>
                 <div class="o_panel_body">
                     <t t-snippet="mass_mailing.s_mail_block_header_social" t-thumbnail="/mass_mailing/static/src/img/blocks/block_header_social.png"/>
@@ -33,7 +33,7 @@
             </div>
             <div id="email_designer_default_body" class="o_panel">
                 <div class="o_panel_header">
-                    <i class="fa fa-clone"/> Body
+                    <span class="fa fa-clone">Body</span>
                 </div>
                 <div class="o_panel_body">
                     <t t-snippet="mass_mailing.s_mail_block_title_text" t-thumbnail="/mass_mailing/static/src/img/blocks/block_title_text.png"/>
@@ -51,7 +51,7 @@
             </div>
             <div id="email_designer_default_extra" class="o_panel">
                 <div class="o_panel_header">
-                    <i class="fa fa-plus"/> Marketing Content
+                    <span class="fa fa-plus">Marketing Content</span>
                 </div>
                 <div class="o_panel_body">
                     <t t-snippet="mass_mailing.s_mail_block_discount2" t-thumbnail="/mass_mailing/static/src/img/blocks/block_discount2.png"/>
@@ -62,7 +62,7 @@
             </div>
             <div id="email_designer_default_footer" class="o_panel">
                 <div class="o_panel_header">
-                    <i class="fa fa-angle-double-down"/> Footers
+                    <span class="fa fa-angle-double-down">Footers</span>
                 </div>
                 <div class="o_panel_body">
                     <t t-snippet="mass_mailing.s_mail_block_footer_social" t-thumbnail="/mass_mailing/static/src/img/blocks/block_footer_social.png"/>
@@ -171,7 +171,7 @@
                                 </small>
                             </p>
                             <div class="o_mail_v_padding text-center">
-                                <a href="#" class="btn btn-primary">LOGIN</a>
+                                <a role="button" href="#" class="btn btn-primary">LOGIN</a>
                             </div>
 
                         </td>
@@ -278,7 +278,7 @@
                                     </tr>
                                     <tr>
                                         <td valign="top" class="text-center o_mail_h_padding o_mail_col_mv" style="padding-bottom: 20px;">
-                                            <a href="#" class="btn btn-block btn-primary">More</a>
+                                            <a role="button" href="#" class="btn btn-block btn-primary">More</a>
                                         </td>
                                     </tr>
                                 </tfoot>
@@ -334,7 +334,7 @@
                                     </tr>
                                     <tr>
                                         <td valign="top" class="text-center o_mail_h_padding o_mail_col_mv" style="padding-bottom: 20px;">
-                                            <a href="#" class="btn btn-block btn-primary">More</a>
+                                            <a role="button" href="#" class="btn btn-block btn-primary">More</a>
                                         </td>
                                     </tr>
                                 </tfoot>
@@ -363,7 +363,7 @@
                                     your content needs to be useful to your readers.
                                 </p>
                                 <div class="text-center" style="margin-top:15px;">
-                                    <a href="#" class="btn btn-link">Read More...</a>
+                                    <a role="button" href="#" class="btn btn-link">Read More...</a>
                                 </div>
                             </div>
                         </td>
@@ -378,7 +378,7 @@
                                     your content needs to be useful to your readers.
                                 </p>
                                 <div class="text-center" style="margin-top:15px;">
-                                    <a href="#" class="btn btn-link">Read More...</a>
+                                    <a role="button" href="#" class="btn btn-link">Read More...</a>
                                 </div>
                             </div>
                         </td>
@@ -403,7 +403,7 @@
                                     A short description
                                 </p>
                                 <div class="text-center" style="margin-top:15px;">
-                                    <a href="#" class="btn btn-link">Read More...</a>
+                                    <a role="button" href="#" class="btn btn-link">Read More...</a>
                                 </div>
                             </div>
                         </td>
@@ -416,7 +416,7 @@
                                     A short description
                                 </p>
                                 <div class="text-center" style="margin-top:15px;">
-                                    <a href="#" class="btn btn-link">Read More...</a>
+                                    <a role="button" href="#" class="btn btn-link">Read More...</a>
                                 </div>
                             </div>
                         </td>
@@ -429,7 +429,7 @@
                                     A short description
                                 </p>
                                 <div class="text-center" style="margin-top:15px;">
-                                    <a href="#" class="btn btn-link">Read More...</a>
+                                    <a role="button" href="#" class="btn btn-link">Read More...</a>
                                 </div>
                             </div>
                         </td>
@@ -453,7 +453,7 @@
                             <h3>Omnichannel sales</h3>
                             <p class="o_mail_no_margin" style="text-align:justify;">Get your inside sales (CRM) fully integrated with online sales (eCommerce), in-store sales (Point of Sale) and marketplaces like eBay and Amazon.</p>
                             <div class="text-center" style="margin-top:15px;">
-                                <a href="#" class="btn btn-link">Read More...</a>
+                                <a role="button" href="#" class="btn btn-link">Read More...</a>
                             </div>
                         </td>
                     </tr>
@@ -473,7 +473,7 @@
                             <h3>A unique value</h3>
                             <p class="o_mail_no_margin" style="text-align:justify;">The open source model of Odoo has allowed us to leverage thousands of developers and business experts to build hundreds of apps in just a few years.</p>
                             <div class="text-center" style="margin-top:15px;">
-                                <a href="#" class="btn btn-link">Read More...</a>
+                                <a role="button" href="#" class="btn btn-link">Read More...</a>
                             </div>
                         </td>
                         <td style="width:270px;text-align:center;vertical-align:middle" class="o_mail_img_container o_mail_h_padding o_mail_v_padding">
@@ -536,7 +536,7 @@
                     <tr>
                         <td class="o_mail_h_padding o_mail_v_padding bg-beta" style="padding:10px;">
                             &amp;nbsp;
-                            <a href="#" class="btn btn-primary">My Account</a>
+                            <a role="button" href="#" class="btn btn-primary">My Account</a>
                             &amp;nbsp;
                         </td>
                     </tr>
@@ -583,7 +583,7 @@
                     </tr>
                     <tr>
                         <td class="mb16 mt16 text-center">
-                            <a class="btn btn-primary">Use now</a>
+                            <a role="button" class="btn btn-primary">Use now</a>
                         </td>
                     </tr>
                 </tbody>
@@ -613,7 +613,7 @@
                                 </tr>
                                 <tr>
                                     <td class="text-center">
-                                        <a href="#" class="btn btn-primary">Redeem Discount!</a>
+                                        <a role="button" href="#" class="btn btn-primary">Redeem Discount!</a>
                                         &amp;nbsp;
                                     </td>
                                 </tr>
@@ -650,8 +650,8 @@
                             </p>
                         </div>
                         <div class="small mt16">
-                            <a href="#" class="btn btn-sm btn-primary">Registration</a>
-                            <a href="#" class="btn btn-sm btn-link" style="margin-left:10px">More Info</a>
+                            <a role="button" href="#" class="btn btn-sm btn-primary">Registration</a>
+                            <a role="button" href="#" class="btn btn-sm btn-link" style="margin-left:10px">More Info</a>
                         </div>
                     </td>
                 </tr>
@@ -671,7 +671,7 @@
                                 <tr>
                                     <td rowspan="2" class="text-right">
                                         &amp;nbsp;
-                                        <span class="fa fa-compass fa-2x text-delta"></span>
+                                        <span class="fa fa-compass fa-2x text-delta" role="img" aria-label="Choose" title="Choose"></span>
                                         &amp;nbsp;
                                     </td>
                                     <td style="padding-left:10px;">
@@ -686,7 +686,7 @@
                                 <tr>
                                     <td rowspan="2" class="text-right">
                                         &amp;nbsp;
-                                        <span class="fa fa-credit-card fa-2x text-delta"></span>
+                                        <span class="fa fa-credit-card fa-2x text-delta" role="img" aria-label="Order" title="Order"></span>
                                         &amp;nbsp;
                                     </td>
                                     <td style="padding-left:10px;">
@@ -701,7 +701,7 @@
                                 <tr>
                                     <td rowspan="2" class="text-right">
                                         &amp;nbsp;
-                                        <span class="fa fa-smile-o fa-2x text-delta"></span>
+                                        <span class="fa fa-smile-o fa-2x text-delta" role="img" aria-label="Enjoy" title="Enjoy"></span>
                                         &amp;nbsp;
                                     </td>
                                     <td style="padding-left:10px;">
@@ -725,12 +725,12 @@
                 <tbody>
                     <tr>
                         <td class="o_mail_footer_links">
-                            <a href="/unsubscribe_from_list" class="btn btn-link">Unsubscribe</a>
+                            <a role="button" href="/unsubscribe_from_list" class="btn btn-link">Unsubscribe</a>
                         </td>
                     </tr>
                     <tr>
                         <td>
-                            <p class="o_mail_footer_copy"><span class="fa fa-copyright"/> 2016 All Rights Reserved</p>
+                            <p class="o_mail_footer_copy"><span class="fa fa-copyright" role="img" aria-label="Copyright" title="Copyright"/> 2016 All Rights Reserved</p>
                         </td>
                     </tr>
                 </tbody>
@@ -750,10 +750,10 @@
                                 <strong><t t-esc="res_company.partner_id.name"/></strong>
                             </p>
                             <div class="o_mail_footer_links">
-                                <a href="/unsubscribe_from_list" class="btn btn-link">Unsubscribe</a>
+                                <a role="button" href="/unsubscribe_from_list" class="btn btn-link">Unsubscribe</a>
                             </div>
                             <div>
-                                <p class="o_mail_footer_copy"><span class="fa fa-copyright"/> 2016 All Rights Reserved</p>
+                                <p class="o_mail_footer_copy"><span class="fa fa-copyright" role="img" aria-label="Copyright" title="Copyright"/> 2016 All Rights Reserved</p>
                             </div>
                         </td>
                     </tr>
diff --git a/addons/mass_mailing/views/snippets_themes_options.xml b/addons/mass_mailing/views/snippets_themes_options.xml
index 3caafae46d587ce5ae4b6d3fb825ad0f25d8fee4..53a73d711565272239bb5fdb9d604aaa43be7b70 100644
--- a/addons/mass_mailing/views/snippets_themes_options.xml
+++ b/addons/mass_mailing/views/snippets_themes_options.xml
@@ -42,8 +42,8 @@
         data-selector="[data-oe-field='body_html'] > div:not(.o_layout), [data-oe-field='body_html'] .oe_structure > div, td, th"
         data-exclude=".o_mail_no_colorpicker, .o_mail_no_options">
         <li class="dropdown-submenu">
-            <a tabindex="-1" href="#"><i class="fa fa-eyedropper"/>Background Color</a>
-            <ul class="dropdown-menu">
+            <a tabindex="-1" href="#"><span class="fa fa-eyedropper">Background Color</span></a>
+            <ul class="dropdown-menu" role="menu">
                 <li></li>
             </ul>
         </li>
diff --git a/addons/membership/views/product_views.xml b/addons/membership/views/product_views.xml
index 3598f1b2b5acaf631b59cab26feeb474675d798c..c08473cd647e25c771211e6869dd2a412ace7899 100644
--- a/addons/membership/views/product_views.xml
+++ b/addons/membership/views/product_views.xml
@@ -55,10 +55,10 @@
                                     <div class="o_kanban_record_headings">
                                         <strong class="o_kanban_record_title"><span class="mt4"><field name="name"/></span></strong>
                                     </div>
-                                    <span class="badge"><i class="fa fa-money"/> <field name="list_price"/></span>
+                                    <span class="badge"><i class="fa fa-money" role="img" aria-label="Price" title="Price"/> <field name="list_price"/></span>
                                 </div>
                                 <div class="o_kanban_record_body">
-                                    <i class="fa fa-clock-o" aria-hidden="true"></i><strong> From: </strong><field name="membership_date_from"/><strong> To:</strong> <field name="membership_date_to"/>
+                                    <i class="fa fa-clock-o" role="img" aria-label="Period" title="Period"></i><strong> From: </strong><field name="membership_date_from"/><strong> To:</strong> <field name="membership_date_to"/>
                                 </div>
                             </div>
                         </t>
diff --git a/addons/mrp/report/mrp_production_templates.xml b/addons/mrp/report/mrp_production_templates.xml
index 1e27b00e224b155503605eeb378f84c165eafaf3..9330a224f490f0f8ea0fdf9763326124891ef5fb 100644
--- a/addons/mrp/report/mrp_production_templates.xml
+++ b/addons/mrp/report/mrp_production_templates.xml
@@ -117,12 +117,12 @@
                                             </td>
                                             <td t-if="has_serial_number" width="15%">
                                                 <t t-if="has_serial_number and (ml.lot_id or ml.lot_name)">
-                                                    <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', ml.lot_id.name, 600, 100)" style="width:100%;height:35px"/>
+                                                    <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', ml.lot_id.name, 600, 100)" style="width:100%;height:35px" alt="Barcode"/>
                                                 </t>
                                             </td>
                                             <td t-if="has_product_barcode" width="15%" class="text-center">
                                                 <t t-if="line.product_id.barcode">
-                                                    <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', line.product_id.barcode, 600, 100)" style="width:100%;height:35px"/>
+                                                    <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', line.product_id.barcode, 600, 100)" style="width:100%;height:35px" alt="Barcode"/>
                                                 </t>
                                             </td>
                                         </tr>
diff --git a/addons/mrp/report/mrp_report_bom_structure.xml b/addons/mrp/report/mrp_report_bom_structure.xml
index 2122a9e10f74c2818d489c95d6420dd0fd79e159..de3dc0eed4af6db9d35a4f3676ead9fd277d2640 100644
--- a/addons/mrp/report/mrp_report_bom_structure.xml
+++ b/addons/mrp/report/mrp_report_bom_structure.xml
@@ -79,13 +79,13 @@
                 <td>
                     <span t-att-style="space_td"/>
                     <t t-if="l['child_bom']">
-                        <span t-att-data-function="'get_bom'" class="o_mrp_bom_unfoldable fa fa-fw fa-caret-right"/>
+                        <span t-att-data-function="'get_bom'" class="o_mrp_bom_unfoldable fa fa-fw fa-caret-right" role="img" aria-label="Unfold" title="Unfold"/>
                     </t>
                     <span t-att-class="None if l['child_bom'] else 'o_mrp_bom_no_fold'">
                         <a t-att-data-res-id="l['prod_id']" t-att-data-model="'product.product'" class="o_mrp_bom_action"><t t-esc="l['prod_name']"/></a>
                     </span>
                     <t t-if="l['phantom_bom']">
-                        <span class="fa fa-dropbox" title="This is a BoM of type Kit!"/>
+                        <span class="fa fa-dropbox" title="This is a BoM of type Kit!" role="img" aria-label="This is a BoM of type Kit!"/>
                     </t>
                 </td>
                 <td><span><t t-esc="l['prod_qty']" t-options='{"widget": "float", "decimal_precision": "Product Unit of Measure"}'/></span></td>
@@ -103,7 +103,7 @@
             <tr class="o_mrp_bom_report_line o_mrp_bom_cost" t-att-data-id="'operation-' + str(data['bom'].id)" t-att-data-bom-id="data['bom'].id" t-att-parent_id="data['bom'].id" t-att-data-qty="data['bom_qty']" t-att-data-level="data['level']">
                 <td>
                     <span t-att-style="space_td"/>
-                    <span class="o_mrp_bom_unfoldable fa fa-fw fa-caret-right" t-att-data-function="'get_operations'"/>
+                    <span class="o_mrp_bom_unfoldable fa fa-fw fa-caret-right" t-att-data-function="'get_operations'" role="img" aria-label="Unfold" title="Unfold"/>
                     Operations
                 </td>
                 <td>
diff --git a/addons/mrp/views/ir_attachment_view.xml b/addons/mrp/views/ir_attachment_view.xml
index cf6b00982c77018207285c3de1f438d35ab70682..a478dbf606219fdfa1dd6582bb2b76f8669053c5 100644
--- a/addons/mrp/views/ir_attachment_view.xml
+++ b/addons/mrp/views/ir_attachment_view.xml
@@ -23,7 +23,7 @@
                                                 <t t-set="webimage" t-value="new RegExp('image.*(gif|jpeg|jpg|png)').test(record.mimetype.value)"/>
                                                 <div t-if="!webimage" class="o_image" t-att-data-mimetype="record.mimetype.value"/>
                                                 <div t-if="webimage" class="o_attachment_image">
-                                                    <img t-attf-src="/web/image/#{record.ir_attachment_id.raw_value}?download=1"/>
+                                                    <img t-attf-src="/web/image/#{record.ir_attachment_id.raw_value}?download=1" alt="Download"/>
                                                 </div>
                                             </a>
                                         </div>
diff --git a/addons/mrp/views/mrp_bom_views.xml b/addons/mrp/views/mrp_bom_views.xml
index 3ae43fc95155a375152be7cc69255aab92489223..50faf5f24e6c7908e9899357cb9f9b3af21f71cd 100644
--- a/addons/mrp/views/mrp_bom_views.xml
+++ b/addons/mrp/views/mrp_bom_views.xml
@@ -62,8 +62,8 @@
                                     <field name="sequence" widget="handle"/>
                                     <field name="product_id" context="{'default_type': 'product'}"/>
                                     <field name="has_attachments" invisible="1"/>
-                                    <button name="action_see_attachments" type="object" icon="fa-files-o" attrs="{'invisible': [('has_attachments', '=', False)]}"/>
-                                    <button name="action_see_attachments" type="object" icon="fa-file" attrs="{'invisible': [('has_attachments', '=', True)]}"/>
+                                    <button name="action_see_attachments" type="object" icon="fa-files-o" attrs="{'invisible': [('has_attachments', '=', False)]}" aria-label="No attachment" title="No attachment"/>
+                                    <button name="action_see_attachments" type="object" icon="fa-file" attrs="{'invisible': [('has_attachments', '=', True)]}" aria-label="Attachments" title="Attachments"/>
                                     <field name="product_qty"/>
                                     <field name="product_uom_id" options="{'no_open':True,'no_create':True}" groups="uom.group_uom"/>
                                     <field name="attribute_value_ids" widget="many2many_tags" options="{'no_create': True}" domain="[('product_ids.product_tmpl_id', '=', parent.product_tmpl_id)]" groups="product.group_product_variant"/>
diff --git a/addons/mrp/views/mrp_workcenter_views.xml b/addons/mrp/views/mrp_workcenter_views.xml
index 954da835817025c7b342e91ee46f6e898d641459..52bd2d3c331f65c7321584da7a174916c2095b24 100644
--- a/addons/mrp/views/mrp_workcenter_views.xml
+++ b/addons/mrp/views/mrp_workcenter_views.xml
@@ -163,7 +163,7 @@
                                         </span>
                                     </div>
                                     <div class="o_kanban_manage_button_section">
-                                        <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" /></a>
+                                        <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
                                     </div>
                                 </div>
                                 <div class="container o_kanban_card_content">
@@ -233,48 +233,51 @@
                                         <div class="col-xs-12 o_kanban_primary_left" style="position:absolute; bottom:10px;" name="wc_stages">
                                             <a name="%(act_mrp_block_workcenter)d" type="action" class="o_status pull-right"
                                                 title="No workorder currently in progress. Click to mark work center as blocked."
+                                                aria-label="No workorder currently in progress. Click to mark work center as blocked."
                                                 attrs="{'invisible': [('working_state','in',('blocked','done'))]}"/>
                                             <a name="unblock" type="object" class=" o_status o_status_red pull-right"
                                                 title="Workcenter blocked, click to unblock."
+                                                aria-label="Workcenter blocked, click to unblock."
                                                 attrs="{'invisible': [('working_state','in',('normal','done'))]}"/>
                                             <a name="%(act_mrp_block_workcenter)d" type="action" class="o_status o_status_green pull-right"
                                                 title="Work orders in progress. Click to block work center."
+                                                aria-label="Work orders in progress. Click to block work center."
                                                 attrs="{'invisible': [('working_state','in',('normal','blocked'))]}"/>
                                         </div>
                                     </div>
-                                </div><div class="container o_kanban_card_manage_pane dropdown-menu">
+                                </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
                                     <div class="row">
                                         <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_view">
-                                            <div class="o_kanban_card_manage_title">
+                                            <div role="menuitem" class="o_kanban_card_manage_title">
                                                 <span>Actions</span>
                                             </div>
-                                            <div name="plan_order">
+                                            <div role="menuitem" name="plan_order">
                                                 <a name="%(action_work_orders)d" type="action">Plan Orders</a>
                                             </div>
                                         </div>
                                         <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_new">
-                                            <div class="o_kanban_card_manage_title">
+                                            <div role="menuitem" class="o_kanban_card_manage_title">
                                                 <span>Reporting</span>
                                             </div>
-                                            <div>
+                                            <div role="menuitem">
                                                 <a name="%(mrp_workcenter_productivity_report_oee)d" type="action">OEE</a>
                                             </div>
-                                            <div>
+                                            <div role="menuitem">
                                                 <a name="%(mrp_workorder_workcenter_report)d" type="action" context="{'search_default_thisyear':True}">
                                                     Performance
                                                 </a>
                                             </div>
-                                            <div>
+                                            <div role="menuitem">
                                                 <a name="%(action_work_orders)d" type="action" context="{'search_default_waiting': 1}">Waiting Availability</a>
                                             </div>
                                         </div>
                                     </div>
 
                                     <div t-if="widget.editable" class="o_kanban_card_manage_settings row">
-                                        <div class="col-xs-8">
-                                            <ul class="oe_kanban_colorpicker" data-field="color"/>
+                                        <div role="menuitem" aria-haspopup="true" class="col-xs-8">
+                                            <ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
                                         </div>
-                                        <div class="col-xs-4 text-right">
+                                        <div role="menuitem" class="col-xs-4 text-right">
                                             <a type="edit">Settings</a>
                                         </div>
                                     </div>
diff --git a/addons/mrp/views/mrp_workorder_views.xml b/addons/mrp/views/mrp_workorder_views.xml
index 16757f1acd426be833c5e037f6de76c3b3e10fd8..f5afe548beb88ac12e7ca180c791337597bf82b3 100644
--- a/addons/mrp/views/mrp_workorder_views.xml
+++ b/addons/mrp/views/mrp_workorder_views.xml
@@ -358,11 +358,11 @@
                                         <span><t t-esc="record.product_id.value"/></span> <span><t t-esc="record.qty_production.value"/> <t t-esc="record.product_uom_id.value"/></span>
                                     </div>
                                     <div class="oe_kanban_bottom_right" t-if="record.state.raw_value == 'progress'">
-                                        <span t-if="record.working_state.raw_value != 'blocked' and record.working_user_ids.raw_value.length > 0"><i class="fa fa-play"/></span>
-                                        <span t-if="record.working_state.raw_value != 'blocked' and record.working_user_ids.raw_value.length == 0 and record.last_working_user_id.raw_value"><i class="fa fa-pause"/></span>
-                                        <span t-if="record.working_state.raw_value == 'blocked' and (record.working_user_ids.raw_value.length == 0 or record.last_working_user_id.raw_value)"><i class="fa fa-stop"/></span>
+                                        <span t-if="record.working_state.raw_value != 'blocked' and record.working_user_ids.raw_value.length > 0"><i class="fa fa-play" role="img" aria-label="Run" title="Run"/></span>
+                                        <span t-if="record.working_state.raw_value != 'blocked' and record.working_user_ids.raw_value.length == 0 and record.last_working_user_id.raw_value"><i class="fa fa-pause" role="img" aria-label="Pause" title="Pause"/></span>
+                                        <span t-if="record.working_state.raw_value == 'blocked' and (record.working_user_ids.raw_value.length == 0 or record.last_working_user_id.raw_value)"><i class="fa fa-stop" role="img" aria-label="Stop" title="Stop"/></span>
                                         <t t-if="record.last_working_user_id.raw_value">
-                                            <img t-att-src="kanban_image('res.users', 'image_small', record.last_working_user_id.raw_value)" width="24" height="24" class="oe_kanban_avatar"/>
+                                            <img t-att-src="kanban_image('res.users', 'image_small', record.last_working_user_id.raw_value)" width="24" height="24" class="oe_kanban_avatar" alt="Avatar"/>
                                         </t>
                                     </div>
                                 </div>
diff --git a/addons/mrp/views/res_config_settings_views.xml b/addons/mrp/views/res_config_settings_views.xml
index 05330d1588d288093271164b621f9593f2835553..eb65b96220eb07ccb859c5cd91c964695bf4f06e 100644
--- a/addons/mrp/views/res_config_settings_views.xml
+++ b/addons/mrp/views/res_config_settings_views.xml
@@ -79,7 +79,7 @@
                                 </div>
                                 <div class="o_setting_right_pane">
                                     <label string="Security Lead Time" for="use_manufacturing_lead"/>
-                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." role="img" aria-label="Values set here are company-specific." groups="base.group_multi_company"/>
                                     <div class="text-muted">
                                         Schedule manufacturing orders earlier to avoid delays
                                      </div>
diff --git a/addons/mrp/views/stock_picking_views.xml b/addons/mrp/views/stock_picking_views.xml
index e647d45705aa65779c36c5e8cafa1c241f57865f..800545b203711a94e638c76e8674981ab2857dd4 100644
--- a/addons/mrp/views/stock_picking_views.xml
+++ b/addons/mrp/views/stock_picking_views.xml
@@ -22,7 +22,7 @@
                                 <div class="o_secondary"><field class="o_secondary"  name="warehouse_id"/></div>
                             </div>
                             <div class="o_kanban_manage_button_section">
-                                <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" /></a>
+                                <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
                             </div>
                         </div>
                         <div class="container o_kanban_card_content">
@@ -55,37 +55,37 @@
                                     </div>
                                 </div>
                             </div>
-                        </div><div class="container o_kanban_card_manage_pane dropdown-menu">
+                        </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
                             <div class="row">
                                 <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_view" name="picking_left_manage_pane">
-                                    <div class="o_kanban_card_manage_title">
+                                    <div role="menuitem" class="o_kanban_card_manage_title">
                                         <span>View</span>
                                     </div>
-                                    <div>
+                                    <div role="menuitem">
                                         <a name="%(mrp_production_action_picking_deshboard)d" type="action">All</a>
                                     </div>
-                                    <div>
+                                    <div role="menuitem">
                                         <a name="%(mrp_production_action_picking_deshboard)d" type="action" context="{'search_default_inprogress': 1}">In Progress</a>
                                     </div>
-                                    <div>
+                                    <div role="menuitem">
                                         <a name="%(mrp_production_action_picking_deshboard)d" type="action" context="{'search_default_planned': 1}">Planned</a>
                                     </div>
                                 </div>
                                 <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_new">
-                                    <div class="o_kanban_card_manage_title">
+                                    <div role="menuitem" class="o_kanban_card_manage_title">
                                         <span>New</span>
                                     </div>
-                                    <div>
+                                    <div role="menuitem">
                                         <a name="%(action_mrp_production_form)d" type="action">Production Order</a>
                                     </div>
                                 </div>
                             </div>
 
                             <div t-if="widget.editable" class="o_kanban_card_manage_settings row">
-                                <div class="col-xs-8">
-                                    <ul class="oe_kanban_colorpicker" data-field="color"/>
+                                <div role="menuitem" aria-haspopup="true" class="col-xs-8">
+                                    <ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
                                 </div>
-                                <div class="col-xs-4 text-right">
+                                <div role="menuitem" class="col-xs-4 text-right">
                                     <a type="edit">Settings</a>
                                 </div>
                             </div>
diff --git a/addons/note/static/src/xml/systray.xml b/addons/note/static/src/xml/systray.xml
index 4b2052c3b85192b53b65ec4dd5e272b340d8b4a9..827bf0159a82fab89d5afabfe2d82a91884f352d 100644
--- a/addons/note/static/src/xml/systray.xml
+++ b/addons/note/static/src/xml/systray.xml
@@ -3,11 +3,11 @@
     <t t-extend="mail.chat.ActivityMenuPreview">
         <t t-jquery="t[t-foreach*='activities'][t-as*='activity']" t-operation="after">
             <div class="o_note_show">
-                <a class="btn btn-block text-center">Add new note</a>
+                <a role="button" class="btn btn-block text-center">Add new note</a>
             </div>
             <div class="o_note o_mail_channel_preview hidden">
                 <div class="o_mail_channel_image o_mail_channel_app">
-                    <img src="/note/static/description/icon.png"/>
+                    <img src="/note/static/description/icon.png" alt="Channel"/>
                 </div>
                 <div class="o_channel_info">
                     <div class="o_channel_title">
@@ -15,7 +15,7 @@
                         <div class="o_note_datetime"/>
                         <span class="ml4">
                             <a class="o_note_set_datetime text-muted">
-                                <span class="fa fa-clock-o"/>
+                                <span class="fa fa-clock-o" role="img" aria-label="Set date and time" title="Set date and time"/>
                             </a>
                         </span>
                     </div>
@@ -29,4 +29,4 @@
             </div>
         </t>
     </t>
-</templates>
\ No newline at end of file
+</templates>
diff --git a/addons/note/views/note_views.xml b/addons/note/views/note_views.xml
index c0a06497c8763408980b036ef256cfab5af6d2c1..772b320dc126df400166a787a2bff3bdfe400b8d 100644
--- a/addons/note/views/note_views.xml
+++ b/addons/note/views/note_views.xml
@@ -97,17 +97,17 @@
                 <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
 
                 <div class="o_dropdown_kanban dropdown">
-                    <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                    <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                         <span class="fa fa-ellipsis-v"/>
                     </a>
-                    <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                        <li><a type="delete">Delete</a></li>
-                        <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                    <ul class="dropdown-menu" role="menu">
+                        <li><a role="menuitem" type="delete">Delete</a></li>
+                        <li role="menuitem" aria-haspopup="true"><ul role="menu" class="oe_kanban_colorpicker" data-field="color"/></li>
                     </ul>
                 </div>
                   <span>
-                    <a name="action_close" type="object" t-if="record.open.raw_value"><i class="fa fa-check"/></a>
-                    <a name="action_open" type="object" t-if="!record.open.raw_value"><i class="fa fa-undo"/></a>
+                    <a name="action_close" type="object" t-if="record.open.raw_value"><i class="fa fa-check" role="img" aria-label="Opened" title="Opened"/></a>
+                    <a name="action_open" type="object" t-if="!record.open.raw_value"><i class="fa fa-undo" role="img" aria-label="Closed" title="Closed"/></a>
                   </span>
                 <!-- kanban note -->
                 <span t-attf-class="oe_kanban_content #{record.open.raw_value ? '' : 'note_text_line_through'}">
@@ -122,7 +122,7 @@
                 <t t-if="record.message_partner_ids.raw_value.length &gt; 1">
                     <div class="clearfix"></div>
                       <t t-foreach="record.message_partner_ids.raw_value" t-as="follower">
-                        <img t-att-src="kanban_image('res.partner', 'image_small', follower)" width="24" height="24" class="oe_kanban_avatar pull-right" t-att-data-member_id="follower"/>
+                        <img t-att-src="kanban_image('res.partner', 'image_small', follower)" width="24" height="24" class="oe_kanban_avatar pull-right" t-att-data-member_id="follower" alt="Follower"/>
                       </t>
                     <div class="clearfix"></div>
                 </t>
diff --git a/addons/pad/static/src/xml/pad.xml b/addons/pad/static/src/xml/pad.xml
index 9a2edc47ffe0e05903e7389d76f8a9d339a7b7f2..f48ade3d7488d6121e879128b3450fedee484f19 100644
--- a/addons/pad/static/src/xml/pad.xml
+++ b/addons/pad/static/src/xml/pad.xml
@@ -11,7 +11,7 @@
             </t>
             <t t-if="widget.mode === 'edit'">
                 <div class="oe_pad_switch_positioner oe_configured">
-                    <span class="fa fa-expand oe_pad_switch" />
+                    <span class="fa fa-expand oe_pad_switch" role="img" aria-label="Switch pad" title="Switch pad"/>
                 </div>
                 <div class="oe_pad_content oe_editing oe_configured" />
             </t>
diff --git a/addons/pad/static/tests/pad_tests.js b/addons/pad/static/tests/pad_tests.js
index f2ab3a42dfa8a851a68da8ebeeadd3b8a21d6f8c..a6b885429a7fb1182aa5c06e22fb7582bc38c9df 100644
--- a/addons/pad/static/tests/pad_tests.js
+++ b/addons/pad/static/tests/pad_tests.js
@@ -184,7 +184,7 @@ QUnit.module('pad widget', {
         });
         var def = form.canBeDiscarded();
 
-        assert.strictEqual($('.modal').length, 0,
+        assert.strictEqual($('[role="dialog"]').length, 0,
             "should have no confirmation modal opened");
 
         assert.strictEqual(def.state(), 'resolved',
@@ -221,7 +221,7 @@ QUnit.module('pad widget', {
         form.$buttons.find('.o_form_button_edit').click();
         var def = form.canBeDiscarded();
 
-        assert.strictEqual($('.modal').length, 0,
+        assert.strictEqual($('[role="dialog"]').length, 0,
             "should have no confirmation modal opened");
 
         assert.strictEqual(def.state(), 'resolved',
diff --git a/addons/payment/data/payment_acquirer_data.xml b/addons/payment/data/payment_acquirer_data.xml
index 6338737f21a8078ad2fa1af1b0822feb0baac7d3..da33107a13d9506fc1a9af02de0c52226ae21f63 100644
--- a/addons/payment/data/payment_acquirer_data.xml
+++ b/addons/payment/data/payment_acquirer_data.xml
@@ -22,8 +22,8 @@
                 A payment gateway to accept online payments via credit cards.
             </p>
             <ul class="list-inline">
-                <li><i class="fa fa-check"/>Online Payment</li>
-                <li><i class="fa fa-check"/>Payment Status Tracking</li>
+                <li><span class="fa fa-check">Online Payment</span></li>
+                <li><span class="fa fa-check">Payment Status Tracking</span></li>
             </ul>
         </field>
         <!-- https://www.buckaroo-payments.com/products/payment-methods/ -->
@@ -45,10 +45,10 @@
                 Ingenico Payment Services (formerly Ogone) supports credit cards, debit cards and bank transfers.
             </p>
             <ul class="list-inline">
-                <li><i class="fa fa-check"/>Online Payment</li>
-                <li><i class="fa fa-check"/>Payment Status Tracking</li>
-                <li><i class="fa fa-check"/>Subscriptions</li>
-                <li><i class="fa fa-check"/>Save Cards</li>
+                <li><span class="fa fa-check">Online Payment</span></li>
+                <li><span class="fa fa-check">Payment Status Tracking</span></li>
+                <li><span class="fa fa-check">Subscriptions</span></li>
+                <li><span class="fa fa-check">Save Cards</span></li>
             </ul>
         </field>
         <!-- https://payment-services.ingenico.com/~/media/files/130806_product_sheet_ingenico_collect_en.ashx?la=en -->
@@ -68,8 +68,8 @@
                 A payment gateway to accept online payments via credit cards, debit cards and bank transfers.
             </p>
             <ul class="list-inline">
-                <li><i class="fa fa-check"/>Online Payment</li>
-                <li><i class="fa fa-check"/>Payment Status Tracking</li>
+                <li><span class="fa fa-check">Online Payment</span></li>
+                <li><span class="fa fa-check">Payment Status Tracking</span></li>
             </ul>
         </field>
         <!-- https://www.adyen.com/payment-methods -->
@@ -94,11 +94,11 @@
                 A payment gateway to accept online payments via credit cards and e-checks.
             </p>
             <ul class="list-inline">
-                <li><i class="fa fa-check"/>Online Payment</li>
-                <li><i class="fa fa-check"/>Payment Status Tracking</li>
-                <li><i class="fa fa-check"/>Subscriptions</li>
-                <li><i class="fa fa-check"/>Save Cards</li>
-                <li><i class="fa fa-check"/>Manual Capture</li>
+                <li><span class="fa fa-check">Online Payment</span></li>
+                <li><span class="fa fa-check">Payment Status Tracking</span></li>
+                <li><span class="fa fa-check">Subscriptions</span></li>
+                <li><span class="fa fa-check">Save Cards</span></li>
+                <li><span class="fa fa-check">Manual Capture</span></li>
             </ul>
         </field>
         <!-- https://www.authorize.net/solutions/merchantsolutions/onlinemerchantaccount/ -->
@@ -134,8 +134,8 @@
                 A payment gateway from Atos Worldline to accept online payments via credit cards.
             </p>
             <ul class="list-inline">
-                <li><i class="fa fa-check"/>Online Payment</li>
-                <li><i class="fa fa-check"/>Payment Status Tracking</li>
+                <li><span class="fa fa-check">Online Payment</span></li>
+                <li><span class="fa fa-check">Payment Status Tracking</span></li>
             </ul>
         </field>
         <!-- http://sips.worldline.com/en-us/home/features/payment-types-and-acquirers.html -->
@@ -161,8 +161,8 @@
                 PayPal is the easiest way to accept payments via Paypal or credit cards.
             </p>
             <ul class="list-inline">
-                <li><i class="fa fa-check"/>Online Payment</li>
-                <li><i class="fa fa-check"/>Payment Status Tracking</li>
+                <li><span class="fa fa-check">Online Payment</span></li>
+                <li><span class="fa fa-check">Payment Status Tracking</span></li>
             </ul>
         </field>
         <!-- https://www.paypal.com/us/selfhelp/article/Which-credit-cards-can-I-accept-with-PayPal-Merchant-Services-FAQ1525#business -->
@@ -186,10 +186,10 @@
                 A payment gateway to accept online payments via credit cards.
             </p>
             <ul class="list-inline">
-                <li><i class="fa fa-check"/>Online Payment</li>
-                <li><i class="fa fa-check"/>Payment Status Tracking</li>
-                <li><i class="fa fa-check"/>Subscriptions</li>
-                <li><i class="fa fa-check"/>Save Cards</li>
+                <li><span class="fa fa-check">Online Payment</span></li>
+                <li><span class="fa fa-check">Payment Status Tracking</span></li>
+                <li><span class="fa fa-check">Subscriptions</span></li>
+                <li><span class="fa fa-check">Save Cards</span></li>
             </ul>
         </field>
         <!--
@@ -215,7 +215,7 @@
                 A generic payment acquirer to send payment instructions to any payment acquirer.
             </p>
             <ul class="list-inline">
-                <li><i class="fa fa-check"/>Online Payment</li>
+                <li><span class="fa fa-check">Online Payment</span></li>
             </ul>
         </field>
     </record>
@@ -230,8 +230,8 @@
                 PayU India is an online payments solutions company serving the Indian market.
             </p>
             <ul class="list-inline">
-                <li><i class="fa fa-check"/>Online Payment</li>
-                <li><i class="fa fa-check"/>Payment Status Tracking</li>
+                <li><span class="fa fa-check">Online Payment</span></li>
+                <li><span class="fa fa-check">Payment Status Tracking</span></li>
             </ul>
         </field>
         <!-- https://www.payumoney.com/selfcare.html?userType=seller
diff --git a/addons/payment/static/src/js/payment_form.js b/addons/payment/static/src/js/payment_form.js
index f28a4747a8e467bf665aee64a7db2e54e77d80fe..0100afeb26c5bc7d5d73b2041da7f59632e116f1 100644
--- a/addons/payment/static/src/js/payment_form.js
+++ b/addons/payment/static/src/js/payment_form.js
@@ -71,12 +71,12 @@ odoo.define('payment.payment_form', function (require) {
                         $(element).trigger("focusout");
                         if (element.dataset.isRequired && element.value.length === 0) {
                                 $(element).closest('div.form-group').addClass('has-error');
-                                $(element).closest('div.form-group').append('<div style="color: red" class="o_invalid_field">' + _.str.escapeHTML("The value is invalid.") + '</div>');
+                                $(element).closest('div.form-group').append('<div style="color: red" class="o_invalid_field" aria-invalid="true">' + _.str.escapeHTML("The value is invalid.") + '</div>');
                                 wrong_input = true;
                         }
                         else if ($(element).closest('div.form-group').hasClass('has-error')) {
                             wrong_input = true;
-                            $(element).closest('div.form-group').append('<div style="color: red" class="o_invalid_field">' + _.str.escapeHTML("The value is invalid.") + '</div>');
+                            $(element).closest('div.form-group').append('<div style="color: red" class="o_invalid_field" aria-invalid="true">' + _.str.escapeHTML("The value is invalid.") + '</div>');
                         }
                     });
 
@@ -234,13 +234,13 @@ odoo.define('payment.payment_form', function (require) {
                     $(element).trigger("focusout");
                     if (element.dataset.isRequired && element.value.length === 0) {
                             $(element).closest('div.form-group').addClass('has-error');
-                            var message = '<div style="color: red" class="o_invalid_field">' + _.str.escapeHTML("The value is invalid.") + '</div>';
+                            var message = '<div style="color: red" class="o_invalid_field" aria-invalid="true">' + _.str.escapeHTML("The value is invalid.") + '</div>';
                             $(element).closest('div.form-group').append(message);
                             wrong_input = true;
                     }
                     else if ($(element).closest('div.form-group').hasClass('has-error')) {
                         wrong_input = true;
-                        var message = '<div style="color: red" class="o_invalid_field">' + _.str.escapeHTML("The value is invalid.") + '</div>';
+                        var message = '<div style="color: red" class="o_invalid_field" aria-invalid="true">' + _.str.escapeHTML("The value is invalid.") + '</div>';
                         $(element).closest('div.form-group').append(message);
                     }
                 });
diff --git a/addons/payment/views/payment_portal_templates.xml b/addons/payment/views/payment_portal_templates.xml
index 1cb4873d5247c9c2dbce1031ec8db75a3f9817b8..440f059e92ebecd545de8c3aa5b0ee5ab6f757ac 100644
--- a/addons/payment/views/payment_portal_templates.xml
+++ b/addons/payment/views/payment_portal_templates.xml
@@ -9,7 +9,7 @@
                   <div class="row">
                         <div class="col-sm-6">
                             <ol class="breadcrumb mt8">
-                                <li><a href="/my/home"><i class="fa fa-home"/></a></li>
+                                <li><a href="/my/home"><i class="fa fa-home" role="img" aria-label="Home" title="Home"/></a></li>
                                 <li>Payment Methods</li>
                             </ol>
                         </div>
@@ -46,7 +46,7 @@
             <div class="wrap">
                 <div class="container o_website_payment">
                     <h1>Payment</h1>
-                    <div t-if="error_msg" class="alert alert-danger col-md-7">
+                    <div t-if="error_msg" class="alert alert-danger col-md-7" role="alert">
                         <t t-esc="error_msg"/>
                     </div>
                     <div class="row mt32 mb32">
@@ -58,7 +58,7 @@
                                 <t t-set="prepare_tx_url" t-value="'/website_payment/transaction/v2/' + str(amount) + '/' + str(currency.id) + '/' + reference"/>
                                 <t t-set="form_action" t-value="'/website_payment/token/v2/' + str(amount) + '/' + str(currency.id) + '/' + reference"/>
                             </t>
-                            <div t-if="not (s2s_acquirers or form_acquirers)" class="alert alert-danger">
+                            <div t-if="not (s2s_acquirers or form_acquirers)" class="alert alert-danger" role="alert">
                                 <p>No payment acquirer found.</p>
                                 <p>Please configure a payment acquirer.</p>
                             </div>
@@ -78,7 +78,7 @@
                     <div class="row">
                         <div class="col-md-6">
                             <div class="form-horizontal">
-                                <div t-attf-class="alert alert-#{status}" t-raw="message"/>
+                                <div t-attf-class="alert alert-#{status}" t-raw="message" role="status"/>
                                 <div class="form-group">
                                     <label for="form_partner_name" class="col-sm-3 control-label">From</label>
                                     <div class="col-sm-9">
@@ -98,10 +98,10 @@
                                     </div>
                                 </div>
                                 <div class="col-sm-12">
-                                    <a t-attf-class="btn btn-#{status} pull-right" href="/my/home"><i class="fa fa-arrow-circle-right"/> Back to My Account</a>
+                                    <a role="button" t-attf-class="btn btn-#{status} pull-right" href="/my/home"><span class="fa fa-arrow-circle-right"> Back to My Account</span></a>
                                 </div>
                                 <div class="col-sm-6 col-sm-offset-6 text-muted mt16">
-                                    <span t-field="tx.acquirer_id.image_small" t-att-title="tx.acquirer_id.name" t-options='{"widget": "image", "style":"max-width: 60px; display: inline-block"}'/>
+                                    <span t-field="tx.acquirer_id.image_small" t-att-title="tx.acquirer_id.name" role="img" t-att-aria-label="tx.acquirer_id.name" t-options='{"widget": "image", "style":"max-width: 60px; display: inline-block"}'/>
                                     <span>Processed by <t t-esc="tx.acquirer_id.name"/>.</span>
                                 </div>
                             </div>
@@ -120,23 +120,23 @@
         -->
         <t t-set="thanks_msg" t-value="payment_tx_id.acquirer_id.post_msg"/>
         <t t-set="thanks_msg" t-value="thanks_msg and thanks_msg != '&lt;p&gt;&lt;br&gt;&lt;/p&gt;' and thanks_msg"/>
-        <div t-if="payment_tx_id and payment_tx_id.state == 'pending'" class="alert alert-warning alert-dismissable">
-            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+        <div t-if="payment_tx_id and payment_tx_id.state == 'pending'" class="alert alert-warning alert-dismissable" role="status">
+            <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
             <span t-if='payment_tx_id.acquirer_id.pending_msg' t-raw="payment_tx_id.acquirer_id.pending_msg"/>
             <span t-if='thanks_msg' t-raw="thanks_msg"/>
         </div>
-        <div t-if="payment_tx_id and payment_tx_id.state == 'authorized'" class="alert alert-success alert-dismissable">
-            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+        <div t-if="payment_tx_id and payment_tx_id.state == 'authorized'" class="alert alert-success alert-dismissable" role="alert">
+            <button type="button" class="close" data-dismiss="alert" title="Dismiss" aria-label="Dismiss">&amp;times;</button>
             Your payment has been authorized.
             <span t-if='thanks_msg' t-raw="thanks_msg"/>
         </div>
         <div t-if="payment_tx_id and payment_tx_id.state == 'done'" class="alert alert-success alert-dismissable">
-            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+            <button type="button" class="close" data-dismiss="alert" title="Dismiss" aria-label="Dismiss">&amp;times;</button>
             <span t-if='payment_tx_id.acquirer_id.done_msg' t-raw="payment_tx_id.acquirer_id.done_msg"/>
             <span t-if='thanks_msg' t-raw="thanks_msg"/>
         </div>
         <div t-if="payment_tx_id and payment_tx_id.state == 'cancel'" class="alert alert-danger alert-dismissable">
-            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+            <button type="button" class="close" data-dismiss="alert" title="Dismiss" aria-label="Dismiss">&amp;times;</button>
             <span t-if='payment_tx_id.acquirer_id.cancel_msg' t-raw="payment_tx_id.acquirer_id.cancel_msg"/>
         </div>
         <div t-if="payment_tx_id.state_message">
diff --git a/addons/payment/views/payment_templates.xml b/addons/payment/views/payment_templates.xml
index 4fd6ac22ca81ef13450144f5587aac77302f79e0..12bdf7736564b1061391433fe698612511607269 100644
--- a/addons/payment/views/payment_templates.xml
+++ b/addons/payment/views/payment_templates.xml
@@ -128,20 +128,20 @@
                             <input t-if="mode == 'payment'" type="radio" name="pm_id" t-att-value="pm.id" t-att-checked="checked_pm_id == pm.id"/>
                             <span class="payment_option_name" t-esc="pm.name"/>
                             <t t-if="pm.verified">
-                                <i class="fa fa-check text-success" title="This payment method is verified by our system."></i>
+                                <i class="fa fa-check text-success" title="This payment method is verified by our system." role="img" aria-label="Ok"></i>
                             </t>
                             <t t-else="">
-                                <i class="fa fa-close text-danger" title="This payment method has not been verified by our system."></i>
+                                <i class="fa fa-close text-danger" title="This payment method has not been verified by our system." role="img" aria-label="Not verified"></i>
                             </t>
                         </label>
                         <button t-if="mode == 'manage'" name="delete_pm" t-att-value="pm.id" class="btn btn-primary btn-xs pull-right">
-                            <i class="fa fa-trash"></i> Delete
+                            <span class="fa fa-trash"> Delete</span>
                         </button>
                     </div>
                 </t>
             </div>
             <div t-if='back_button_txt' class="pull-left">
-                <a t-att-href="back_button_link or '#'" t-att-class="back_button_class or 'btn btn-lg btn-default'">
+                <a role="button" t-att-href="back_button_link or '#'" t-att-class="back_button_class or 'btn btn-lg btn-default'">
                     <i t-if="back_button_icon_class" t-attf-class="fa {{back_button_icon_class}}"/>
                     <t t-esc="back_button_txt"/>
                 </a>
diff --git a/addons/payment/views/payment_views.xml b/addons/payment/views/payment_views.xml
index a3ad281e7853459bcef58378654b1565bda87cd4..5c19a13c4fc569d3e6976e68ac12686f3b6c0bca 100644
--- a/addons/payment/views/payment_views.xml
+++ b/addons/payment/views/payment_views.xml
@@ -143,7 +143,7 @@
                             <t t-set="installed" t-value="!record.module_id.value || (record.module_id.value &amp;&amp; record.module_state.raw_value === 'installed')"/>
                             <div t-attf-class="oe_kanban_global_click #{installed and record.website_published.raw_value ? 'oe_kanban_color_5' : 'oe_kanban_color_white'}">
                                 <div class="o_kanban_image">
-                                    <img type="open" t-att-src="kanban_image('payment.acquirer', 'image_small', record.id.raw_value)"/>
+                                    <img type="open" t-att-src="kanban_image('payment.acquirer', 'image_small', record.id.raw_value)" alt="Acquirer"/>
                                 </div>
                                 <div class="o_payment_acquirer_desc">
                                     <h3 class="mt4"><t t-esc="record.name.value"/></h3>
diff --git a/addons/payment_stripe/static/src/xml/stripe_templates.xml b/addons/payment_stripe/static/src/xml/stripe_templates.xml
index c5966fe627414d1ebdfb7927af1d885e8f6005ea..2591f6e53854673582e985eabaa08b651cf7b366 100644
--- a/addons/payment_stripe/static/src/xml/stripe_templates.xml
+++ b/addons/payment_stripe/static/src/xml/stripe_templates.xml
@@ -1,19 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <templates id="template" xml:space="preserve">
 <t t-name="stripe.error">
-    <div class="modal fade">
+    <div role="dialog" class="modal fade">
         <div class="modal-dialog">
             <div class="modal-content">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                <header class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                     <h4 class="modal-title">Error</h4>
-                </div>
-                <div class="modal-body">
+                </header>
+                <main class="modal-body">
                     <t t-esc="msg"></t>
-                </div>
-                <div class="modal-footer">
-                    <a href="#" class="btn btn-link btn-xs" data-dismiss="modal">Close</a>
-                </div>
+                </main>
+                <footer class="modal-footer">
+                    <a role="button" href="#" class="btn btn-link btn-xs" data-dismiss="modal">Close</a>
+                </footer>
             </div>
         </div>
     </div>
diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js
index 1b59aa34cbac7c9b1e0741bb49bf95e157b3ce65..c2de94aa33e3de89f573a1fdf3c1f16540b88442 100644
--- a/addons/point_of_sale/static/src/js/screens.js
+++ b/addons/point_of_sale/static/src/js/screens.js
@@ -836,6 +836,16 @@ var ProductListWidget = PosBaseWidget.extend({
             options.click_product_action(product);
         };
 
+        this.keypress_product_handler = function(ev){
+            if (e.which != 13 && e.which != 32) {
+                // Key is not space or enter
+                return;
+            }
+            ev.preventDefault();
+            var product = self.pos.db.get_product_by_id(this.dataset.productId);
+            options.click_product_action(product);
+        };
+
         this.product_list = options.product_list || [];
         this.product_cache = new DomCache();
 
@@ -908,6 +918,7 @@ var ProductListWidget = PosBaseWidget.extend({
         for(var i = 0, len = this.product_list.length; i < len; i++){
             var product_node = this.render_product(this.product_list[i]);
             product_node.addEventListener('click',this.click_product_handler);
+            product_node.addEventListener('keypress',this.keypress_product_handler);
             list_container.appendChild(product_node);
         }
     },
diff --git a/addons/point_of_sale/static/src/xml/pos.xml b/addons/point_of_sale/static/src/xml/pos.xml
index 195514ec51beabdfc7d1d9eb6394fd0c4bc6bdcd..a63581d43d2ef12396f9e3fae21b50eec7e51ca8 100644
--- a/addons/point_of_sale/static/src/xml/pos.xml
+++ b/addons/point_of_sale/static/src/xml/pos.xml
@@ -5,7 +5,7 @@
         <div class="pos">
             <div class="pos-topheader">
                 <div class="pos-branding">
-                    <img class="pos-logo" src="/point_of_sale/static/src/img/logo.png" />
+                    <img class="pos-logo" src="/point_of_sale/static/src/img/logo.png" alt="Logo"/>
                     <span class="placeholder-UsernameWidget"></span>
                 </div>
                 <div class="pos-rightheader">
@@ -52,16 +52,16 @@
         <div class="oe_status js_synch">
             <span class='js_msg oe_hidden'>0</span>
             <div class="js_connected oe_icon oe_green">
-                <i class='fa fa-fw fa-wifi'></i>
+                <i class='fa fa-fw fa-wifi' role="img" aria-label="Synchronisation Connected" title="Synchronisation Connected"></i>
             </div>
             <div class="js_connecting oe_icon oe_hidden">
-                <i class='fa fa-fw fa-spin fa-spinner'></i>
+                <i class='fa fa-fw fa-spin fa-spinner' role="img" aria-label="Synchronisation Connecting" title="Synchronisation Connecting"></i>
             </div>
             <div class="js_disconnected oe_icon oe_red oe_hidden">
-                <i class='fa fa-fw fa-wifi'></i>
+                <i class='fa fa-fw fa-wifi' role="img" aria-label="Synchronisation Disconnected" title="Synchronisation Disconnected"></i>
             </div>
             <div class="js_error oe_icon oe_red oe_hidden">
-                <i class='fa fa-fw fa-warning'></i>
+                <i class='fa fa-fw fa-warning' role="img" aria-label="Synchronisation Error" title="Synchronisation Error"></i>
             </div>
         </div>
     </t>
@@ -70,16 +70,16 @@
         <div class="oe_status js_proxy">
             <span class='js_msg oe_orange oe_hidden'></span>
             <div class="js_connected oe_icon oe_green">
-                <i class='fa fa-fw fa-sitemap'></i>
+                <i class='fa fa-fw fa-sitemap' role="img" aria-label="Proxy Connected" title="Proxy Connected"></i>
             </div>
             <div class="js_connecting oe_icon oe_hidden">
-                <i class='fa fa-fw fa-spin fa-spinner'></i>
+                <i class='fa fa-fw fa-spin fa-spinner' role="img" aria-label="Connecting to Proxy" title="Connecting to Proxy"></i>
             </div>
             <div class="js_warning oe_icon oe_orange oe_hidden">
-                <i class='fa fa-fw fa-sitemap'></i>
+                <i class='fa fa-fw fa-sitemap' role="img" aria-label="Proxy Warning" title="Proxy Warning"></i>
             </div>
             <div class="js_disconnected oe_icon oe_red oe_hidden">
-                <i class='fa fa-fw fa-sitemap'></i>
+                <i class='fa fa-fw fa-sitemap' role="img" aria-label="Proxy Disconnected" title="Proxy Disconnected"></i>
             </div>
         </div>
     </t>
@@ -87,7 +87,7 @@
     <t t-name="SaleDetailsButton">
         <div class="oe_status">
             <div class="js_connected oe_icon">
-                <i class='fa fa-fw fa-print'></i>
+                <i class='fa fa-fw fa-print' role="img" aria-label="Print" title="Print"></i>
             </div>
         </div>
     </t>
@@ -96,13 +96,13 @@
         <div class="oe_status">
             <span class="oe_customer_display_text"></span>
             <div class="js_warning oe_icon oe_orange oe_hidden">
-                <i class='fa fa-fw fa-desktop'></i>
+                <i class='fa fa-fw fa-desktop' role="img" aria-label="Client Screen Warning" title="Client Screen Warning"></i>
             </div>
              <div class="js_disconnected oe_icon oe_red">
-                <i class='fa fa-fw fa-desktop'></i>
+                <i class='fa fa-fw fa-desktop' role="img" aria-label="Client Screen Disconnected" title="Client Screen Disconnected"></i>
             </div>
             <div class="js_connected oe_icon oe_green oe_hidden">
-                <i class='fa fa-fw fa-desktop'></i>
+                <i class='fa fa-fw fa-desktop' role="img" aria-label="Client Screen Connected" title="Client Screen Connected"></i>
             </div>
         </div>
     </t>
@@ -125,20 +125,20 @@
 
     <t t-name="SetFiscalPositionButton">
         <div class='control-button'>
-            <i class='fa fa-book' /> <t t-esc='widget.get_current_fiscal_position_name()'/>
+            <i class='fa fa-book' role="img" aria-label="Set fiscal position" title="Set fiscal position"/> <t t-esc='widget.get_current_fiscal_position_name()'/>
         </div>
     </t>
 
     <t t-name="SetPricelistButton">
         <div class='control-button o_pricelist_button'>
-            <i class='fa fa-th-list' /> <t t-esc='widget.get_current_pricelist_name()'/>
+            <i class='fa fa-th-list' role="img" aria-label="Price list" title="Price list"/> <t t-esc='widget.get_current_pricelist_name()'/>
         </div>
     </t>
 
     <t t-name="ActionpadWidget">
         <div class="actionpad">
             <button t-attf-class='button set-customer #{ ( widget.pos.get_client() and widget.pos.get_client().name.length > 10) ? "decentered" : "" }' >
-                <i class='fa fa-user' /> 
+                <i class='fa fa-user' role="img" aria-label="Customer" title="Customer"/>
                 <t t-if="widget.pos.get_client()">
                     <t t-esc="widget.pos.get_client().name" />
                 </t>
@@ -148,7 +148,7 @@
             </button>
             <button class='button pay'>
                 <div class='pay-circle'>
-                    <i class='fa fa-chevron-right' /> 
+                    <i class='fa fa-chevron-right' role="img" aria-label="Pay" title="Pay"/>
                 </div>
                 Payment
             </button>
@@ -176,7 +176,7 @@
             <button class="input-button number-char">0</button>
             <button class="input-button number-char">.</button>
             <button class="input-button numpad-backspace">
-                <img style="pointer-events: none;" src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" />
+                <img style="pointer-events: none;" src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" alt="Backspace"/>
             </button>
         </div>
     </t>
@@ -184,7 +184,7 @@
     <t t-name="CategoryButton">
         <span class='category-button js-category-switch' t-att-data-category-id="category.id" >
             <div class="category-img">
-                <img t-att-src="image_url" />
+                <img t-att-src="image_url" alt="Category"/>
             </div>
             <div class="category-name">
                 <t t-esc="category.name"/>
@@ -204,12 +204,12 @@
             <div class="breadcrumbs">
                 <span class="breadcrumb">
                     <span class=" breadcrumb-button breadcrumb-home js-category-switch">
-                        <i class='fa fa-home'></i>
+                        <i class='fa fa-home' role="img" aria-label="Home" title="Home"></i>
                     </span>
                 </span>
                 <t t-foreach="widget.breadcrumb" t-as="category">
                     <span class="breadcrumb">
-                        <img src="/point_of_sale/static/src/img/bc-arrow-big.png" class="breadcrumb-arrow" />
+                        <img src="/point_of_sale/static/src/img/bc-arrow-big.png" class="breadcrumb-arrow" alt="Slash"/>
                         <span class="breadcrumb-button js-category-switch" t-att-data-category-id="category.id">
                             <t t-esc="category.name"/>
                         </span>
@@ -293,8 +293,7 @@
             <div class="screen-content">
                 <div class="top-content">
                     <span class='button back'>
-                        <i class='fa fa-angle-double-left'></i>
-                        Back
+                        <span class='fa fa-angle-double-left'>Back</span>
                     </span>
                     <h1 class='product-name'><t t-esc="widget.get_product_name()" /></h1>
                 </div>
@@ -309,8 +308,7 @@
                         123.14 €
                     </div>
                     <div class='buy-product'>
-                        Order
-                        <i class='fa fa-angle-double-right'></i>
+                        <span class='fa fa-suffix-angle-double-right'>Order </span>
                     </div>
                 </div>
             </div>
@@ -329,17 +327,17 @@
         <section class='client-details edit'>
             <div class='client-picture'>
                 <t t-if='!partner.id'>
-                    <i class='fa fa-camera'></i>
+                    <i class='fa fa-camera' role="img" aria-label="Picture" title="Picture"></i>
                 </t>
                 <t t-if='partner.id'>
-                    <img t-att-src='widget.partner_icon_url(partner.id)' />
+                    <img t-att-src='widget.partner_icon_url(partner.id)' alt="Partner"/>
                 </t>
                 <input type='file' class='image-uploader'></input>   
             </div>
             <input class='detail client-name' name='name' t-att-value='partner.name' placeholder='Name'></input>
             <div class='edit-buttons'>
-                <div class='button undo'><i class='fa fa-undo' /></div>
-                <div class='button save'><i class='fa fa-floppy-o' /></div>
+                <div class='button undo'><i class='fa fa-undo' role="img" aria-label="Undo" title="Undo"/></div>
+                <div class='button save'><i class='fa fa-floppy-o' role="img" aria-label="Save" title="Save"/></div>
             </div>
             <div class='client-details-box clearfix'>
                 <div class='client-details-left'>
@@ -402,11 +400,11 @@
     <t t-name="ClientDetails">
         <section class='client-details'>
             <div class='client-picture'>
-                <img t-att-src='widget.partner_icon_url(partner.id)' />
+                <img t-att-src='widget.partner_icon_url(partner.id)' alt="Partner logo"/>
             </div>
             <div class='client-name'><t t-esc='partner.name' /></div>
             <div class='edit-buttons'>
-                <div class='button edit'><i class='fa fa-pencil-square' /></div>
+                <div class='button edit'><i class='fa fa-pencil-square' role="img" aria-label="Edit" title="Edit"/></div>
             </div>
             <div class='client-details-box clearfix'>
                 <div class='client-details-left'>
@@ -476,21 +474,19 @@
             <div class="screen-content">
                 <section class="top-content">
                     <span class='button back'>
-                        <i class='fa fa-angle-double-left'></i>
-                        Cancel
+                        <span class='fa fa-angle-double-left'>Cancel</span>
                     </span>
                     <span class='searchbox'>
                         <input placeholder='Search Customers' />
                         <span class='search-clear'></span>
                     </span>
                     <span class='searchbox'></span>
-                    <span class='button new-customer'>
+                    <span class='button new-customer' role="img" aria-label="Add a customer" title="Add a customer">
                         <i class='fa fa-user'></i>
                         <i class='fa fa-plus'></i>
                     </span>
                     <span class='button next oe_hidden highlight'>
-                        Select Customer
-                        <i class='fa fa-angle-double-right'></i>
+                        <span class='fa fa-angle-double-right'>Select Customer</span>
                     </span>
                 </section>
                 <section class="full-content">
@@ -573,7 +569,7 @@
                                 </t>
                                     
                                 <td class='col-name' > <t t-esc='line.name' /> </td>
-                                <td class='delete-button' t-att-data-cid='line.cid'> <i class='fa fa-times-circle' /> </td>
+                                <td class='delete-button' t-att-data-cid='line.cid' aria-label="Delete" title="Delete"> <i class='fa fa-times-circle' /> </td>
                             </tr>
                         </t>
                         <t t-if='!line.selected'>
@@ -586,7 +582,7 @@
                                      </t>
                                 </td>
                                 <td class='col-name'> <t t-esc='line.name' /> </td>
-                                <td class='delete-button' t-att-data-cid='line.cid'> <i class='fa fa-times-circle' /> </td>
+                                <td class='delete-button' t-att-data-cid='line.cid' aria-label="Delete" title="Delete"> <i class='fa fa-times-circle' /> </td>
                             </tr>
                         </t>
                     </t>
@@ -622,7 +618,7 @@
             <button class="input-button number-char" data-action='0'>0</button>
             <button class="input-button number-char" t-att-data-action='widget.decimal_point'><t t-esc='widget.decimal_point'/></button>
             <button class="input-button numpad-backspace" data-action='BACKSPACE' >
-                <img src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" />
+                <img src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" alt="Backspace"/>
             </button>
         </div>
     </t>
@@ -643,13 +639,11 @@
             <div class='screen-content'>
                 <div class='top-content'>
                     <span class='button back'>
-                        <i class='fa fa-angle-double-left'></i>
-                        Back
+                        <i class='fa fa-angle-double-left'>Back</i>
                     </span>
                     <h1>Payment</h1>
                     <span class='button next'>
-                        Validate
-                        <i class='fa fa-angle-double-right'></i>
+                        <i class='fa fa-angle-double-right'>Validate</i>
                     </span>
                 </div>
                 <div class='left-content pc40 touch-scrollable scrollable-y'>
@@ -668,7 +662,7 @@
 
                     <div class='payment-buttons'>
                         <div class='button js_set_customer'>
-                            <i class='fa fa-user' /> 
+                            <i class='fa fa-user' role="img" aria-label="Customer" title="Customer"/> 
                             <span class='js_customer_name'> 
                                 <t t-if="widget.pos.get_client()">
                                     <t t-esc="widget.pos.get_client().name" />
@@ -681,18 +675,18 @@
                         <t t-if='widget.pos.config.module_account_invoicing'>
                             <t t-if='widget.pos.get_order()'>
                                 <div t-attf-class='button js_invoice #{ widget.pos.get_order().is_to_invoice() ? "highlight" : ""} '>
-                                    <i class='fa fa-file-text-o' /> Invoice
+                                    <i class='fa fa-file-text-o'> Invoice</i>
                                 </div>
                             </t>
                         </t>
                         <t t-if='widget.pos.config.tip_product_id'>
                             <div class='button js_tip'>
-                                <i class='fa fa-heart' /> Tip 
+                                <i class='fa fa-heart'> Tip</i>
                             </div>
                         </t>
                         <t t-if='widget.pos.config.iface_cashdrawer'>
                             <div class='button js_cashdrawer'>
-                                <i class='fa fa-archive' /> Open Cashbox
+                                <i class='fa fa-archive'> Open Cashbox</i>
                             </div>
                         </t>
                      </div>
@@ -707,13 +701,12 @@
                 <div class='top-content'>
                     <h1>Change: <span class='change-value'>0.00</span></h1>
                     <span class='button next'>
-                        Next Order
-                        <i class='fa fa-angle-double-right'></i>
+                        <span class='fa fa-suffix-angle-double-right'>Next Order </span>
                     </span>
                 </div>
                 <div class="centered-content touch-scrollable">
                     <div class="button print">
-                        <i class='fa fa-print'></i> Print Receipt
+                        <i class='fa fa-print'> Print Receipt</i>
                     </div>
                     <div class="pos-receipt-container">
                     </div>
@@ -733,7 +726,7 @@
     <t t-name="XmlReceipt">
         <receipt align='center' width='40' value-thousands-separator='' >
             <t t-if='receipt.company.logo'>
-                <img t-att-src='receipt.company.logo' />
+                <img t-att-src='receipt.company.logo' alt="Logo"/>
                 <br/>
             </t>
             <t t-if='!receipt.company.logo'>
@@ -898,7 +891,7 @@
     <t t-name="SaleDetailsReport">
         <receipt align='center' width='40' value-thousands-separator='' >
             <t t-if='pos.company_logo_base64'>
-                <img t-att-src='pos.company_logo_base64' />
+                <img t-att-src='pos.company_logo_base64' alt="Logo"/>
                 <br/>
             </t>
             <t t-if='!pos.company_logo_base64'>
@@ -980,7 +973,7 @@
 
 
     <t t-name="PopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-alert">
                 <p class="title"><t t-esc=" widget.options.title || 'Alert' " /></p>
                 <p class="body"><t t-esc=" widget.options.body || '' "/></p>
@@ -994,7 +987,7 @@
     </t>
 
     <t t-name="ErrorPopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-error">
                 <p class="title"><t t-esc=" widget.options.title || 'Error' " /></p>
                 <p class="body"><t t-esc=" widget.options.body || '' "/></p>
@@ -1008,69 +1001,69 @@
     </t>
 
     <t t-name="ErrorTracebackPopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-error">
-                <p class="title"><t t-esc=" widget.options.title || 'Error' " /></p>
-                <p class="body traceback"><t t-esc=" widget.options.body || '' "/></p>
-                <div class="footer">
+                <header class="title"><t t-esc=" widget.options.title || 'Error' " /></header>
+                <main class="body traceback"><t t-esc=" widget.options.body || '' "/></main>
+                <footer class="footer">
                     <div class="button cancel">
                         Ok
                     </div>
                     <a><div class="button icon download_error_file oe_hidden">
-                        <i class="fa fa-arrow-down"></i>
+                        <i class="fa fa-arrow-down" role="img" aria-label="Download error" title="Download error"></i>
                     </div></a>
                     <div class="button icon download">
-                        <i class="fa fa-download"></i>
+                        <i class="fa fa-download" role="img" aria-label="Download" title="Download"></i>
                     </div>
                     <div class="button icon email">
-                        <i class="fa fa-paper-plane"></i>
+                        <i class="fa fa-paper-plane" role="img" aria-label="Send by email" title="Send by email"></i>
                     </div>
-                </div>
+                </footer>
             </div>
         </div>
     </t>
 
     <t t-name="ErrorBarcodePopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-barcode">
-                <p class="title">Unknown Barcode
+                <header class="title">Unknown Barcode
                     <br />
                     <span class='barcode'><t t-esc="widget.options.barcode" /></span>
-                </p>
-                <p class="body">
+                </header>
+                <main class="body">
                     The Point of Sale could not find any product, client, employee
                     or action associated with the scanned barcode.
-                </p>
-                <div class="footer">
+                </main>
+                <footer class="footer">
                     <div class="button cancel">
                         Ok
                     </div>
-                </div>
+                </footer>
             </div>
         </div>
     </t>
 
     <t t-name="ConfirmPopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-confirm">
-                <p class="title"><t t-esc=" widget.options.title || 'Confirm ?' " /></p>
-                <p class="body"><t t-esc="  widget.options.body || '' "/></p>
-                <div class="footer">
+                <header class="title"><t t-esc=" widget.options.title || 'Confirm ?' " /></header>
+                <main class="body"><t t-esc="  widget.options.body || '' "/></main>
+                <footer class="footer">
                     <div class="button confirm">
                         Confirm 
                     </div>
                     <div class="button cancel">
                         Cancel 
                     </div>
-                </div>
+                </footer>
             </div>
         </div>
     </t>
 
     <t t-name="TextInputPopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-textinput">
-                <p class="title"><t t-esc=" widget.options.title || '' " /></p>
+                <header class="title"><t t-esc=" widget.options.title || '' " /></header>
                 <input type='text' t-att-value="widget.options.value || ''"></input>
                 <div class="footer">
                     <div class="button confirm">
@@ -1085,10 +1078,10 @@
     </t>
 
     <t t-name="PackLotLinePopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-text">
-                <p class="title"><t t-esc=" widget.options.title || '' " /></p>
-                <div class='packlot-lines'>
+                <header class="title"><t t-esc=" widget.options.title || '' " /></header>
+                <main class='packlot-lines'>
                     <t t-if="widget.options.pack_lot_lines">
                         <t t-set="focus_lot_line" t-value="widget.focus_model || widget.options.pack_lot_lines.get_empty_model()"/>
                         <t t-foreach='widget.options.pack_lot_lines.models' t-as='lot_line'>
@@ -1097,43 +1090,43 @@
                                 t-att-autofocus="lot_line === focus_lot_line ? 'autofocus': undefined"
                                 class="popup-input packlot-line-input"
                                 placeholder="Serial/Lot Number"/>
-                            <i class="oe_link_icon remove-lot fa fa-trash-o"></i>
+                            <i class="oe_link_icon remove-lot fa fa-trash-o" role="img" aria-label="Remove" title="Remove"></i>
                         </t>
                     </t>
-                </div>
-                <div class="footer">
+                </main>
+                <footer class="footer">
                     <div class="button confirm">
                         Ok
                     </div>
                     <div class="button cancel">
                         Cancel
                     </div>
-                </div>
+                </footer>
             </div>
         </div>
     </t>
 
     <t t-name="TextAreaPopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-textinput">
-                <p class="title"><t t-esc=" widget.options.title || '' " /></p>
+                <title class="title"><t t-esc=" widget.options.title || '' " /></title>
                 <textarea rows="10" cols="40"><t t-esc="widget.options.value" /></textarea>
-                <div class="footer">
+                <footer class="footer">
                     <div class="button confirm">
                         Ok 
                     </div>
                     <div class="button cancel">
                         Cancel 
                     </div>
-                </div>
+                </footer>
             </div>
         </div>
     </t>
 
     <t t-name="SelectionPopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-selection">
-                <p class="title"><t t-esc=" widget.options.title || 'Select' " /></p>
+                <header class="title"><t t-esc=" widget.options.title || 'Select' " /></header>
                 <div class='selection scrollable-y touch-scrollable'>
                     <t t-foreach="widget.list || []" t-as="item">
                         <div t-attf-class="selection-item {{ widget.is_selected.call(widget, item.item) ? 'selected' : '' }}" t-att-data-item-index='item_index'>
@@ -1141,19 +1134,19 @@
                         </div>
                     </t>
                 </div>
-                <div class="footer">
+                <footer class="footer">
                     <div class="button cancel">
                         Cancel 
                     </div>
-                </div>
+                </footer>
             </div>
         </div>
     </t>
 
     <t t-name="NumberPopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-number">
-                <p class="title"><t t-esc=" widget.options.title || '' " /></p>
+                <header class="title"><t t-esc=" widget.options.title || '' " /></header>
                 <div class='popup-input value active'>
                     <t t-esc='widget.inputbuffer' />
                 </div>
@@ -1189,26 +1182,26 @@
                     <button class="input-button number-char" data-action='0'>0</button>
                     <button class="input-button number-char dot" t-att-data-action='widget.decimal_separator'><t t-esc='widget.decimal_separator'/></button>
                     <button class="input-button numpad-backspace" data-action='BACKSPACE' >
-                        <img style="pointer-events: none;" src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" />
+                        <img style="pointer-events: none;" src="/point_of_sale/static/src/img/backspace.png" width="24" height="21" alt="Backspace"/>
                     </button>
                     <br />
                 </div>
-                <div class="footer centered">
+                <footer class="footer centered">
                     <div class="button cancel">
                         Cancel 
                     </div>
                     <div class="button confirm">
                         Ok
                     </div>
-                </div>
+                </footer>
             </div>
         </div>
     </t>
 
     <t t-name="OrderImportPopupWidget">
-        <div class="modal-dialog">
+        <div role="dialog" class="modal-dialog">
             <div class="popup popup-import">
-                <p class="title">Finished Importing Orders</p>
+                <header class="title">Finished Importing Orders</header>
                 <t t-if="widget.options and widget.options.report">
                     <t t-set="report" t-value="widget.options.report" />
                     <t t-set="unpaid_skipped" t-value="(report.unpaid_skipped_existing || 0) + (report.unpaid_skipped_session || 0)" />
@@ -1232,19 +1225,19 @@
                         </t>
                     </ul>
                 </t>
-                <div class="footer">
+                <footer class="footer">
                     <div class="button cancel">
                         Ok
                     </div>
-                </div>
+                </footer>
             </div>
         </div>
     </t>
 
     <t t-name="Product">
-        <span class='product' t-att-data-product-id="product.id">
+        <article class='product' t-att-data-product-id="product.id" tabindex="0" t-attf-aria-labelledby="article_product_#{product.id}">
             <div class="product-img">
-                <img t-att-src='image_url' /> 
+                <img t-att-src='image_url' alt="Product image"/> 
                 <t t-if="!product.to_weight">
                     <span class="price-tag">
                         <t t-esc="widget.format_currency(product.get_price(pricelist, 1),'Product Price')"/>
@@ -1256,10 +1249,10 @@
                     </span>
                 </t>
             </div>
-            <div class="product-name">
+            <div class="product-name" t-attf-id="article_product_#{product.id}">
                 <t t-esc="product.display_name"/>
             </div>
-        </span>
+        </article>
     </t>
 
     <t t-name="Orderline">
@@ -1267,7 +1260,10 @@
             <span class="product-name">
                 <t t-esc="line.get_product().display_name"/>
                 <t t-if="line.get_product().tracking!=='none'">
-                    <i t-attf-class="oe_link_icon fa fa-list oe_icon line-lot-icon #{line.has_valid_product_lot() ? 'oe_green' : 'oe_red' }"/>
+                    <i class="oe_link_icon fa fa-list oe_icon line-lot-icon oe_green" t-if="line.has_valid_product_lot()"
+                       aria-label="Valid product lot" role="img" title="Valid product lot"/>
+                    <i class="oe_link_icon fa fa-list oe_icon line-lot-icon oe_red" t-if="not(line.has_valid_product_lot())"
+                       aria-label="Invalid product lot" role="img" title="Invalid product lot"/>
                 </t>
             </span>
             <span class="price">
@@ -1305,7 +1301,7 @@
                 <div class="order">
                     <t t-if="orderlines.length === 0" >
                         <div class='order-empty'>
-                            <i class='fa fa-shopping-cart' />
+                            <i class='fa fa-shopping-cart' role="img" aria-label="Shopping cart" title="Shopping cart"/>
                             <h1>Your shopping cart is empty</h1>
                         </div>
                     </t>
@@ -1330,7 +1326,7 @@
     <t t-name="DebugWidget">
         <div class="debug-widget oe_hidden">
             <h1>Debug Window</h1>
-            <div class="toggle"><i class='fa fa-times' /></div>
+            <div class="toggle" title="Dismiss" role="img" aria-label="Dismiss"><i class='fa fa-times' /></div>
             <div class="content">
                 <p class="category">Electronic Scale</p>
                 <ul>
@@ -1387,7 +1383,7 @@
                 t-attf-pattern="[0-9]+([\\#{widget.decimal_point || '.' }][0-9]+)?"
                 step="0.01" t-att-value="line.get_amount_str()" />
             <span  class='paymentline-delete'>
-                <img src="/point_of_sale/static/src/img/search_reset.gif" />
+                <img src="/point_of_sale/static/src/img/search_reset.gif" alt="Delete"/>
             </span>
         </div>
     </t>
@@ -1399,7 +1395,7 @@
             </td>
             <td class="paymentline-amount pos-right-align">
                 <input type="number" step="0.01" t-att-value="line.get_amount_str()" />
-                <span class='delete-payment-line'><img src="/point_of_sale/static/src/img/search_reset.gif" /></span>
+                <span class='delete-payment-line'><img src="/point_of_sale/static/src/img/search_reset.gif" alt="Delete"/></span>
             </td>
         </tr>
     </t>
@@ -1427,10 +1423,10 @@
                 </t>
             </span>
             <span class="order-button square neworder-button">
-                <i class='fa fa-plus' />
+                <i class='fa fa-plus' role="img" aria-label="New order" title="New order"/>
             </span>
             <span class="order-button square deleteorder-button">
-                <i class='fa fa-minus' />
+                <i class='fa fa-minus' role="img" aria-label="Delete order" title="Delete order"/>
             </span>
         </div>
     </t>
diff --git a/addons/point_of_sale/views/point_of_sale_dashboard.xml b/addons/point_of_sale/views/point_of_sale_dashboard.xml
index 87460fcfc2894c267af67ac258bb4abeec9c9bb0..b87f14b3b12ab8d9132969caebf4d559030cd254 100644
--- a/addons/point_of_sale/views/point_of_sale_dashboard.xml
+++ b/addons/point_of_sale/views/point_of_sale_dashboard.xml
@@ -82,7 +82,7 @@
                                     <div class="o_secondary mt16"><t t-esc="record.pos_session_username.value || unused_message"/></div>
                                 </div>
                                 <div class="o_kanban_manage_button_section">
-                                    <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" /></a>
+                                    <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
                                 </div>
                             </div>
                             <div class="container o_kanban_card_content">
@@ -118,31 +118,31 @@
                                         </div>
                                     </div>
                                 </div>
-                            </div><div class="container o_kanban_card_manage_pane dropdown-menu">
+                            </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
                                 <div class="row">
                                     <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_view">
-                                        <div class="o_kanban_card_manage_title">
+                                        <div role="menuitem" class="o_kanban_card_manage_title">
                                             <span>View</span>
                                         </div>
-                                        <div>
+                                        <div role="menuitem">
                                             <a name="%(action_pos_session_filtered)d" type="action">Sessions</a>
                                         </div>
-                                        <div>
+                                        <div role="menuitem">
                                             <a name="%(action_pos_order_filtered)d" type="action">Sales Orders</a>
                                         </div>
                                     </div>
                                     <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_new">
-                                        <div class="o_kanban_card_manage_title">
+                                        <div role="menuitem" class="o_kanban_card_manage_title">
                                             <span>Reporting</span>
                                         </div>
-                                        <div>
+                                        <div role="menuitem">
                                             <a name="%(action_report_pos_order_all_filtered)d" type="action">Orders</a>
                                         </div>
                                     </div>
                                 </div>
 
                                 <div t-if="widget.editable" class="o_kanban_card_manage_settings row" groups="point_of_sale.group_pos_manager">
-                                    <div class="col-xs-12">
+                                    <div role="menuitem" class="col-xs-12">
                                         <a type="edit">Settings</a>
                                     </div>
                                 </div>
diff --git a/addons/point_of_sale/views/pos_category_view.xml b/addons/point_of_sale/views/pos_category_view.xml
index 87307940351e896400565ca7972c902088a0e5b6..a83d1a40f0596af526e0a2d2099ca5a25af07198 100644
--- a/addons/point_of_sale/views/pos_category_view.xml
+++ b/addons/point_of_sale/views/pos_category_view.xml
@@ -43,7 +43,7 @@
                         <div t-attf-class="oe_kanban_global_click">
                             <div class="row">
                                 <div class="col-xs-4">
-                                    <img height="100" width="100" t-att-src="kanban_image('pos.category', 'image_medium', record.id.raw_value)"/>
+                                    <img height="100" width="100" t-att-src="kanban_image('pos.category', 'image_medium', record.id.raw_value)" alt="Category"/>
                                 </div>
                                 <div class="col-xs-8">
                                     <strong class="o_kanban_record_title"><field name="name"/></strong>
diff --git a/addons/point_of_sale/views/pos_config_view.xml b/addons/point_of_sale/views/pos_config_view.xml
index 3deb441ce917194b709ddfc900a0ee1b0d0635c6..66ae56dbe1129e4d9b7fc6c38e03929b1b99c023 100644
--- a/addons/point_of_sale/views/pos_config_view.xml
+++ b/addons/point_of_sale/views/pos_config_view.xml
@@ -283,7 +283,7 @@
                     <div class="row mt16 o_settings_container">
                         <div class="col-xs-12 col-md-6 o_setting_box" id="payment_methods">
                             <div class="o_setting_right_pane">
-                                <label string="Payment Methods"/>
+                                <span class="o_form_label">Payment Methods</span>
                                 <div class="text-muted">
                                     Payment methods available
                                 </div>
@@ -331,7 +331,7 @@
                     <div class="row mt16 o_settings_container" id="receipt">
                         <div id="order_reference" class="col-xs-12 col-md-6 o_setting_box" groups="base.group_no_one">
                             <div class="o_setting_right_pane">
-                                <label string="Order Reference"/>
+                                <span class="o_form_label">Order Reference</span>
                                 <div class="text-muted">
                                     Generation of your order references
                                 </div>
@@ -440,7 +440,7 @@
                     <div class="row mt16 o_settings_container">
                         <div class="col-xs-12 col-md-6 o_setting_box">
                             <div class="o_setting_right_pane">
-                                <label string="Journal Entries"/>
+                                <span class="o_form_label">Journal Entries</span>
                                 <div class="text-muted">
                                     Configuration for journal entries of PoS orders
                                 </div>
diff --git a/addons/point_of_sale/views/pos_order_view.xml b/addons/point_of_sale/views/pos_order_view.xml
index e1388c947d2db1d5a223d5e34aa88b73c3e10eb8..906d88445078b7c4d60688d88ad0f9d514628837 100644
--- a/addons/point_of_sale/views/pos_order_view.xml
+++ b/addons/point_of_sale/views/pos_order_view.xml
@@ -122,7 +122,7 @@
                                 <div class="o_kanban_record_headings">
                                     <strong class="o_kanban_record_title"><span><t t-esc="record.user_id.value"/></span></strong>
                                 </div>
-                                <strong><span class="badge"><i class="fa fa-money"/> <field name="amount_total"/></span></strong>
+                                <strong><span class="badge"><i class="fa fa-money" role="img" aria-label="Amount" title="Amount"/> <field name="amount_total"/></span></strong>
                             </div>
                             <div class="row">
                                 <div class="col-xs-12">
diff --git a/addons/point_of_sale/views/pos_session_view.xml b/addons/point_of_sale/views/pos_session_view.xml
index 5c2c961c7a155e9ff44ef51227245128d689039d..e901a693e5ca81f2fce58979a8b461f581914ad3 100644
--- a/addons/point_of_sale/views/pos_session_view.xml
+++ b/addons/point_of_sale/views/pos_session_view.xml
@@ -172,7 +172,7 @@
                                     <span><field name="start_at" /></span>
                                 </div>
                                 <div class="oe_kanban_bottom_right">
-                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                                 </div>
                             </div>
                         </div>
diff --git a/addons/point_of_sale/views/pos_templates.xml b/addons/point_of_sale/views/pos_templates.xml
index 57895f2637b314341338306fa4341c9c3779df1b..953fab6db6b5e6b8d1435980ccfe96a8782f8922 100644
--- a/addons/point_of_sale/views/pos_templates.xml
+++ b/addons/point_of_sale/views/pos_templates.xml
@@ -117,7 +117,7 @@
             <li data-choose-image="true" data-no-preview="true"><a href="#"><b>Set Custom Image...</b></a></li>
             <li class="hidden pos-use_default_logo" data-background=""><a href="#">Default company logo</a></li>
             <li class="divider"/>
-            <li data-toggle-class="pos-hidden"><a href="#"><i class="fa fa-eye-slash"/>Hide</a></li>
+            <li data-toggle-class="pos-hidden"><a href="#"><i class="fa fa-eye-slash">Hide</i></a></li>
         </div>
     </div>
 </template>
diff --git a/addons/point_of_sale/views/report_userlabel.xml b/addons/point_of_sale/views/report_userlabel.xml
index 104d6d8a5b4151c8bb6eb184e280167c47a96965..911606e11c1c2c6000be2b11c32e92e3c431f844 100644
--- a/addons/point_of_sale/views/report_userlabel.xml
+++ b/addons/point_of_sale/views/report_userlabel.xml
@@ -14,7 +14,7 @@
                         </thead>
                         <tbody>
                             <tr>
-                                <td><img t-if="user.barcode" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN13', user.barcode, 300, 50)" style="width:100%;height:35%;"/></td>
+                                <td><img t-if="user.barcode" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN13', user.barcode, 300, 50)" style="width:100%;height:35%;" alt="Barcode"/></td>
                                 <td><strong t-field="user.name"/></td>
                             </tr>
                         </tbody>
diff --git a/addons/point_of_sale/views/res_config_settings_views.xml b/addons/point_of_sale/views/res_config_settings_views.xml
index 78620638c29423071d06a967b97106d0a27f89a5..74a9c769b3bb84136e18eb16055fde390c485565 100644
--- a/addons/point_of_sale/views/res_config_settings_views.xml
+++ b/addons/point_of_sale/views/res_config_settings_views.xml
@@ -13,7 +13,7 @@
                         <div class="col-xs-12 col-md-6 o_setting_box" title="This tax is applied to any new product created in the catalog.">
                             <div class="o_setting_right_pane">
                                 <div>
-                                    <label string="Default Sales Tax"/>
+                                    <label string="Default Sales Tax" for="sale_tax_id"/>
                                     <div class="text-muted">
                                         Default sales tax for products
                                     </div>
diff --git a/addons/point_of_sale/views/res_partner_view.xml b/addons/point_of_sale/views/res_partner_view.xml
index 5a532aec6e5b682e31b79cf9085c46db9dbfebae..aca19bd1f10eef854b9a06ea402b5fd10ee975ad 100644
--- a/addons/point_of_sale/views/res_partner_view.xml
+++ b/addons/point_of_sale/views/res_partner_view.xml
@@ -26,7 +26,7 @@
                     <field name="pos_order_count"/>
                 </field>
                 <xpath expr="//div[hasclass('oe_kanban_partner_links')]" position="inside">
-                    <span t-if="record.pos_order_count.value>0" class="badge"><i class="fa fa-fw fa-shopping-bag"/><t t-esc="record.pos_order_count.value"/></span>
+                    <span t-if="record.pos_order_count.value>0" class="badge"><i class="fa fa-fw fa-shopping-bag" role="img" aria-label="Shopping cart" title="Shopping cart"/><t t-esc="record.pos_order_count.value"/></span>
                 </xpath>
             </field>
         </record>
diff --git a/addons/point_of_sale/wizard/pos_open_statement.xml b/addons/point_of_sale/wizard/pos_open_statement.xml
index 9ae3d8450a480975dd5f251db48b3138b5764865..264b4d6cb35a9719a3419577eb7c05e80b17dcc7 100644
--- a/addons/point_of_sale/wizard/pos_open_statement.xml
+++ b/addons/point_of_sale/wizard/pos_open_statement.xml
@@ -6,7 +6,7 @@
             <field name="arch" type="xml">
                 <form string="Open Statements">
                     <separator string="Do you want to open cash registers?"/>
-                    <label string="The system will open all cash registers, so that you can start recording payments. We suggest you to control the opening balance of each register, using their CashBox tab."/>
+                    <span class="o_form_label">The system will open all cash registers, so that you can start recording payments. We suggest you to control the opening balance of each register, using their CashBox tab.</span>
                     <footer>
                         <button name="open_statement" type="object" string="Open Registers" class="btn-primary"/>
                         <button string="Cancel" class="btn-default" special="cancel"/>
diff --git a/addons/portal/static/src/xml/portal_chatter.xml b/addons/portal/static/src/xml/portal_chatter.xml
index 7ff4c1acfd2f95a7afbc7295183452d36dbcce7e..cebc9384bf482f80ff3329524e7dd7b6d16ed917 100644
--- a/addons/portal/static/src/xml/portal_chatter.xml
+++ b/addons/portal/static/src/xml/portal_chatter.xml
@@ -24,7 +24,7 @@
             <t t-if="widget.options['display_composer']">
                 <div class="media">
                     <div class="media-left">
-                        <img class="o_portal_chatter_avatar pull-left" t-attf-src="/web/image/res.partner/#{widget.options['partner_id']}/image_small/50x50"/>
+                        <img alt="Avatar" class="o_portal_chatter_avatar pull-left" t-attf-src="/web/image/res.partner/#{widget.options['partner_id']}/image_small/50x50"/>
                     </div>
                     <div class="media-body">
                         <form class="o_portal_chatter_composer_form" t-attf-action="/mail/chatter_post" method="POST">
@@ -36,7 +36,7 @@
                                 <input type='hidden' name="token" t-att-value="widget.options['token']" t-if="widget.options['token']"/>
                                 <input type='hidden' name="sha_in" t-att-value="widget.options['sha_in']" t-if="widget.options['sha_in']"/>
                                 <input type='hidden' name="sha_time" t-att-value="widget.options['sha_time']" t-if="widget.options['sha_time']"/>
-                                <div class="alert alert-danger mt8 mb0 o_portal_chatter_composer_error" style="display:none;">
+                                <div class="alert alert-danger mt8 mb0 o_portal_chatter_composer_error" style="display:none;" role="alert">
                                     Oops! Something went wrong. Try to reload the page and log in.
                                 </div>
                                 <button t-attf-class="o_portal_chatter_composer_btn btn btn-primary mt8 o_website_message_post_helper" type="submit">Send</button>
@@ -85,7 +85,7 @@
             <t t-if="!_.isEmpty(widget.get('pager'))">
                 <ul class="pagination" t-if="widget.get('pager')['pages'].length &gt; 1">
                     <li t-if="widget.get('pager')['page'] != widget.get('pager')['page_previous']" t-att-data-page="widget.get('pager')['page_previous']" class="o_portal_chatter_pager_btn">
-                        <a href="#"><i class="fa fa-chevron-left"/></a>
+                        <a href="#"><i class="fa fa-chevron-left" role="img" aria-label="Previous" title="Previous"/></a>
                     </li>
                     <t t-foreach="widget.get('pager')['pages']" t-as="page">
                         <li t-att-data-page="page" t-att-class="page == widget.get('pager')['page'] ? 'o_portal_chatter_pager_btn active' : 'o_portal_chatter_pager_btn'">
@@ -93,7 +93,7 @@
                         </li>
                     </t>
                     <li t-if="widget.get('pager')['page'] != widget.get('pager')['page_next']" t-att-data-page="widget.get('pager')['page_next']" class="o_portal_chatter_pager_btn">
-                        <a href="#"><i class="fa fa-chevron-right"/></a>
+                        <a href="#"><i class="fa fa-chevron-right" role="img" aria-label="Next" title="Next"/></a>
                     </li>
                 </ul>
             </t>
diff --git a/addons/portal/static/src/xml/portal_signature.xml b/addons/portal/static/src/xml/portal_signature.xml
index 3ef5c8f1ea09586cfdc67f593c21e801de490ccd..50a8349491213654c135c6bcec4298991d6d26a8 100644
--- a/addons/portal/static/src/xml/portal_signature.xml
+++ b/addons/portal/static/src/xml/portal_signature.xml
@@ -9,7 +9,7 @@
             <div class="panel panel-default mt16 mb0" id="o_portal_sign_draw">
                 <div class="panel-heading">
                     <div class="pull-right">
-                        <a id="o_portal_sign_clear" class="btn btn-xs">Clear</a>
+                        <a role="button" id="o_portal_sign_clear" class="btn btn-xs">Clear</a>
                     </div>
                     <strong>Draw your signature</strong>
                 </div>
@@ -21,7 +21,7 @@
         </form>
     </t>
     <t t-name="portal.portal_signature_success">
-        <div class="alert alert-success" role="alert">
+        <div class="alert alert-success" role="status">
             <strong>Thank You !</strong><br />
             <span t-esc="widget.success"/>
             <a t-att-href="widget.redirect_url">Click here to see your document.</a>
diff --git a/addons/portal/views/portal_templates.xml b/addons/portal/views/portal_templates.xml
index b9d3c4b0707d82d455854777568e8a452b620903..56cb88203f905a1b411070a110e4a00c476ab0f4 100644
--- a/addons/portal/views/portal_templates.xml
+++ b/addons/portal/views/portal_templates.xml
@@ -74,7 +74,7 @@
                     <div t-if="not no_breadcrumbs" class="row">
                         <div t-attf-class="col-sm-12">
                             <ol t-if="page_name != 'home'" class="breadcrumb o_portal_submenu">
-                                <li><a href="/my/home"><i class="fa fa-home"/></a></li>
+                                <li><a href="/my/home" aria-label="Home" title="Home"><i class="fa fa-home"/></a></li>
                                 <li t-if="page_name == 'my_details'">Your Details</li>
                             </ol>
                             <t t-call='portal.record_pager'/>
@@ -94,7 +94,7 @@
                                     <t t-call="portal.portal_contact"/>
                                 </div>
                                 <div class="o_portal_my_details">
-                                    <h3 class="page-header">Your Details <a href="/my/account" class="btn btn-default btn-xs">Change</a></h3>
+                                    <h3 class="page-header">Your Details <a role="button" href="/my/account" class="btn btn-default btn-xs">Change</a></h3>
                                     <div t-field="user_id.partner_id" t-options='{"widget": "contact", "fields": ["email", "phone", "address", "name"]}'/>
                                 </div>
                                 <div class="o_my_archives" t-if="archive_groups">
@@ -276,7 +276,7 @@
                     <div class="col-md-8">
                         <div class="row">
                             <div class="col-md-12">
-                              <div t-if="error_message" class="alert alert-danger">
+                              <div t-if="error_message" class="alert alert-danger" role="alert">
                                   <t t-foreach="error_message" t-as="err"><t t-esc="err"/><br /></t>
                               </div>
                             </div>
@@ -343,8 +343,7 @@
                         </div>
                         <div class="clearfix">
                             <button type="submit" class="btn btn-primary pull-right mb32 ">
-                                Confirm
-                                <span class="fa fa-long-arrow-right" />
+                                <span class="fa fa-long-arrow-right">Confirm</span>
                             </button>
                         </div>
                     </div>
@@ -356,8 +355,8 @@
     <template id="record_pager" name="Portal Record Pager">
         <t t-if='prev_record or next_record'>
           <div class="ml8 record_pager btn-group btn-group-xs pull-right" role="group">
-            <a t-att-class="'btn btn-default %s' % ('disabled' if not prev_record else '')" t-att-href="prev_record or '#'" ><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
-            <a t-att-class="'btn btn-default %s' % ('disabled' if not next_record else '')" t-att-href="next_record or '#'" ><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
+            <a role="button" t-att-class="'btn btn-default %s' % ('disabled' if not prev_record else '')" t-att-href="prev_record or '#'" ><i class="fa fa-arrow-left" role="img" aria-label="Previous" title="Previous"></i></a>
+            <a role="button" t-att-class="'btn btn-default %s' % ('disabled' if not next_record else '')" t-att-href="next_record or '#'" ><i class="fa fa-arrow-right" role="img" aria-label="Next" title="Previous"></i></a>
           </div>
         </t>
     </template>
diff --git a/addons/pos_discount/static/src/xml/discount_templates.xml b/addons/pos_discount/static/src/xml/discount_templates.xml
index 65a38afb97d1b564bcd9d002f53307e4299df681..8287f54f5a9cd22a5c19963f56b4462dbeca2e7c 100644
--- a/addons/pos_discount/static/src/xml/discount_templates.xml
+++ b/addons/pos_discount/static/src/xml/discount_templates.xml
@@ -3,7 +3,7 @@
 
     <t t-name="DiscountButton">
         <div class='control-button js_discount'>
-            <i class='fa fa-tag' /> Discount
+            <i class='fa fa-tag'> Discount</i>
         </div>
     </t>
 
diff --git a/addons/pos_mercury/static/src/xml/pos_mercury.xml b/addons/pos_mercury/static/src/xml/pos_mercury.xml
index acf830e254301aac14571adebf120597b007738e..5ec3587efae113bdd51b1b9edd40aa447e8dc477 100644
--- a/addons/pos_mercury/static/src/xml/pos_mercury.xml
+++ b/addons/pos_mercury/static/src/xml/pos_mercury.xml
@@ -2,7 +2,7 @@
 
 <templates id="template" inherit_id="point_of_sale.template">
   <t t-name="PaymentTransactionPopupWidget">
-    <div class="modal-dialog">
+    <div role="dialog" class="modal-dialog">
       <div class="popup">
         <p class="title">Electronic Payment</p>
         <p class="body"></p>
diff --git a/addons/pos_mercury/views/pos_config_setting_views.xml b/addons/pos_mercury/views/pos_config_setting_views.xml
index 99f0f9d786f6069adf3015a078b43ccf7a060a05..83b850636d8381878ae90a00ff52c0067f117be4 100644
--- a/addons/pos_mercury/views/pos_config_setting_views.xml
+++ b/addons/pos_mercury/views/pos_config_setting_views.xml
@@ -10,7 +10,7 @@
                     <button name="%(pos_mercury.action_configuration_form)d" icon="fa-arrow-right" type="action" string="Vantiv Accounts" class="btn-link"/>
                 </div>
                 <div>
-                    <a href="https://www.odoo.com/page/point-of-sale-hardware#part_8" target="_blank"><i class="fa fa-fw fa-arrow-right"/>Buy a card reader</a>
+                    <a href="https://www.odoo.com/page/point-of-sale-hardware#part_8" target="_blank"><span class="fa fa-fw fa-arrow-right">Buy a card reader</span></a>
                 </div>
             </div>
         </field>
diff --git a/addons/pos_reprint/static/src/xml/reprint.xml b/addons/pos_reprint/static/src/xml/reprint.xml
index fa782fbd2f7095360d7fd1f6fe45d49746a6bc65..8183db3e353fefa0d6f17cdfc32b727f6484c640 100644
--- a/addons/pos_reprint/static/src/xml/reprint.xml
+++ b/addons/pos_reprint/static/src/xml/reprint.xml
@@ -3,14 +3,13 @@
 
     <t t-name="ReprintButton">
         <div class='control-button js_reprint'>
-            <i class="fa fa-retweet"></i> Reprint Receipt
+            <span class="fa fa-retweet"> Reprint Receipt</span>
         </div>
     </t>
 
     <t t-name="ReprintReceiptScreenWidget" t-extend="ReceiptScreenWidget">
         <t t-jquery="div.top-content" t-operation="inner">
-            <span class='button back'>
-                <i class='fa fa-angle-double-left'></i>
+            <span class='button back fa fa-angle-double-left'>
                 Back
             </span>
         </t>
diff --git a/addons/pos_restaurant/static/src/xml/floors.xml b/addons/pos_restaurant/static/src/xml/floors.xml
index 5e6e54d0c1580c0dfc5b33554b8fe15191bafdcd..7606ff776de85421de96f82dc593d9ebc5c43f4c 100644
--- a/addons/pos_restaurant/static/src/xml/floors.xml
+++ b/addons/pos_restaurant/static/src/xml/floors.xml
@@ -34,7 +34,7 @@
 
     <t t-name="TransferOrderButton">
         <div class='control-button'>
-            <i class='fa fa-arrow-right' /> Transfer
+            <span class='fa fa-arrow-right' > Transfer</span>
         </div>
     </t>
 
@@ -79,7 +79,7 @@
 
     <t t-name="BackToFloorButton">
         <span class="order-button floor-button">
-            <i class='fa fa-angle-double-left'/>
+            <i class='fa fa-angle-double-left' role="img" aria-label="Back to floor" title="Back to floor"/>
             <t t-esc="floor.name"/>
             <span class='table-name'>
                 ( <t t-esc="table.name" /> )
@@ -104,60 +104,60 @@
                 </t>
                 <div class='floor-map' t-att-style='widget.get_floor_style()' >
                     <div class='empty-floor oe_hidden'>
-                        This floor has no tables yet, use the <i class="fa fa-plus"></i> button in the editing toolbar to create new tables.
+                        This floor has no tables yet, use the <i class="fa fa-plus" role="img" aria-label="Add button" title="Add button"></i> button in the editing toolbar to create new tables.
                     </div>
                     <div class='tables'></div>
-                    <span t-if="widget.pos.user.role == 'manager'" class='edit-button editing'><i class='fa fa-pencil'></i></span>
+                    <span t-if="widget.pos.user.role == 'manager'" class='edit-button editing'><i class='fa fa-pencil' role="img" aria-label="Edit" title="Edit"></i></span>
                     <div class='edit-bar oe_hidden'>
                         <span class='edit-button new-table'>
-                            <i class='fa fa-plus'></i>
+                            <i class='fa fa-plus' role="img" aria-label="Add" title="Add"></i>
                         </span>
                         <span class='edit-button dup-table needs-selection'>
-                            <i class='fa fa-files-o'></i>
+                            <i class='fa fa-files-o' role="img" aria-label="Duplicate" title="Duplicate"></i>
                         </span>
                         <span class='edit-button rename needs-selection'>
-                            <i class='fa fa-font'></i>
+                            <i class='fa fa-font' role="img" aria-label="Rename" title="Rename"></i>
                         </span>
                         <span class='edit-button seats needs-selection'>
-                            <i class='fa fa-user'></i>
+                            <i class='fa fa-user' role="img" aria-label="Seats" title="Seats"></i>
                         </span>
                         <span class='edit-button shape needs-selection'>
-                            <span class='button-option square'><i class='fa fa-square-o'></i></span>
-                            <span class='button-option round oe_hidden'><i class='fa fa-circle-o'></i></span>
+                            <span class='button-option square'><i class='fa fa-square-o' role="img" aria-label="Square Shape" title="Square Shape"></i></span>
+                            <span class='button-option round oe_hidden'><i class='fa fa-circle-o' role="img" aria-label="Round Shape" title="Round Shape"></i></span>
                         </span> 
                         <span class='edit-button color'>
-                            <i class='fa fa-tint'></i>
+                            <i class='fa fa-tint' role="img" aria-label="Tint" title="Tint"></i>
                             <div class='color-picker fg-picker oe_hidden'>
-                                <div  class='close-picker'>
+                                <div  class='close-picker' title="Close" role="img" aria-label="Close">
                                     <i class='fa fa-times' />
                                 </div>
-                                <span class='color tl'  style='background-color:#EB6D6D' />
-                                <span class='color'     style='background-color:#35D374' />
-                                <span class='color tr'  style='background-color:#6C6DEC' />
-                                <span class='color'     style='background-color:#EBBF6D' />
-                                <span class='color'     style='background-color:#EBEC6D' />
-                                <span class='color'     style='background-color:#AC6DAD' />
-                                <span class='color bl'  style='background-color:#6C6D6D' />
-                                <span class='color'     style='background-color:#ACADAD' />
-                                <span class='color br'  style='background-color:#4ED2BE' />
+                                <span class='color tl'  style='background-color:#EB6D6D' role="img" aria-label="Red" title="Red"/>
+                                <span class='color'     style='background-color:#35D374' role="img" aria-label="Green" title="Green"/>
+                                <span class='color tr'  style='background-color:#6C6DEC' role="img" aria-label="Blue" title="Blue"/>
+                                <span class='color'     style='background-color:#EBBF6D' role="img" aria-label="Orange" title="Orange"/>
+                                <span class='color'     style='background-color:#EBEC6D' role="img" aria-label="Yellow" title="Yellow"/>
+                                <span class='color'     style='background-color:#AC6DAD' role="img" aria-label="Purple" title="Purple"/>
+                                <span class='color bl'  style='background-color:#6C6D6D' role="img" aria-label="Grey" title="Grey"/>
+                                <span class='color'     style='background-color:#ACADAD' role="img" aria-label="Light grey" title="Light grey"/>
+                                <span class='color br'  style='background-color:#4ED2BE' role="img" aria-label="Turquoise" title="Turquoise"/>
                             </div>
                             <div class='color-picker bg-picker oe_hidden'>
-                                <div  class='close-picker'>
+                                <div  class='close-picker' title="Close" role="img" aria-label="Close">
                                     <i class='fa fa-times' />
                                 </div>
-                                <span class='color tl'  style='background-color:rgb(244, 149, 149)' />
-                                <span class='color'     style='background-color:rgb(130, 233, 171)' />
-                                <span class='color tr'  style='background-color:rgb(136, 137, 242)' />
-                                <span class='color'     style='background-color:rgb(255, 214, 136)' />
-                                <span class='color'     style='background-color:rgb(254, 255, 154)' />
-                                <span class='color'     style='background-color:rgb(209, 171, 210)' />
-                                <span class='color bl'  style='background-color:rgb(75, 75, 75)'    />
-                                <span class='color'     style='background-color:rgb(210, 210, 210)' />
-                                <span class='color br'  style='background-color:rgb(127, 221, 236)' />
+                                <span class='color tl'  style='background-color:rgb(244, 149, 149)' role="img" aria-label="Red" title="Red"/>
+                                <span class='color'     style='background-color:rgb(130, 233, 171)' role="img" aria-label="Green" title="Green"/>
+                                <span class='color tr'  style='background-color:rgb(136, 137, 242)' role="img" aria-label="Blue" title="Blue"/>
+                                <span class='color'     style='background-color:rgb(255, 214, 136)' role="img" aria-label="Orange" title="Orange"/>
+                                <span class='color'     style='background-color:rgb(254, 255, 154)' role="img" aria-label="Yellow" title="Yellow"/>
+                                <span class='color'     style='background-color:rgb(209, 171, 210)' role="img" aria-label="Purple" title="Purple"/>
+                                <span class='color bl'  style='background-color:rgb(75, 75, 75)'    role="img" aria-label="Grey" title="Grey"/>
+                                <span class='color'     style='background-color:rgb(210, 210, 210)' role="img" aria-label="Light grey" title="Light grey"/>
+                                <span class='color br'  style='background-color:rgb(127, 221, 236)' role="img" aria-label="Turquoise" title="Turquoise"/>
                             </div>
                         </span>
                         <span class='edit-button trash needs-selection'>
-                            <i class='fa fa-trash'></i>
+                            <i class='fa fa-trash' role="img" aria-label="Delete" title="Delete"></i>
                         </span>
                     </div>
                     
diff --git a/addons/pos_restaurant/static/src/xml/multiprint.xml b/addons/pos_restaurant/static/src/xml/multiprint.xml
index 282d07421c2dfb8844da41e6da4186813e5e2b2a..8a57465562a03ef7e99c98d213534e604592c627 100644
--- a/addons/pos_restaurant/static/src/xml/multiprint.xml
+++ b/addons/pos_restaurant/static/src/xml/multiprint.xml
@@ -2,8 +2,7 @@
 <templates id="template" xml:space="preserve">
 
     <t t-name="SubmitOrderButton">
-        <span class="control-button order-submit">
-            <i class="fa fa-cutlery"></i>
+        <span class="control-button order-submit fa fa-cutlery">
             Order
         </span>
     </t>
diff --git a/addons/pos_restaurant/static/src/xml/notes.xml b/addons/pos_restaurant/static/src/xml/notes.xml
index 931a91ce0578e0a160f3ac6e827455d6d7f4fc73..2ce586f266cab6519ab0b6736680d4fd4e510046 100644
--- a/addons/pos_restaurant/static/src/xml/notes.xml
+++ b/addons/pos_restaurant/static/src/xml/notes.xml
@@ -5,7 +5,7 @@
         <t t-jquery=".info-list" t-operation="append">
             <t t-if="line.get_note()">
                 <li class="info orderline-note">
-                    <i class='fa fa-tag'/><t t-esc="line.get_note()" />
+                    <i class='fa fa-tag' role="img" aria-label="Note" title="Note"/><t t-esc="line.get_note()" />
                 </li>
             </t>
         </t>
@@ -13,7 +13,7 @@
 
     <t t-name="OrderlineNoteButton">
         <div class='control-button'>
-            <i class='fa fa-tag' /> Note
+            <span class='fa fa-tag'> Note</span>
         </div>
     </t>
     
diff --git a/addons/pos_restaurant/static/src/xml/printbill.xml b/addons/pos_restaurant/static/src/xml/printbill.xml
index 0c3f5ae75300501fc794c9d1d94700c72c5d4477..31a6e0772d20938776c7cd72f80a38b5028670fd 100644
--- a/addons/pos_restaurant/static/src/xml/printbill.xml
+++ b/addons/pos_restaurant/static/src/xml/printbill.xml
@@ -6,18 +6,16 @@
             <div class='screen-content'>
                 <div class='top-content'>
                     <span class='button back'>
-                        <i class='fa fa-angle-double-left'></i>
-                        Back
+                        <span class='fa fa-angle-double-left'> Back</span>
                     </span>
                     <h1>Bill Printing</h1>
                     <span class='button next'>
-                        Ok 
-                        <i class='fa fa-angle-double-right'></i>
+                        <span class='fa fa-suffix-angle-double-right'> Ok</span>
                     </span>
                 </div>
                 <div class="centered-content">
                     <div class="button print">
-                        <i class='fa fa-print'></i> Print 
+                        <span class='fa fa-print'> Print</span>
                     </div>
                     <div class="pos-receipt-container">
                     </div>
@@ -28,15 +26,14 @@
 
     <t t-name="PrintBillButton">
         <span class="control-button order-printbill">
-            <i class="fa fa-print"></i>
-            Bill
+            <span class="fa fa-print"> Bill</span>
         </span>
     </t>
 
     <t t-name="BillReceipt">
         <receipt align='center' width='40' value-thousands-separator='' >
             <t t-if='receipt.company.logo'>
-                <img t-att-src='receipt.company.logo' />
+                <img t-att-src='receipt.company.logo' alt="Logo"/>
                 <br/>
             </t>
             <t t-if='!receipt.company.logo'>
diff --git a/addons/pos_restaurant/static/src/xml/splitbill.xml b/addons/pos_restaurant/static/src/xml/splitbill.xml
index afca40714279ae9ba03b9e17f31e06ab3bc421c9..8c5d8bc58b85c13f7352ab8fd3cdfd66c20c23b1 100644
--- a/addons/pos_restaurant/static/src/xml/splitbill.xml
+++ b/addons/pos_restaurant/static/src/xml/splitbill.xml
@@ -3,8 +3,7 @@
 
     <t t-name="SplitbillButton">
         <span class="control-button order-split">
-            <i class="fa fa-files-o"></i>
-            Split
+            <span class="fa fa-files-o"> Split</span>
         </span>
     </t>
 
@@ -58,8 +57,7 @@
             <div class='screen-content'>
                 <div class='top-content'>
                     <span class='button back'>
-                        <i class='fa fa-angle-double-left'></i>
-                        Back
+                        <span class='fa fa-angle-double-left'> Back</span>
                     </span>
                     <h1>Bill Splitting</h1>
                 </div>
@@ -75,7 +73,7 @@
                     </div>
                     <div class='paymentmethods'>
                         <div class='button payment'>
-                            <i class='fa fa-chevron-right' /> Payment
+                            <span class='fa fa-chevron-right'> Payment</span>
                         </div>
                     </div>
                 </div>
diff --git a/addons/pos_restaurant/views/pos_config_views.xml b/addons/pos_restaurant/views/pos_config_views.xml
index 5eb19f82fcc3083053f41c8c367ac7a08362033d..84a266d196a1d0d17cccc079bba6fb80be756ced 100644
--- a/addons/pos_restaurant/views/pos_config_views.xml
+++ b/addons/pos_restaurant/views/pos_config_views.xml
@@ -16,7 +16,7 @@
                     </div>
                     <div class="o_setting_right_pane">
                         <label for="iface_printbill"/>
-                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants"/>
+                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants" role="img" aria-label="For bars and restaurants"/>
                         <div class="text-muted">
                             Allow to print bill before payment
                         </div>
@@ -30,7 +30,7 @@
                     </div>
                     <div class="o_setting_right_pane">
                         <label for="iface_splitbill"/>
-                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants"/>
+                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants" role="img" aria-label="For bars and restaurants"/>
                         <div class="text-muted">
                             Split total or order lines
                         </div>
@@ -45,7 +45,7 @@
                     </div>
                     <div class="o_setting_right_pane">
                         <label for="tip_product_id" string="Tips"/>
-                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants"/>
+                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants" role="img" aria-label="For bars and restaurants"/>
                         <div class="text-muted">
                             Accept customer tips or convert their change to a tip
                         </div>
@@ -67,7 +67,7 @@
                     </div>
                     <div class="o_setting_right_pane">
                         <label for="is_order_printer"/>
-                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants"/>
+                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants" role="img" aria-label="For bars and restaurants"/>
                         <div class="text-muted">
                             Print orders at the kitchen, at the bar, etc.
                         </div>
@@ -92,7 +92,7 @@
                     </div>
                     <div class="o_setting_right_pane">
                         <label for="is_table_management"/>
-                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants"/>
+                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants" role="img" aria-label="For bars and restaurants"/>
                         <div class="text-muted">
                             Manage table orders
                         </div>
@@ -115,7 +115,7 @@
                     </div>
                     <div class="o_setting_right_pane">
                         <label for="iface_orderline_notes"/>
-                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants"/>
+                        <span class="fa fa-lg fa-cutlery" title="For bars and restaurants" role="img" aria-label="For bars and restaurants"/>
                         <div class="text-muted">
                             Add notes to orderlines
                         </div>
diff --git a/addons/product/report/product_product_templates.xml b/addons/product/report/product_product_templates.xml
index 912ef7f749662d7084adf888a40c2edf1175b347..2e918ee71e4a7cc043038c4cd85e4652489dba81 100644
--- a/addons/product/report/product_product_templates.xml
+++ b/addons/product/report/product_product_templates.xml
@@ -17,9 +17,9 @@
             <tbody>
                 <tr style="width: 1in;">
                     <td style="border: 2px solid black;text-align: center; vertical-align: middle;" class="col-xs-5">
-                        <img t-if="product.barcode and len(product.barcode) == 13" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN13', product.barcode, 600, 150)" style="width:100%;height:20%;"/>
-                        <img t-elif="product.barcode and len(product.barcode) == 8" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN8', product.barcode, 600, 150)" style="width:100%;height:20%;"/>
-                        <img t-else="" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', product.barcode, 600, 150)" style="width:100%;height:20%;"/>
+                        <img alt="Barcode" t-if="product.barcode and len(product.barcode) == 13" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN13', product.barcode, 600, 150)" style="width:100%;height:20%;"/>
+                        <img alt="Barcode" t-elif="product.barcode and len(product.barcode) == 8" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN8', product.barcode, 600, 150)" style="width:100%;height:20%;"/>
+                        <img alt="Barcode" t-else="" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', product.barcode, 600, 150)" style="width:100%;height:20%;"/>
                         <span t-field="product.barcode"/>
                     </td>
                     <td style="border: 2px solid black; text-align: center;" class="col-xs-7">
diff --git a/addons/product/views/product_pricelist_views.xml b/addons/product/views/product_pricelist_views.xml
index 22928e638a5faa888733d3a1aedb05e6b8ffa69e..3e5aa07bc27d34ecf8dbfc7af8f48264788d3021 100644
--- a/addons/product/views/product_pricelist_views.xml
+++ b/addons/product/views/product_pricelist_views.xml
@@ -58,7 +58,7 @@
                     <group col="6" attrs="{'invisible':[('compute_price', '!=', 'formula')]}">
                         <field name="base" colspan="6"/>
 
-                        <label string="New Price ="/>
+                        <span class="o_form_label">New Price =</span>
                         <div>
                             <span attrs="{'invisible':[('base', '!=', 'list_price')]}">Public Price  -  </span>
                             <span attrs="{'invisible':[('base', '!=', 'standard_price')]}">Cost  -  </span>
@@ -119,7 +119,7 @@
                                     <div class="o_kanban_record_headings">
                                         <strong class="o_kanban_record_title"><span><field name="name"/></span></strong>
                                     </div>
-                                    <strong><i class="fa fa-money" aria-hidden="true"></i> <field name="currency_id"/></strong>
+                                    <strong><i class="fa fa-money" role="img" aria-label="Currency" title="Currency"></i> <field name="currency_id"/></strong>
                                 </div>
                             </div>
                         </t>
diff --git a/addons/product/views/product_template_views.xml b/addons/product/views/product_template_views.xml
index cc4206a73be6c232101484334daf69413a5258c6..abcfc5c8327a450f66063d8d8f9a910a1cce0074 100644
--- a/addons/product/views/product_template_views.xml
+++ b/addons/product/views/product_template_views.xml
@@ -75,7 +75,7 @@
                     <t t-name="kanban-box">
                         <div class="oe_kanban_global_click">
                             <div class="o_kanban_image">
-                                <img t-att-src="kanban_image('product.template', 'image_small', record.id.raw_value)"/>
+                                <img t-att-src="kanban_image('product.template', 'image_small', record.id.raw_value)" alt="Product"/>
                             </div>
                             <div class="oe_kanban_details">
                                 <strong class="o_kanban_record_title">
diff --git a/addons/product/views/product_views.xml b/addons/product/views/product_views.xml
index 259798735bf5a5db771eaed23a76d6dd9a3e8881..906a11090ed70a8911b3c6b60c8e7a311825a4a8 100644
--- a/addons/product/views/product_views.xml
+++ b/addons/product/views/product_views.xml
@@ -363,7 +363,7 @@
                         <t t-name="kanban-box">
                             <div class="oe_kanban_global_click">
                                 <div class="o_kanban_image">
-                                    <img t-att-src="kanban_image('product.product', 'image_small', record.id.raw_value)"/>
+                                    <img t-att-src="kanban_image('product.product', 'image_small', record.id.raw_value)" alt="Product"/>
                                 </div>
                                 <div class="oe_kanban_details">
                                     <strong class="o_kanban_record_title"><field name="name"/></strong>
diff --git a/addons/product_email_template/data/product_demo.xml b/addons/product_email_template/data/product_demo.xml
index ed14c3a9026685f5b2e4198094f2204e81e22cdb..a43f01d04018be782569d8e7d94142d22a2fd8aa 100644
--- a/addons/product_email_template/data/product_demo.xml
+++ b/addons/product_email_template/data/product_demo.xml
@@ -31,7 +31,7 @@
         <table>
             <tr>
                 <td>
-                    <img src="/product_email_template/static/img/online_training.png"/>
+                    <img src="/product_email_template/static/img/online_training.png" alt="Online training"/>
                 </td>
                 <td style="height: auto;margin-top:10px;margin-bottom:10px;font-size:18px;color: #646464;">
                     <strong>There are three components to the training</strong>
@@ -609,4 +609,4 @@
             <field name="email_template_id" ref="product_online_training_email_template"/>
         </record>
 
-</odoo>
\ No newline at end of file
+</odoo>
diff --git a/addons/project/data/project_mail_template_data.xml b/addons/project/data/project_mail_template_data.xml
index a7d4dcc15f4fb39d64f5804fea138822d1476099..73f9a844ba99fea477626028af0e53feaa8e199a 100644
--- a/addons/project/data/project_mail_template_data.xml
+++ b/addons/project/data/project_mail_template_data.xml
@@ -18,7 +18,7 @@
                 <tbody>
                     <tr>
                         <td style="padding:2px;width:30%;">
-                            <img src="web/static/src/img/logo.png"/>
+                            <img src="web/static/src/img/logo.png" alt="Logo"/>
                         </td>
                         <td style="vertical-align: top; padding: 8px 10px;text-align: left;font-size: 14px;">
                             <a href="web/login" style="float:right ;margin:15px auto;background: #875A7B;border-radius: 5px;color: #ffffff;font-size: 16px;padding: 10px 20px 10px 20px;text-decoration: none;">Auto Login</a>
diff --git a/addons/project/static/src/js/tour.js b/addons/project/static/src/js/tour.js
index e49c13251364a46763772ee06e61cb12e4c76f0c..18087cdbc3b7b1559fe925c5f8ce20e7339088d5 100644
--- a/addons/project/static/src/js/tour.js
+++ b/addons/project/static/src/js/tour.js
@@ -27,7 +27,7 @@ tour.register('project_tour', {
     content: _t('This will create new project and redirect us to its tasks.'),
     position: 'right',
     run: function (actions) {
-        actions.auto(".modal:visible .btn.btn-primary");
+        actions.auto('[role="dialog"]:visible .btn.btn-primary');
     },
 }, {
     trigger: ".o_kanban_project_tasks .o_column_quick_create input",
diff --git a/addons/project/static/src/xml/project.xml b/addons/project/static/src/xml/project.xml
index 0406bb9f85582dcd816a13708ad950d952025113..99949bf1861b2c35957b58e60a3610ea617bdda0 100644
--- a/addons/project/static/src/xml/project.xml
+++ b/addons/project/static/src/xml/project.xml
@@ -4,7 +4,7 @@
         <div t-if="attachment_ids.length > 0" class="ml32 mr0 o_kanban_task_cover_container">
             <t t-foreach="attachment_ids" t-as="attachment">
                 <div t-attf-class="o_kanban_task_cover_image#{cover_id == attachment['id'] ? ' o_selected' : ''}">
-                    <img t-attf-src="/web/image/#{attachment['id']}?unique=1" t-att-data-id="attachment['id']" t-att-data-name="attachment['name']"/>
+                    <img t-attf-src="/web/image/#{attachment['id']}?unique=1" t-att-data-id="attachment['id']" t-att-data-name="attachment['name']" alt="Attachment"/>
                 </div>
             </t>
         </div>
diff --git a/addons/project/static/tests/project_tests.js b/addons/project/static/tests/project_tests.js
index e659658a7a2ba27a89336499e2e4151f9c52dc2c..e8994c418985cdc2765bec2ca6c2005ed7516036 100644
--- a/addons/project/static/tests/project_tests.js
+++ b/addons/project/static/tests/project_tests.js
@@ -118,12 +118,12 @@ QUnit.module('project', {
         assert.strictEqual(kanban.$('img').length, 0, "Initially there is no image.");
         kanban.$('.o_dropdown_kanban [data-type=set_cover]').eq(0).click();
         // single click on image
-        $('.modal').find("img[data-id='1']").click();
-        $('.modal-footer .btn-primary').click();
+        $('[role="dialog"]').find("img[data-id='1']").click();
+        $('footer.modal-footer .btn-primary').click();
         assert.strictEqual(kanban.$('img[data-src*="/web/image/1"]').length, 1, "Image inserted in record");
         $('.o_dropdown_kanban [data-type=set_cover]').eq(1).click();
         // double click on image
-        $('.modal').find("img[data-id='2']").dblclick();
+        $('[role="dialog"]').find("img[data-id='2']").dblclick();
         assert.strictEqual(kanban.$('img[data-src*="/web/image/2"]').length, 1, "Image inserted after double click");
         // varify write on both kanban record
         assert.verifySteps([1,2]);
diff --git a/addons/project/views/project_portal_templates.xml b/addons/project/views/project_portal_templates.xml
index 391f46b38a7d1f7a554d2b3e3c7fa4517670621e..006b9ec4a0e8efd21e9b0844b2d80d5503b19151 100644
--- a/addons/project/views/project_portal_templates.xml
+++ b/addons/project/views/project_portal_templates.xml
@@ -101,8 +101,8 @@
                         </div>
                         <div class="col-md-6">
                             <div class="pull-right">
-                                <a t-attf-href="/my/tasks?filterby=#{project.id}" class="btn btn-default btn-lg">
-                                    <span class="fa fa-tasks" />
+                                <a role="button" t-attf-href="/my/tasks?filterby=#{project.id}" class="btn btn-default btn-lg">
+                                    <span class="fa fa-tasks" role="img" aria-label="Tasks" title="Tasks"/>
                                     <span t-esc="project.task_count" />
                                     <span t-field="project.label_tasks" />
                                 </a>
@@ -170,7 +170,7 @@
                             <h4>
                                 Task - <span t-field="task.name"/> (#<span t-esc="task.id"/>)
                                 <span t-field="task.stage_id.name" class="pull-right label label-info" title="Current stage of this task"/>
-                                <a class="btn btn-info" t-att-href="'/web#return_label=Website&amp;model=project.task&amp;id=%s&amp;view_type=form' % (task.id)" groups="project.group_project_user">Edit Task</a>
+                                <a role="button" class="btn btn-info" t-att-href="'/web#return_label=Website&amp;model=project.task&amp;id=%s&amp;view_type=form' % (task.id)" groups="project.group_project_user">Edit Task</a>
                             </h4>
                         </div>
                     </div>
diff --git a/addons/project/views/project_rating_templates.xml b/addons/project/views/project_rating_templates.xml
index 7ac2e9463bae96f1e42e98f96bcbf46647b57ca7..f1c0fa297a90825353b933c58b87a3909a01a8f8 100644
--- a/addons/project/views/project_rating_templates.xml
+++ b/addons/project/views/project_rating_templates.xml
@@ -27,10 +27,10 @@
                                                 <span class="label label-default pull-right"><t t-esc="project.privacy_visibility"/></span>
                                                 <h4><t t-esc="project.name"/></h4>
                                                 <p t-if="project.date"  class="text-muted">
-                                                    <i class="fa fa-calendar"/> End date : <t t-esc="project.date"/>
+                                                    <span class="fa fa-calendar"> End date</span> : <t t-esc="project.date"/>
                                                 </p>
                                                 <p t-if="project.alias_name and project.alias_domain"  class="text-muted">
-                                                    <i class="fa fa-envelope"/> Email : <t t-esc="project.alias_name"/>@<t t-esc="project.alias_domain"/>
+                                                    <span class="fa fa-envelope"> Email</span> : <t t-esc="project.alias_name"/>@<t t-esc="project.alias_domain"/>
                                                 </p>
                                                 <div class="row">
                                                     <div class="col-md-6 text-center">
@@ -41,8 +41,8 @@
                                             </div>
                                             <div class="caption">
                                                 <p>
-                                                    <a t-att-href="'/project/rating/%s' % project.id" class="btn btn-primary btn-lg btn-block">
-                                                        <i class="fa fa-arrow-circle-right "/> See the feedbacks
+                                                    <a role="button" t-att-href="'/project/rating/%s' % project.id" class="btn btn-primary btn-lg btn-block">
+                                                        <span class="fa fa-arrow-circle-right "> See the feedbacks</span>
                                                     </a>
                                                 </p>
                                             </div>
@@ -79,8 +79,8 @@
             <t t-foreach="partner_stats.values()" t-as="partner_stat">
                 <div class="row mt8" t-if="partner_stat['total']" title="Top 5 partner ratings of last 15 days.">
                     <div class="col-sm-1">
-                        <img t-if="partner_stat['rated_partner'].image" class="o_top_partner_image" t-attf-src="data:image/png;base64,#{partner_stat['rated_partner'].image}"/>
-                        <img  t-if="not partner_stat['rated_partner'].image" class="o_top_partner_image" src='/web/static/src/img/placeholder.png'/>
+                        <img t-if="partner_stat['rated_partner'].image" class="o_top_partner_image" t-attf-src="data:image/png;base64,#{partner_stat['rated_partner'].image}" alt="Rated partner"/>
+                        <img  t-if="not partner_stat['rated_partner'].image" class="o_top_partner_image" src='/web/static/src/img/placeholder.png' alt="Placeholder"/>
                     </div>
                     <div class="col-sm-4 o_smiley_no_padding_right">
                         <span class="ml8" t-esc="partner_stat['rated_partner'].name"/>
@@ -88,31 +88,31 @@
                     <div class="col-sm-4 o_smiley_no_padding_right">
                         <div class="col-sm-4 o_smiley_no_padding_right o_smiley_no_padding_left">
                             <span t-if="partner_stat['rating_10']">
-                                <img title="happy" class="o_top_partner_rating_image" src='/rating/static/src/img/rating_10.png'/>
+                                <img title="happy" alt="Happy face" class="o_top_partner_rating_image" src='/rating/static/src/img/rating_10.png'/>
                                 <span class="o_rating_count" t-esc="partner_stat['rating_10']"/>
                             </span>
                             <span t-if="not partner_stat['rating_10']">
-                                <img title="happy" class="o_top_partner_rating_image o_lighter_smileys" src='/rating/static/src/img/rating_10.png'/>
+                                <img title="happy" alt="Happy face" class="o_top_partner_rating_image o_lighter_smileys" src='/rating/static/src/img/rating_10.png'/>
                                 <span class="o_rating_count o_lighter_smileys" t-esc="partner_stat['rating_10']"/>
                             </span>
                         </div>
                         <div class="col-sm-4 o_smiley_no_padding_right o_smiley_no_padding_left">
                             <span t-if="partner_stat['rating_5']">
-                                <img title="happy" class="o_top_partner_rating_image" src='/rating/static/src/img/rating_5.png'/>
+                                <img title="average" alt="Neutral face" class="o_top_partner_rating_image" src='/rating/static/src/img/rating_5.png'/>
                                 <span class="o_rating_count" t-esc="partner_stat['rating_5']"/>
                             </span>
                             <span t-if="not partner_stat['rating_5']">
-                                <img title="happy" class="o_top_partner_rating_image o_lighter_smileys" src='/rating/static/src/img/rating_5.png'/>
+                                <img title="average" alt="Neutral face" class="o_top_partner_rating_image o_lighter_smileys" src='/rating/static/src/img/rating_5.png'/>
                                 <span class="o_rating_count o_lighter_smileys" t-esc="partner_stat['rating_5']"/>
                             </span>
                         </div>
                         <div class="col-sm-4 o_smiley_no_padding_right o_smiley_no_padding_left">
                            <span t-if="partner_stat['rating_1']">
-                                <img title="happy" class="o_top_partner_rating_image" src='/rating/static/src/img/rating_1.png'/>
+                                <img title="bad" alt="Sad face" class="o_top_partner_rating_image" src='/rating/static/src/img/rating_1.png'/>
                                 <span class="o_rating_count" t-esc="partner_stat['rating_1']"/>
                             </span>
                             <span t-if="not partner_stat['rating_1']">
-                                <img title="happy" class="o_top_partner_rating_image o_lighter_smileys" src='/rating/static/src/img/rating_1.png'/>
+                                <img title="bad" alt="Sad face" class="o_top_partner_rating_image o_lighter_smileys" src='/rating/static/src/img/rating_1.png'/>
                                 <span class="o_rating_count o_lighter_smileys" t-esc="partner_stat['rating_1']"/>
                             </span>
                         </div>
@@ -128,8 +128,8 @@
             <div t-attf-id="rating_#{rating.id}" class="container hidden">
                 <div class="row">
                     <div class="col-md-2">
-                        <img t-if="rating.partner_id.image" class="o_top_partner_image" t-attf-src="data:image/png;base64,#{rating.partner_id.image}"/>
-                        <img  t-if="not rating.partner_id.image" class="o_top_partner_image" src='/web/static/src/img/placeholder.png'/>
+                        <img t-if="rating.partner_id.image" class="o_top_partner_image" t-attf-src="data:image/png;base64,#{rating.partner_id.image}" alt="Rated partner"/>
+                        <img  t-if="not rating.partner_id.image" class="o_top_partner_image" src='/web/static/src/img/placeholder.png' alt="Placeholder"/>
                     </div>
                     <div class="col-md-10">
                         <div class="mt4">
@@ -160,6 +160,7 @@
                                         <t t-foreach="ratings" t-as="rating">
                                             <img t-attf-src='/rating/static/src/img/rating_#{int(rating.rating)}.png'
                                                 class="mt4 o_rating_image"
+                                                t-att-alt="rating.name"
                                                 t-att-data-id="rating.id"
                                                 t-att-data-rating-date="rating.write_date"/>
                                             <t t-call="project.portal_project_rating_popover"/>
diff --git a/addons/project/views/project_views.xml b/addons/project/views/project_views.xml
index d0dfcfaa0edddefd0db8f57b07312a99464b8868..b5a54bd0dc51ffc96bd52644c4a4619951ceb787 100644
--- a/addons/project/views/project_views.xml
+++ b/addons/project/views/project_views.xml
@@ -236,7 +236,7 @@
                                     </div>
                                     <div class="col-xs-4">
                                         <div class="oe_kanban_bottom_right">
-                                            <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                            <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                                         </div>
                                     </div>
                                 </div>
@@ -309,36 +309,36 @@
                                                 </span>
                                             </div>
                                             <div t-if="record.alias_name.value and record.alias_domain.value">
-                                                <span><i class="fa fa-envelope"></i> <t t-esc="record.alias_id.value"/></span>
+                                                <span><i class="fa fa-envelope" role="img" aria-label="Domain Alias" title="Domain Alias"></i> <t t-esc="record.alias_id.value"/></span>
                                             </div>
                                             <div t-if="record.rating_status.raw_value != 'no'" class="mt8 text-primary" title="Percentage of happy ratings over the past 30 days. Get rating details from the More menu." groups="project.group_project_rating">
                                                 <b>
                                                     <t t-if="record.percentage_satisfaction_project.value == -1">
-                                                        <i class="fa fa-smile-o"/> No rating yet
+                                                        <span class="fa fa-smile-o"> No rating yet</span>
                                                     </t>
                                                     <t t-if="record.percentage_satisfaction_project.value != -1">
                                                         <a name="action_view_all_rating" type="object" context="{'search_default_rating_last_30_days':1}">
-                                                            <i class="fa fa-smile-o"/> <t t-esc="record.percentage_satisfaction_project.value"/>%
+                                                            <i class="fa fa-smile-o" role="img" aria-label="Percentage of satisfaction" title="Percentage of satisfaction"/> <t t-esc="record.percentage_satisfaction_project.value"/>%
                                                         </a>
                                                     </t>
                                                 </b>
                                             </div>
                                         </div>
                                     </div>
-                                    <div class="o_kanban_card_manage_pane dropdown-menu" groups="project.group_project_manager">
+                                    <div class="o_kanban_card_manage_pane dropdown-menu" groups="project.group_project_manager" role="menu">
                                         <div class="o_kanban_card_manage_section o_kanban_manage_reports">
-                                            <div>
+                                            <div role="menuitem">
                                                 <a type="edit">Edit</a>
                                             </div>
-                                            <div t-if="record.rating_status.raw_value != 'no'">
+                                            <div role="menuitem" t-if="record.rating_status.raw_value != 'no'">
                                                 <a name="action_view_all_rating" type="object">Customer Ratings</a>
                                             </div>
                                         </div>
-                                        <div class="o_no_padding_kanban_colorpicker">
-                                            <ul class="oe_kanban_colorpicker" data-field="color"/>
+                                        <div role="menuitem" aria-haspopup="true" class="o_no_padding_kanban_colorpicker">
+                                            <ul class="oe_kanban_colorpicker" data-field="color" role="popup"/>
                                         </div>
                                     </div>
-                                    <a class="o_kanban_manage_toggle_button o_left" href="#" groups="project.group_project_manager"><i class="fa fa-ellipsis-v" /></a>
+                                    <a class="o_kanban_manage_toggle_button o_left" href="#" groups="project.group_project_manager"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
                                     <span class="o_right"><field name="is_favorite" widget="boolean_favorite" nolabel="1" force_save="1" /></span>
                                 </div>
 
@@ -552,17 +552,17 @@
                                         </small>
                                     </div>
                                     <div class="o_dropdown_kanban dropdown" groups="base.group_user">
-                                        <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
-                                            <span class="fa fa-ellipsis-v" aria-hidden="true"/>
+                                        <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
+                                            <span class="fa fa-ellipsis-v"/>
                                         </a>
-                                        <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                            <li t-if="widget.editable"><a type="set_cover">Set Cover Image</a></li>
-                                            <li t-if="widget.editable"><a type="edit">Edit Task</a></li>
-                                            <li t-if="widget.deletable"><a type="delete">Delete</a></li>
-                                            <li class="divider"></li>
-                                            <li class="dropdown-header">Record's Colour</li>
-                                            <li>
-                                                <ul class="oe_kanban_colorpicker" data-field="color"/>
+                                        <ul class="dropdown-menu" role="menu">
+                                            <li t-if="widget.editable"><a role="menuitem" type="set_cover">Set Cover Image</a></li>
+                                            <li t-if="widget.editable"><a role="menuitem" type="edit">Edit Task</a></li>
+                                            <li t-if="widget.deletable"><a role="menuitem" type="delete">Delete</a></li>
+                                            <li role="separator" class="divider"></li>
+                                            <li role="separator" class="dropdown-header">Record's Colour</li>
+                                            <li role="menuitem" aria-haspopup="true">
+                                                <ul role="menu" class="oe_kanban_colorpicker" data-field="color"/>
                                             </li>
                                         </ul>
                                     </div>
@@ -578,17 +578,17 @@
                                         <field name="priority" widget="priority"/>
                                         <field name="activity_ids" widget="kanban_activity"/>
                                         <t t-if="record.message_needaction_counter.raw_value">
-                                            <span class='oe_kanban_mail_new' title='Unread Messages'><i class='fa fa-comments'/><t t-raw="record.message_needaction_counter.raw_value"/></span>
+                                            <span role="alert" class='oe_kanban_mail_new' title='Unread Messages'><i class='fa fa-comments' role="img" aria-label="Unread Messages"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
                                         </t>
                                         <b t-if="record.rating_ids.raw_value.length">
-                                            <span style="font-weight:bold;" class="fa fa-fw mt4 fa-smile-o text-success" t-if="record.rating_last_value.value == 10" title="Latest Rating: Satisfied"/>
-                                            <span style="font-weight:bold;" class="fa fa-fw mt4 fa-meh-o text-warning" t-if="record.rating_last_value.value == 5" title="Latest Rating: Not Satisfied"/>
-                                            <span style="font-weight:bold;" class="fa fa-fw mt4 fa-frown-o text-danger" t-if="record.rating_last_value.value == 1" title="Latest Rating: Higly Dissatisfied"/>
+                                            <span style="font-weight:bold;" class="fa fa-fw mt4 fa-smile-o text-success" t-if="record.rating_last_value.value == 10" title="Latest Rating: Satisfied" role="img" aria-label="Happy face"/>
+                                            <span style="font-weight:bold;" class="fa fa-fw mt4 fa-meh-o text-warning" t-if="record.rating_last_value.value == 5" title="Latest Rating: Not Satisfied" role="img" aria-label="Neutral face"/>
+                                            <span style="font-weight:bold;" class="fa fa-fw mt4 fa-frown-o text-danger" t-if="record.rating_last_value.value == 1" title="Latest Rating: Higly Dissatisfied" role="img" aria-label="Sad face"/>
                                         </b>
                                     </div>
                                     <div class="oe_kanban_bottom_right">
                                         <field name="kanban_state" widget="state_selection" groups="base.group_user"/>
-                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
+                                        <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
                                     </div>
                                 </div>
                             </div>
@@ -777,17 +777,23 @@
                                 You can define here labels that will be displayed for the state instead
                                 of the default labels.
                             </p>
-                            <label for="legend_normal" string=" " class="o_status oe_project_kanban_legend"/>
+                            <label for="legend_normal" string=" " class="o_status oe_project_kanban_legend"
+                                title="Task in progress. Click to block or set as done."
+                                aria-label="Task in progress. Click to block or set as done." role="img"/>
                             <field name="legend_normal" nolabel="1"/>
-                            <label for="legend_blocked" string=" " class="o_status o_status_red oe_project_kanban_legend"/>
+                            <label for="legend_blocked" string=" " class="o_status o_status_red oe_project_kanban_legend"
+                                title="Task is blocked. Click to unblock or set as done."
+                                aria-label="Task is blocked. Click to unblock or set as done." role="img"/>
                             <field name="legend_blocked" nolabel="1"/>
-                            <label for="legend_done" string=" " class="o_status o_status_green oe_project_kanban_legend"/>
+                            <label for="legend_done" string=" " class="o_status o_status_green oe_project_kanban_legend"
+                                title="This step is done. Click to block or set in progress."
+                                aria-label="This step is done. Click to block or set in progress." role="img"/>
                             <field name="legend_done" nolabel="1"/>
 
                             <p class="text-muted" colspan="2">
                                 You can also give a tooltip about the use of the stars available in the kanban and form views.
                             </p>
-                            <label for="legend_priority" string=" " class="fa fa-star fa-lg o_star_on oe_project_kanban_legend"/>
+                            <label for="legend_priority" string=" " class="fa fa-star fa-lg o_star_on oe_project_kanban_legend" aria-label="Legend priority" title="Legend priority" role="img"/>
                             <field name="legend_priority" nolabel="1"/>
 
                             <p class="text-muted" colspan="2">
diff --git a/addons/purchase/views/portal_templates.xml b/addons/purchase/views/portal_templates.xml
index 7e23f335940e328c1109eecad9e9624f6a707047..ec5d49dc5506a0d60a9a8cd82d71c897047b9811 100644
--- a/addons/purchase/views/portal_templates.xml
+++ b/addons/purchase/views/portal_templates.xml
@@ -48,7 +48,7 @@
                 <span class="label label-info"><i class="fa fa-fw fa-file-text"/> Waiting for Bill</span>
               </t>
               <t t-if="order.state == 'cancel'">
-                <span class="label label-default"><i class="fa fa-fw fa-remove"/> Cancelled</span>
+                <span class="label label-default fa fa-fw fa-remove"> Cancelled</span>
               </t>
             </td>
             <td><span t-field="order.amount_total" t-options='{"widget": "monetary", "display_currency": order.currency_id}'/>
@@ -100,7 +100,7 @@
               <t t-foreach="order.order_line" t-as="ol">
                 <div class="row purchases_vertical_align">
                   <div class="col-md-1 text-center">
-                      <img t-att-src="'/web/image/purchase.order.line/%s/product_image/48x48' % ol.id"/>
+                      <img t-att-src="'/web/image/purchase.order.line/%s/product_image/48x48' % ol.id" alt="Product"/>
                   </div>
                   <div id='product_name' class="col-md-5">
                     <span t-esc="ol.product_id.name"/>
diff --git a/addons/purchase/views/purchase_views.xml b/addons/purchase/views/purchase_views.xml
index 49c047e84f7e612ff4e24a8fc099859c8235a7c7..9d19a329efd433c26b211d784befc7759d22a4ab 100644
--- a/addons/purchase/views/purchase_views.xml
+++ b/addons/purchase/views/purchase_views.xml
@@ -154,8 +154,8 @@
                         </button>
                     </div>
                     <div class="oe_title">
-                        <label string="Request for Quotation " attrs="{'invisible': [('state','not in',('draft','sent','bid'))]}"/>
-                        <label string="Purchase Order " attrs="{'invisible': [('state','in',('draft','sent','bid'))]}"/>
+						<span class="o_form_label" attrs="{'invisible': [('state','not in',('draft','sent','bid'))]}">Request for Quotation </span>
+						<span class="o_form_label" attrs="{'invisible': [('state','in',('draft','sent','bid'))]}">Purchase Order </span>
                         <h1>
                             <field name="name" readonly="1"/>
                         </h1>
@@ -441,7 +441,7 @@
                         <label for="order_id" class="oe_edit_only"/>
                         <h1>
                             <field name="order_id" class="oe_inline"/>
-                            <label string="," attrs="{'invisible':[('date_order','=',False)]}"/>
+                            <label string="," for="date_order" attrs="{'invisible':[('date_order','=',False)]}"/>
                             <field name="date_order" class="oe_inline"/>
                         </h1>
                         <label for="partner_id" class="oe_edit_only"/>
diff --git a/addons/purchase/views/res_config_settings_views.xml b/addons/purchase/views/res_config_settings_views.xml
index e702ee0d9108f7bf4050fec15babed9074115711..0cadad1eb124b7f01dd6efd4f0dda157d6195da0 100644
--- a/addons/purchase/views/res_config_settings_views.xml
+++ b/addons/purchase/views/res_config_settings_views.xml
@@ -20,7 +20,7 @@
                             </div>
                             <div class="o_setting_right_pane">
                                 <label for="po_order_approval"/>
-                                <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                 <div class="text-muted">
                                     Managers must approve orders
                                 </div>
@@ -110,7 +110,7 @@
                                 </div>
                                 <div class="content-group" attrs="{'invisible': [('group_manage_vendor_price', '=', False)]}">
                                     <div class="mt16">
-                                        <a class="btn-link fa fa-arrow-right" target="_blank" href="https://www.odoo.com/documentation/user/11.0/general/base_import/import_faq.html">
+                                        <a role="button" class="btn-link fa fa-arrow-right" target="_blank" href="https://www.odoo.com/documentation/user/11.0/general/base_import/import_faq.html">
                                         How to import
                                         </a>
                                     </div>
diff --git a/addons/purchase/views/res_partner_views.xml b/addons/purchase/views/res_partner_views.xml
index 886f43f387f23e95c835cb0971747504f7850872..af6e9e01ba731eab733019e42df3e68bedfb8e64 100644
--- a/addons/purchase/views/res_partner_views.xml
+++ b/addons/purchase/views/res_partner_views.xml
@@ -42,7 +42,7 @@
                     <field name="purchase_order_count"/>
                 </field>
                 <xpath expr="//div[hasclass('oe_kanban_partner_links')]" position="inside">
-                    <span t-if="record.purchase_order_count.value>0" class="badge"><i class="fa fa-fw fa-shopping-cart"/><t t-esc="record.purchase_order_count.value"/></span>
+                    <span t-if="record.purchase_order_count.value>0" class="badge"><i class="fa fa-fw fa-shopping-cart" role="img" aria-label="Shopping cart" title="Shopping cart"/><t t-esc="record.purchase_order_count.value"/></span>
                 </xpath>
             </field>
         </record>
diff --git a/addons/purchase_requisition/views/purchase_requisition_views.xml b/addons/purchase_requisition/views/purchase_requisition_views.xml
index 57cb2d81ce1321b640290452dda6f481a131d96b..05227046064e23ee33d4275a81beefe3306044e7 100644
--- a/addons/purchase_requisition/views/purchase_requisition_views.xml
+++ b/addons/purchase_requisition/views/purchase_requisition_views.xml
@@ -263,7 +263,7 @@
                                     <field name="vendor_id"/>
                                 </div>
                                 <div class="oe_kanban_bottom_right">
-                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
+                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar pull-right"/>
                                 </div>
                             </div>
                         </div>
diff --git a/addons/purchase_stock/data/mail_data.xml b/addons/purchase_stock/data/mail_data.xml
index 09984703d734c479dfedc4bc5dc7a9e43bc66edc..9e00feab23313fd9ec046e0e0ece8047ecbbc0ff 100644
--- a/addons/purchase_stock/data/mail_data.xml
+++ b/addons/purchase_stock/data/mail_data.xml
@@ -2,7 +2,7 @@
 <odoo>
 
     <template id="exception_on_po">
-        <div class="alert alert-warning">
+        <div class="alert alert-warning" role="alert">
           Exception(s) occurred on the purchase order(s):
           <t t-foreach="purchase_order_ids" t-as="purchase_order">
               <a href="#" data-oe-model="purchase.order" t-att-data-oe-id="purchase_order.id"><t t-esc="purchase_order.name"/></a>.
diff --git a/addons/rating/views/rating_template.xml b/addons/rating/views/rating_template.xml
index b6fa5304b54abfe6dbc6d8f0b56ed79da8def420..09c74853f587052f58d3233a4911e2161aed2306 100644
--- a/addons/rating/views/rating_template.xml
+++ b/addons/rating/views/rating_template.xml
@@ -10,11 +10,11 @@
                 </t>
                 <div class="container">
                     <div class="text-center" style="margin-top:128px">
-                        <i class="fa fa-check-circle fa-5x text-success" />
+                        <i class="fa fa-check-circle fa-5x text-success" role="img" aria-label="Thank you!" title="Thank you!"/>
                     </div>
                     <h2 class="text-center">We appreciate your feedback!</h2>
                     <div class="text-center">
-                        <a t-att-href="web_base_url" class="btn btn-primary">Go to our website</a>
+                        <a role="button" t-att-href="web_base_url" class="btn btn-primary">Go to our website</a>
                     </div>
                 </div>
             </t>
@@ -31,7 +31,7 @@
                         <h1 class="text-center">Thanks! We appreciate your feedback.</h1>
                         <h4 class="text-center text-muted" style="margin-bottom: 32px;">Your rating has been submitted.</h4>
                         <div class="pull-left">
-                            <img t-attf-src='/rating/static/src/img/rating_#{rate}.png'/>
+                            <img t-attf-src='/rating/static/src/img/rating_#{rate}.png' t-att-alt="rate.name"/>
                         </div>
                         <div style="margin-left: 80px;">
                             you are <b t-esc="rate_name"></b><br/>
diff --git a/addons/rating/views/rating_view.xml b/addons/rating/views/rating_view.xml
index a7ec28584bb50ac48c144ad768393e445205fd4f..66d279da91106159a6310cf7ecdef0fe010c45d1 100644
--- a/addons/rating/views/rating_view.xml
+++ b/addons/rating/views/rating_view.xml
@@ -69,7 +69,7 @@
                         <t t-name="kanban-box">
                             <div class="oe_kanban_global_click">
                                 <div class="o_kanban_image">
-                                    <img t-attf-src="/rating/static/src/img/rating_#{record.rating.raw_value}.png" />
+                                    <img t-attf-src="/rating/static/src/img/rating_#{record.rating.raw_value}.png" t-att-alt="record.rating.name"/>
                                 </div>
                                 <div class="oe_kanban_details">
                                     <strong>
@@ -96,7 +96,7 @@
                                             on <field name="create_date" />
                                         </li>
                                     </ul>
-                                    <i t-if="record.feedback.raw_value" class="fa fa-comment pull-right mt4" t-attf-title="Feedback:\n#{record.feedback.raw_value}" />
+                                    <i t-if="record.feedback.raw_value" class="fa fa-comment pull-right mt4" t-attf-title="Feedback:\n#{record.feedback.raw_value}"  t-attf-aria-label="Feedback:\n#{record.feedback.raw_value}" role="img"/>
                                 </div>
                             </div>
                         </t>
diff --git a/addons/repair/wizard/repair_cancel_views.xml b/addons/repair/wizard/repair_cancel_views.xml
index e41c90c34d9c52f42339110a09c705a6c04c4690..9836653bfa8cba4b079219eb8355d49b1649d571 100644
--- a/addons/repair/wizard/repair_cancel_views.xml
+++ b/addons/repair/wizard/repair_cancel_views.xml
@@ -10,7 +10,7 @@
             <field name="arch" type="xml">
                 <form string="Cancel Repair Order">
                     <group>
-                        <label string="This operation will cancel the Repair process, but will not cancel it's Invoice. Do you want to continue?"/>
+                        <span class="o_form_label">This operation will cancel the Repair process, but will not cancel it's Invoice. Do you want to continue?</span>
                     </group>
                     <footer>
                         <button name="cancel_repair" string="Yes" type="object" class="btn-primary"/>
diff --git a/addons/sale/views/res_config_settings_views.xml b/addons/sale/views/res_config_settings_views.xml
index b2e4615e890e2dfe5ebddec0c65351fab91d1330..558bd567c015f10245555232db98b1695d202f18 100644
--- a/addons/sale/views/res_config_settings_views.xml
+++ b/addons/sale/views/res_config_settings_views.xml
@@ -200,7 +200,7 @@
                             </div>
                             <div class="o_setting_right_pane">
                                 <label for="use_sale_note"/>
-                                <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                                <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
                                 <div class="text-muted">
                                     Show standard terms &amp; conditions on orders
                                 </div>
@@ -379,7 +379,7 @@
                         <div class="col-xs-12 col-md-6 o_setting_box" groups="base.group_no_one">
                             <div class="o_setting_left_pane"/>
                             <div class="o_setting_right_pane">
-                                <label string="Down Payments"/>
+                                <span class="o_form_label">Down Payments</span>
                                 <div class="text-muted">
                                     Product used for down payments
                                 </div>
diff --git a/addons/sale/views/res_partner_views.xml b/addons/sale/views/res_partner_views.xml
index c5b01919c3fced705fa13774539b68eafccf88e0..53d5577fb462ffaec15b5df8bb2109d275318eac 100644
--- a/addons/sale/views/res_partner_views.xml
+++ b/addons/sale/views/res_partner_views.xml
@@ -28,7 +28,7 @@
                     <field name="sale_order_count"/>
                 </field>
                 <xpath expr="//div[hasclass('oe_kanban_partner_links')]" position="inside">
-                    <span t-if="record.sale_order_count.value>0" class="badge"><i class="fa fa-fw fa-usd"/><t t-esc="record.sale_order_count.value"/></span>
+                    <span t-if="record.sale_order_count.value>0" class="badge"><i class="fa fa-fw fa-usd" role="img" aria-label="Sale orders" title="Sales orders"/><t t-esc="record.sale_order_count.value"/></span>
                 </xpath>
             </field>
         </record>
diff --git a/addons/sale/views/sale_portal_templates.xml b/addons/sale/views/sale_portal_templates.xml
index 08441e9d6c55352fb0c23af19abf6b88d2fedb6f..91057c2c26c95e4ca4c028591c4b1fb35affb622 100644
--- a/addons/sale/views/sale_portal_templates.xml
+++ b/addons/sale/views/sale_portal_templates.xml
@@ -58,10 +58,10 @@
                         <td><span t-field="quotation.validity_date"/></td>
                         <td>
                           <t t-if="quotation.state == 'cancel'">
-                            <span class="label label-default"><i class="fa fa-fw fa-remove"/> Cancelled</span>
+                            <span class="label label-default"><span class="fa fa-fw fa-remove"> Cancelled</span></span>
                           </t>
                           <t t-if="quotation.is_expired">
-                            <span class="label label-default"><i class="fa fa-fw fa-clock-o"/> Expired</span>
+                            <span class="label label-default"><span class="fa fa-fw fa-clock-o"> Expired</span></span>
                           </t>
                         </td>
                         <td><span t-field="quotation.amount_total" t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
@@ -108,7 +108,7 @@
                         </td>
                         <td>
                             <t t-if="order.state == 'done'">
-                                <span class="label label-success hidden-xs"><i class="fa fa-fw fa-check"></i><span class="hidden-xs"> Done</span></span>
+                                <span class="label label-success hidden-xs"><i class="fa fa-fw fa-check" role="img" aria-label="Done" title="Done"></i><span class="hidden-xs"> Done</span></span>
                             </t>
                         </td>
                         <td><span t-field="order.amount_total" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/></td>
@@ -138,27 +138,27 @@
                         <t t-else="">Order</t>
                         <span t-esc="order.name"/>
                         <t t-if="order.state == 'cancel'">
-                            <span class="label label-default"><i class="fa fa-fw fa-remove"/> Cancelled</span>
+                            <span class="label label-default"><span class="fa fa-fw fa-remove"> Cancelled</span></span>
                         </t>
                         <t t-if="order.state == 'done'">
-                            <span class="label label-success"><i class="fa fa-fw fa-check" /> Done</span>
+                            <span class="label label-success"><span class="fa fa-fw fa-check"> Done</span></span>
                         </t>
                     </h4>
                 </div>
                 <div class="col-md-6 col-sm-3 col-xs-3 hidden-print" id="o_portal_order_actions">
                     <t t-if="order.state == 'sent' and portal_confirmation == 'sign'" name="portal_confirmation_sign">
-                        <a class="btn btn-primary ml8 pull-right" href="#portal_sign">
-                            <i class="fa fa-arrow-circle-right"/> Accept &amp; Sign
+                        <a role="button" class="btn btn-primary ml8 pull-right" href="#portal_sign">
+                            <span class="fa fa-arrow-circle-right"> Accept &amp; Sign</span>
                         </a>
                     </t>
                     <t t-if="order.state == 'sale' and portal_confirmation == 'sign'">
-                        <a class="btn btn-success ml8 pull-right" disabled="disabled"
+                        <a role="button" class="btn btn-success ml8 pull-right" disabled="disabled"
                             t-attf-title="Order signed on #{order.confirmation_date} by #{order.partner_id.name}">
-                            <i class="fa fa-check-circle"/> Signed
+                            <span class="fa fa-check-circle"> Signed</span>
                         </a>
                     </t>
                     <a target="_blank" t-att-href="'/my/orders/pdf/%s?%s' % (order.id, keep_query())" class="ml8 pull-right mt4 mr8" title="Download">
-                        <i class="fa fa-download fa-2x" aria-hidden="true"/>
+                        <i class="fa fa-download fa-2x" role="img" aria-label="Download"/>
                     </a>
                 </div>
               </div>
@@ -188,14 +188,14 @@
                       <t t-foreach="invoices" t-as="i">
                         <t t-set="report_url" t-value="'/my/invoices/pdf/%s?%s' % (i.id, 'access_token=%s' % i.access_token if access_token else '')"/>
                         <div>
-                          <a t-att-href="report_url"><span class="fa fa-download"/></a>
+                          <a t-att-href="report_url"><span class="fa fa-download" role="img" aria-label="Download" title="Download"/></a>
                           <a t-att-href="report_url"><span t-esc="i.number"/></a>
                           <span class="text-muted" t-field="i.date_invoice"/>
                           <t t-if="i.state == 'paid'">
-                            <span class="label label-success orders_label_text_align"><i class="fa fa-fw fa-check"/> Paid</span>
+                            <span class="label label-success orders_label_text_align"><span class="fa fa-fw fa-check"> Paid</span></span>
                           </t>
                           <t t-if="i.state != 'paid'">
-                            <span class="label label-info orders_label_text_align"><i class="fa fa-fw fa-clock-o"/> Waiting</span>
+                            <span class="label label-info orders_label_text_align"><span class="fa fa-fw fa-clock-o"> Waiting</span></span>
                           </t>
                         </div>
                       </t>
@@ -337,7 +337,7 @@
 
     <template id="portal_order_error" name="Order error/warning display">
         <div class="row mr16">
-            <div t-attf-class="'col-md-12 mr16 ml16 alert alert-dismissable' #{'alert-danger' if error else 'alert-warning'}">
+            <div t-attf-class="'col-md-12 mr16 ml16 alert alert-dismissable' #{'alert-danger' if error else 'alert-warning'}" role="alert">
                 <a href="#" class="close" data-dismiss="alert" aria-label="close" title="close">×</a>
                 <t t-if="error == 'generic'" name="generic">
                     There was an error processing this page.
@@ -348,7 +348,7 @@
 
     <template id="portal_order_success" name="Order success display">
         <div class="row mr16">
-            <div class="col-md-12 mr16 ml16 alert alert-dismissable alert-success">
+            <div class="col-md-12 mr16 ml16 alert alert-dismissable alert-success" role="status">
                 <a href="#" class="close" data-dismiss="alert" aria-label="close" title="close">×</a>
             </div>
         </div>
diff --git a/addons/sale/wizard/sale_make_invoice_advance_views.xml b/addons/sale/wizard/sale_make_invoice_advance_views.xml
index b3bbc373917d0facafdd8985801a8fff891f31ce..5cf44b9a7d5a319d4c58bc6621e114996f48b4df 100644
--- a/addons/sale/wizard/sale_make_invoice_advance_views.xml
+++ b/addons/sale/wizard/sale_make_invoice_advance_views.xml
@@ -20,8 +20,8 @@
                         <div attrs="{'invisible': [('advance_payment_method', 'not in', ('fixed','percentage'))]}">
                             <field name="amount"
                                 attrs="{'required': [('advance_payment_method', 'in', ('fixed','percentage'))]}" class="oe_inline" widget="monetary"/>
-                            <label string="%%"
-                                attrs="{'invisible': [('advance_payment_method', '!=', 'percentage')]}" class="oe_inline"/>
+                            <span
+                                attrs="{'invisible': [('advance_payment_method', '!=', 'percentage')]}" class="oe_inline">%</span>
                         </div>
                         <field name="deposit_account_id" class="oe_inline"
                             attrs="{'invisible': ['|', ('advance_payment_method', 'not in', ('fixed', 'percentage')), ('product_id', '!=', False)]}" groups="account.group_account_manager"/>
diff --git a/addons/sale_management/static/src/js/tour.js b/addons/sale_management/static/src/js/tour.js
index 89c792e104af0587377d5c8d693abc476af2283f..11cbc958661b6c23f5c166ca081e2fc07748eb67 100644
--- a/addons/sale_management/static/src/js/tour.js
+++ b/addons/sale_management/static/src/js/tour.js
@@ -48,11 +48,14 @@ tour.register('sale_tour', {
     in_modal: false,
     run: function (actions) {
         actions.auto();
-        if ($(".modal-footer .btn-primary").length) {
-            actions.auto(".modal-footer .btn-primary");
+        if ($('.modal-dialog:has(div.o_dialog_warning) footer.modal-footer .btn-primary').length) {
+            $('.modal-dialog:has(div.o_dialog_warning) footer.modal-footer .btn-primary').trigger('click');
         }
     },
     id: "quotation_product_selected",
+}, {
+    trigger: ".modal-dialog:has(div.o_dialog_warning) footer.modal-footer .btn-primary",
+    position: "right",
 }, {
     trigger: ".o_form_button_save",
     extra_trigger: ".o_sale_order",
diff --git a/addons/sale_payment/views/sale_portal_templates.xml b/addons/sale_payment/views/sale_portal_templates.xml
index 11e07dae31d4d2ac2fdb9cdc624a6e083e3db1f4..cc71dce4026347ad7940985a571cd5e5eeb397f4 100644
--- a/addons/sale_payment/views/sale_portal_templates.xml
+++ b/addons/sale_payment/views/sale_portal_templates.xml
@@ -3,13 +3,13 @@
         <xpath expr="//t[@name='portal_confirmation_sign']" position="after">
             <t t-set="payment_tx_id" t-value="order.get_portal_last_transaction()"/>
             <t t-if="order.amount_total and not invoices and order.state in ('sent', 'sale') and portal_confirmation == 'pay' and payment_tx_id and payment_tx_id.state != 'done'" name="portal_confirmation_pay">
-                <a class="btn btn-primary ml8 pull-right" href="#portal_pay">
-                    <i class="fa fa-arrow-circle-right"/> Pay Now
+                <a class="btn btn-primary ml8 pull-right" href="#portal_pay" role="button">
+                    <span class="fa fa-arrow-circle-right"> Pay Now</span>
                 </a>
             </t>
             <t t-if="invoices and order.state in ('sale', 'done') and portal_confirmation == 'pay'">
-                <a class="btn btn-primary ml8 pull-right" disabled="disabled">
-                    <i class="fa fa-check-circle"/> Done
+                <a role="button" class="btn btn-primary ml8 pull-right" disabled="disabled">
+                    <span class="fa fa-check-circle"> Done</span>
                 </a>
             </t>
         </xpath>
@@ -52,10 +52,10 @@
                         <span t-esc="tx.reference"/>
                         <span class="text-muted" t-field="tx.create_date"/>
                         <t t-if="tx.state == 'done'">
-                            <span class="label label-success orders_label_text_align"><i class="fa fa-fw fa-check"/> Done</span>
+                            <span class="label label-success orders_label_text_align"><span class="fa fa-fw fa-check"> Done</span></span>
                         </t>
                         <t t-if="tx.state != 'done'">
-                            <span class="label label-info orders_label_text_align"><i class="fa fa-fw fa-clock-o"/> Waiting</span>
+                            <span class="label label-info orders_label_text_align"><span class="fa fa-fw fa-clock-o"> Waiting</span></span>
                             <t t-if="tx.state_message"><br /><span t-esc="tx.state_message"/></t>
                         </t>
                     </div>
diff --git a/addons/sale_stock/static/src/js/tour.js b/addons/sale_stock/static/src/js/tour.js
index 690150677de73b30b874c62a818bd9487fb1b4b4..9822d124df0bfe0a3ebed68bb9ccba3977905228 100644
--- a/addons/sale_stock/static/src/js/tour.js
+++ b/addons/sale_stock/static/src/js/tour.js
@@ -13,15 +13,15 @@ odoo.define("sale_stock.tour", function (require) {
     };
 
     tour.tours.sale_tour.steps.splice(quotation_product_selected_step_index+1, 0, {
-        trigger: ".o_dialog_warning + .modal-footer .btn-primary",
+        trigger: "footer.modal-footer .btn-primary",
         auto: true,
     }, {
         trigger: "body:not(:has(.o_dialog_warning))",
         auto: true,
         in_modal: false,
         run: function (actions) {
-            if ($('.modal-footer .btn-primary').length){
-                actions.auto(".modal-footer .btn-primary");
+            if ($('footer.modal-footer .btn-primary').length){
+                actions.auto('footer.modal-footer .btn-primary');
             }
         },
     });
diff --git a/addons/sale_stock/views/res_config_settings_views.xml b/addons/sale_stock/views/res_config_settings_views.xml
index 532b26f4ecd39f4bd032a0d22ef4e19982bfee7d..12ce0dfd86051cb323b3acdbe44aa006a471d298 100644
--- a/addons/sale_stock/views/res_config_settings_views.xml
+++ b/addons/sale_stock/views/res_config_settings_views.xml
@@ -94,7 +94,7 @@
                     </div>
                     <div class="o_setting_right_pane">
                         <label for="use_security_lead"/>
-                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." role="img" aria-label="Values set here are company-specific." groups="base.group_multi_company"/>
                         <div class="text-muted">
                             Schedule deliveries earlier to avoid delays
                         </div>
diff --git a/addons/sale_stock/views/sale_stock_portal_template.xml b/addons/sale_stock/views/sale_stock_portal_template.xml
index ece6a8e07832486d2e91fecdb7def9c32c2d9487..1c2cbb396ac4784d047684d694eb77db9dcac8de 100644
--- a/addons/sale_stock/views/sale_stock_portal_template.xml
+++ b/addons/sale_stock/views/sale_stock_portal_template.xml
@@ -10,20 +10,20 @@
                     <t t-foreach="order.picking_ids.filtered(lambda picking: picking.picking_type_id.code != 'internal')" t-as="i">
                         <t t-set="report_url" t-value="'/my/picking/pdf/%s?%s' % (i.id, keep_query())"/>
                         <div id='picking_info'>
-                            <a t-att-href="report_url"><span class="fa fa-download"/></a>
+                            <a t-att-href="report_url"><span class="fa fa-download" role="img" aria-label="Download" title="Download"/></a>
                             <a t-att-href="report_url"><span t-field="i.name"/></a>
                             <span class="text-muted" t-field="i.date" t-options='{"widget": "date"}'/>
                             <t t-if="i.state == 'done'">
-                                <span class="label label-success label-text-align"><i class="fa fa-fw fa-truck"/> Shipped</span>
+                                <span class="label label-success label-text-align"><span class="fa fa-fw fa-truck"> Shipped</span></span>
                             </t>
                             <t t-if="i.state == 'partially_available'">
-                                <span class="label label-warning label-text-align"><i class="fa fa-fw fa-clock-o"/> Partially Available</span>
+                                <span class="label label-warning label-text-align"><span class="fa fa-fw fa-clock-o"> Partially Available</span></span>
                             </t>
                             <t t-if="i.state == 'cancel'">
-                                <span class="label label-danger label-text-align"><i class="fa fa-fw fa-times"/> Cancelled</span>
+                                <span class="label label-danger label-text-align"><span class="fa fa-fw fa-times"> Cancelled</span></span>
                             </t>
                             <t t-if="i.state in ['draft', 'waiting', 'confirmed', 'assigned']">
-                                <span class="label label-info label-text-align"><i class="fa fa-fw fa-clock-o"/> Preparation</span>
+                                <span class="label label-info label-text-align"><span class="fa fa-fw fa-clock-o"> Preparation</span></span>
                             </t>
                         </div>
                     </t>
diff --git a/addons/sale_stock/views/stock_config_settings_views.xml b/addons/sale_stock/views/stock_config_settings_views.xml
index 3b07c6542b98d42ff3276bc82feabfb1f9b1915c..040572b94e7fef7908765c3f6a99b8abe8f21f63 100644
--- a/addons/sale_stock/views/stock_config_settings_views.xml
+++ b/addons/sale_stock/views/stock_config_settings_views.xml
@@ -41,7 +41,7 @@
                     </div>
                     <div class="o_setting_right_pane">
                         <label for="use_security_lead"/>
-                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                        <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." role="img" aria-label="Values set here are company-specific." groups="base.group_multi_company"/>
                         <div class="text-muted">
                             Schedule deliveries earlier to avoid delays
                         </div>
@@ -56,4 +56,4 @@
         </field>
     </record>
 
-</odoo>
\ No newline at end of file
+</odoo>
diff --git a/addons/sale_stock/views/stock_views.xml b/addons/sale_stock/views/stock_views.xml
index 196b8e8aa770d02f7414f1a65f855a8d7653ab85..1a39a3e96e7180762ab361dcf75df9555332afbe 100644
--- a/addons/sale_stock/views/stock_views.xml
+++ b/addons/sale_stock/views/stock_views.xml
@@ -8,7 +8,7 @@
         </template>
 
         <template id="exception_on_so">
-            <div class="alert alert-warning"> 
+            <div class="alert alert-warning" role="alert"> 
                 Exception(s) occurred on the sale order(s):
                 <t t-foreach="sale_order_ids" t-as="sale_order">
                     <a href="#" data-oe-model="sale.order" t-att-data-oe-id="sale_order.id"><t t-esc="sale_order.name"/></a>.
@@ -42,7 +42,7 @@
         </template>
 
         <template id="exception_on_picking">
-            <div class="alert alert-warning"> 
+            <div class="alert alert-warning" role="alert"> 
                 Exception(s) occurred on the picking:
                 <a href="#" data-oe-model="stock.picking" t-att-data-oe-id="origin_picking.id"><t t-esc="origin_picking.name"/></a>.
                 Manual actions may be needed.
diff --git a/addons/sale_timesheet/views/hr_timesheet_templates.xml b/addons/sale_timesheet/views/hr_timesheet_templates.xml
index 5503066c3c31853b779a9d317fef0b213871016c..875d797fcb98255a9bbd52e1d2be7a901a175202 100644
--- a/addons/sale_timesheet/views/hr_timesheet_templates.xml
+++ b/addons/sale_timesheet/views/hr_timesheet_templates.xml
@@ -26,7 +26,7 @@
                             <div class="o_timesheet_plan_stat_buttons oe_button_box">
                                 <t t-foreach="stat_buttons" t-as="stat_button">
                                     <button class="btn btn-sm oe_stat_button" t-att-data-domain="stat_button['domain']" t-att-data-res-model="stat_button['res_model']">
-                                        <div t-attf-class="fa fa-fw o_button_icon #{stat_button['icon']}"></div>
+                                        <div t-attf-class="fa fa-fw o_button_icon #{stat_button['icon']}" role="img" aria-label="Statistics" title="Statistics"></div>
                                         <div name="task_count" class="o_field_widget o_stat_info o_readonly_modifier" t-att-title="stat_button['name']">
                                             <span class="o_stat_value" t-if="stat_button.get('count')">
                                                 <t t-esc="stat_button['count']"/>
diff --git a/addons/sale_timesheet/views/res_config_settings_views.xml b/addons/sale_timesheet/views/res_config_settings_views.xml
index 3d5dafd454cc986dfcd70c2789c0ba15c2b71454..16102a8b2ce93f956d6db5eb0879176dbe27380d 100644
--- a/addons/sale_timesheet/views/res_config_settings_views.xml
+++ b/addons/sale_timesheet/views/res_config_settings_views.xml
@@ -12,7 +12,7 @@
                 <div name="timesheet_billing" class="row mt16 o_settings_container" title="Sell services (e.g. project, maintenance), record time spent using Timesheets app and invoice them based on a fixed price (ordered quantity) or on the time spent (delivered quantity)">
                     <div class="col-xs-12 col-md-6 o_setting_box">
                         <div class="o_setting_right_pane">
-                            <label string="Time Billing"/>
+                            <span class="o_form_label">Time Billing</span>
                             <div class="text-muted">
                                 Sell services and invoice time spent
                             </div>
diff --git a/addons/sales_team/views/crm_team_views.xml b/addons/sales_team/views/crm_team_views.xml
index df971e6caa37e018c223ef63c261b7d02018a060..925c7651efa934fe1747e2db2deb9aee4e868b75 100644
--- a/addons/sales_team/views/crm_team_views.xml
+++ b/addons/sales_team/views/crm_team_views.xml
@@ -77,11 +77,11 @@
                                             <t t-name="kanban-box">
                                                 <div class="oe_kanban_global_click" style="max-width: 200px">
                                                     <div class="o_kanban_record_top">
-                                                        <img t-att-src="kanban_image('res.users', 'image_small', record.id.raw_value)" height="40" width="40" class="oe_avatar oe_kanban_avatar_smallbox mb0"/>
+                                                        <img t-att-src="kanban_image('res.users', 'image_small', record.id.raw_value)" height="40" width="40" class="oe_avatar oe_kanban_avatar_smallbox mb0" alt="Avatar"/>
                                                         <div class="o_kanban_record_headings ml8">
                                                             <strong class="o_kanban_record_title"><field name="name"/></strong>
                                                         </div>
-                                                        <a t-if="! read_only_mode" type="delete" class="text-danger">
+                                                        <a t-if="! read_only_mode" type="delete" class="text-danger" aria-label="Delete" title="Delete">
                                                             <i class="fa fa-times"></i>
                                                         </a>
                                                     </div>
diff --git a/addons/sales_team/views/sales_team_dashboard.xml b/addons/sales_team/views/sales_team_dashboard.xml
index 18f3ade00136b258af72ff3a57af723284d48469..ffdac9852ed7540f0129a9ac9c494e71365b4868 100644
--- a/addons/sales_team/views/sales_team_dashboard.xml
+++ b/addons/sales_team/views/sales_team_dashboard.xml
@@ -20,7 +20,7 @@
                                     <div class="o_primary"><field name="name"/></div>
                                 </div>
                                 <div class="o_kanban_manage_button_section">
-                                    <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" /></a>
+                                    <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
                                 </div>
                             </div>
                             <div class="container o_kanban_card_content">
@@ -41,35 +41,35 @@
                                     <div class="col-xs-12 o_kanban_primary_bottom bottom_block">
                                     </div>
                                 </div>
-                            </div><div class="container o_kanban_card_manage_pane dropdown-menu">
+                            </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
                                 <div class="row">
                                     <div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_view">
-                                        <div class="o_kanban_card_manage_title">
+                                        <div role="menuitem" class="o_kanban_card_manage_title">
                                             <span>View</span>
                                         </div>
                                     </div>
                                     <div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_new">
-                                        <div class="o_kanban_card_manage_title">
+                                        <div role="menuitem" class="o_kanban_card_manage_title">
                                             <span>New</span>
                                         </div>
                                     </div>
                                     <div class="col-xs-4 o_kanban_card_manage_section o_kanban_manage_reports">
-                                        <div class="o_kanban_card_manage_title">
+                                        <div role="menuitem" class="o_kanban_card_manage_title">
                                             <span>Reporting</span>
                                         </div>
                                     </div>
                                 </div>
 
                                 <div t-if="widget.editable" class="o_kanban_card_manage_settings row" groups="sales_team.group_sale_manager">
-                                    <div class="col-xs-8">
-                                        <ul class="oe_kanban_colorpicker" data-field="color"/>
+                                    <div role="menuitem" aria-haspopup="true" class="col-xs-8">
+                                        <ul class="oe_kanban_colorpicker" data-field="color" role="menu"/>
                                     </div>
-                                    <div class="col-xs-4 text-right">
+                                    <div role="menuitem" class="col-xs-4 text-right">
                                         <a type="edit">Settings</a>
                                     </div>
                                 </div>
                                 <div class="row mb16">
-                                    <div class="col-xs-6">
+                                    <div role="menuitem" class="col-xs-6">
                                         <field name="is_favorite" widget="boolean_favorite" />
                                     </div>
                                 </div>
diff --git a/addons/sms/static/src/xml/sms_widget.xml b/addons/sms/static/src/xml/sms_widget.xml
index 46ac81f2885413aff2334af310cddf8f996a2ebf..93c361cbd89fa69ad5d47cacc3e70a6e2f0cc83a 100644
--- a/addons/sms/static/src/xml/sms_widget.xml
+++ b/addons/sms/static/src/xml/sms_widget.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <templates>
     <t t-name="sms.sms_count">
-        <span class="pull-right"><span class="text-muted o_sms_count"></span> <a href="https://iap-services.odoo.com/iap/sms/pricing" target="_blank" class="fa fa-lg fa-info"/></span>
+        <span class="pull-right"><span class="text-muted o_sms_count"></span> <a href="https://iap-services.odoo.com/iap/sms/pricing" target="_blank" class="fa fa-lg fa-info" aria-label="SMS Pricing" title="SMS Pricing"/></span>
     </t>
 </templates>
diff --git a/addons/sms/views/res_partner_views.xml b/addons/sms/views/res_partner_views.xml
index a35d5f10516512a64f19152e005ee8e2700cd09b..33d20fd193e15265948598e96a576d54198dac3f 100644
--- a/addons/sms/views/res_partner_views.xml
+++ b/addons/sms/views/res_partner_views.xml
@@ -16,6 +16,8 @@
                         type="action"
                         name="%(sms.send_sms_form_action)d"
                         class="btn-xs btn-link mb4 fa fa-envelope-o"
+                        aria-label="Send SMS"
+                        title="Send SMS"
                         attrs="{'invisible':[('phone', '=', False)]}"
                         context="{'field_name': 'phone'}"
                     />
@@ -29,6 +31,8 @@
                         type="action"
                         name="%(sms.send_sms_form_action)d"
                         class="btn-xs btn-link mb4 fa fa-envelope-o"
+                        aria-label="Send SMS"
+                        title="Send SMS"
                         attrs="{'invisible':[('mobile', '=', False)]}"
                         context="{'field_name': 'mobile'}"
                         />
diff --git a/addons/stock/report/report_location_barcode.xml b/addons/stock/report/report_location_barcode.xml
index 7759058e737e02dac5a1af8eb67bf886b66d275e..7cf706d046770443c6f219c8f52dfae39f760a0d 100644
--- a/addons/stock/report/report_location_barcode.xml
+++ b/addons/stock/report/report_location_barcode.xml
@@ -14,7 +14,7 @@
             <t t-foreach="page_docs" t-as="o">
                 <t t-if="o.barcode"><t t-set="content" t-value="o.barcode"/></t>
                 <t t-if="not o.barcode"><t t-set="content" t-value="o.name"/></t>
-                <img class="barcode" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s&amp;humanreadable=1' % ('Code128', content, 600, 100)"/>
+                <img class="barcode" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s&amp;humanreadable=1' % ('Code128', content, 600, 100)" alt="Barcode"/>
             </t>
         </div>
     </t>
diff --git a/addons/stock/report/report_lot_barcode.xml b/addons/stock/report/report_lot_barcode.xml
index 1728782a2efa0413a97a9714da1d7efb2596d848..259ba9f904cd379a96831308194ee5d1bb3713a6 100644
--- a/addons/stock/report/report_lot_barcode.xml
+++ b/addons/stock/report/report_lot_barcode.xml
@@ -27,13 +27,13 @@
                             </table>
                         </div>
                         <div class="col-xs-4">
-                            <img class="image" t-att-src="'data:image/png;base64,%s' % to_text(res_company.logo)" style="border:auto;"/>
+                            <img class="image" t-att-src="'data:image/png;base64,%s' % to_text(res_company.logo)" style="border:auto;" alt="Logo"/>
                         </div>
                     </div>
                     <div class="row">
                         <div class="col-xs-12 mt32">
                             <table class="table table-condensed" style="border-bottom: 3px solid black !important;"><thead><th> </th></thead></table>
-                            <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', o.name, 600, 100)" style="width:300px;height:50px"/>
+                            <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', o.name, 600, 100)" style="width:300px;height:50px" alt="Barcode"/>
                             <p class="text-center" t-field="o.name"></p>
                         </div>
                     </div>
@@ -43,4 +43,4 @@
     </t>
 </template>
 </data>
-</odoo>
\ No newline at end of file
+</odoo>
diff --git a/addons/stock/report/report_package_barcode.xml b/addons/stock/report/report_package_barcode.xml
index a36dc14db4eafe7f7338bc9379dda57f582e8db1..92e547053468d1d2b6b2385c555928b776a64357 100644
--- a/addons/stock/report/report_package_barcode.xml
+++ b/addons/stock/report/report_package_barcode.xml
@@ -7,7 +7,7 @@
             <t>
                 <div class="page">
                     <div class="oe_structure"/>
-                    <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', o.name, 600, 100)"
+                    <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', o.name, 600, 100)" alt="Barcode"
                         style="width:300px;height:50px" class="pull-right mb16"/>
                     <h1 t-field="o.name" class="mt0 pull-left"/>
                     <div class="row o_packaging_type" t-if="o.packaging_id">
@@ -59,7 +59,7 @@
                     <div class="oe_structure"/>
                     <div class="row">
                         <div class="col-xs-12 text-center">
-                            <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', o.name, 600, 100)" style="width:600px;height:100px"/>
+                            <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', o.name, 600, 100)" style="width:600px;height:100px" alt="Barcode"/>
                             <p t-field="o.name"  style="font-size:20px;"></p>
                         </div>
                     </div>
diff --git a/addons/stock/report/report_stockpicking_operations.xml b/addons/stock/report/report_stockpicking_operations.xml
index f125940933491d0bde5bd58e1d36504ae93118c8..8b429cb96cadea3c397d5310da5bc00268cf9898 100644
--- a/addons/stock/report/report_stockpicking_operations.xml
+++ b/addons/stock/report/report_stockpicking_operations.xml
@@ -9,7 +9,7 @@
                         <div class="page">
                             <div class="row mb16">
                                 <div class="col-xs-4 pull-right" name="right_box">
-                                    <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', o.name, 600, 100)" style="width:300px;height:50px;"/>
+                                    <img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', o.name, 600, 100)" style="width:300px;height:50px;" alt="Barcode"/>
                                 </div>
                             </div>
                             <div class="row">
@@ -116,15 +116,15 @@
                                                     </div>
                                                 </td>
                                                 <td width="15%" class=" text-center h6" t-if="has_serial_number">
-                                                    <img t-if="has_serial_number and (ml.lot_id or ml.lot_name)" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s&amp;humanreadable=1' % ('Code128', ml.lot_id.name, 600, 100)" style="width:100%;height:35px;"/>
+                                                    <img t-if="has_serial_number and (ml.lot_id or ml.lot_name)" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s&amp;humanreadable=1' % ('Code128', ml.lot_id.name, 600, 100)" style="width:100%;height:35px;" alt="Barcode"/>
 
                                                 </td>
                                                 <td width="15%" class="text-center" t-if="has_barcode">
                                                     <t t-if="product_barcode != move.product_id.barcode">
                                                         <span t-if="move.product_id and move.product_id.barcode">
-                                                            <img t-if="len(move.product_id.barcode) == 13" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN13', move.product_id.barcode, 600, 100)" style="width:100%;height:35px"/>
-                                                            <img t-elif="len(move.product_id.barcode) == 8" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN8', move.product_id.barcode, 600, 100)" style="width:100%;height:35px"/>
-                                                            <img t-else="" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', move.product_id.barcode, 600, 100)" style="width:100%;height:35px"/>
+                                                            <img t-if="len(move.product_id.barcode) == 13" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN13', move.product_id.barcode, 600, 100)" style="width:100%;height:35px" alt="Barcode"/>
+                                                            <img t-elif="len(move.product_id.barcode) == 8" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('EAN8', move.product_id.barcode, 600, 100)" style="width:100%;height:35px" alt="Barcode"/>
+                                                            <img t-else="" t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', move.product_id.barcode, 600, 100)" style="width:100%;height:35px" alt="Barcode"/>
 
                                                         </span>
                                                         <t t-set="product_barcode" t-value="move.product_id.barcode"/>
@@ -148,7 +148,7 @@
                                     <tr t-foreach="o.package_level_ids.sorted(key=lambda p: p.package_id.name)" t-as="package">
                                         <t t-set="package" t-value="package.with_context({'picking_id':o.id})" />
                                         <td><span t-field="package.package_id.name"/></td>
-                                        <td><img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', package.package_id.name, 600, 100)" style="width:300px    ;height:50px"/></td>
+                                        <td><img t-att-src="'/report/barcode/?type=%s&amp;value=%s&amp;width=%s&amp;height=%s' % ('Code128', package.package_id.name, 600, 100)" style="width:300px    ;height:50px" alt="Barcode"/></td>
                                         <td><span t-field="package.location_id"/></td>
                                         <td><span t-field="package.location_dest_id"/></td>
                                     </tr>
diff --git a/addons/stock/static/src/xml/stock_traceability_report_backend.xml b/addons/stock/static/src/xml/stock_traceability_report_backend.xml
index e0ff61dc1d84104119c0d8309bcd506a1076730a..d6a30fb94143e11a2d154d31054de420177e8e51 100644
--- a/addons/stock/static/src/xml/stock_traceability_report_backend.xml
+++ b/addons/stock/static/src/xml/stock_traceability_report_backend.xml
@@ -6,16 +6,16 @@
         <button type="button" class='btn btn-primary btn-sm o_stock-widget-pdf'>PRINT</button>
     </t>
 
-    <div t-name='stockReports.errorModal' class="modal" id="editable_error" tabindex="-1" data-backdrop="static" role="dialog" aria-hidden="true" style="z-index:9999;">
+    <div role="dialog" t-name='stockReports.errorModal' class="modal" id="editable_error" tabindex="-1" data-backdrop="static" style="z-index:9999;">
         <div class="modal-dialog modal-sm">
             <div class="modal-content">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+                <header class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
                     <h3 class="modal-title">Error</h3>
-                </div>
-                <div class="modal-body">
+                </header>
+                <main class="modal-body">
                     <p id='insert_error' class='text-center'></p>
-                </div>
+                </main>
             </div>
         </div>
     </div>
diff --git a/addons/stock/static/src/xml/stock_traceability_report_line.xml b/addons/stock/static/src/xml/stock_traceability_report_line.xml
index 48d309d8a27e9d09f074e22439a4f291092d842e..4fafadc5a04d161fa2a7a5e9f2e04d843a23bfb2 100644
--- a/addons/stock/static/src/xml/stock_traceability_report_line.xml
+++ b/addons/stock/static/src/xml/stock_traceability_report_line.xml
@@ -3,11 +3,11 @@
 <templates>
 
     <t t-name="foldable">
-        <span t-att-class="'o_stock_reports_foldable ' + lineId + ' o_stock_reports_caret_icon'"><i class="fa fa-fw fa-caret-down"></i></span>
+        <span t-att-class="'o_stock_reports_foldable ' + lineId + ' o_stock_reports_caret_icon'"><i class="fa fa-fw fa-caret-down" role="img" aria-label="Fold" title="Fold"></i></span>
     </t>
 
     <t t-name="unfoldable">
-        <span t-att-class="'o_stock_reports_unfoldable ' + lineId + ' o_stock_reports_caret_icon'"><i class="fa fa-fw fa-caret-right"></i></span>
+        <span t-att-class="'o_stock_reports_unfoldable ' + lineId + ' o_stock_reports_caret_icon'"><i class="fa fa-fw fa-caret-right" role="img" aria-label="Unfold" title="Unfold"></i></span>
     </t>
 
     <t t-name="report_mrp_line">
@@ -33,7 +33,7 @@
                     <t t-if="column == 1">
                         <span t-att-style="space_td" t-att-class="domainClass"></span>
                         <t t-if="l.unfoldable">
-                            <span class="o_stock_reports_unfoldable o_stock_reports_caret_icon"><i class="fa fa-fw fa-caret-right"></i></span>
+                            <span class="o_stock_reports_unfoldable o_stock_reports_caret_icon"><i class="fa fa-fw fa-caret-right" role="img" aria-label="Unfold" title="Unfold"></i></span>
                         </t>
                     </t>
                     <t t-if="l.reference == c">
diff --git a/addons/stock/views/report_stock_traceability.xml b/addons/stock/views/report_stock_traceability.xml
index 8b2e2c7fc48d3135115fe2c3e8f7acae03303fc4..6d717cd737816cb721e15c7d9f8bd664c9f5b9ec 100644
--- a/addons/stock/views/report_stock_traceability.xml
+++ b/addons/stock/views/report_stock_traceability.xml
@@ -24,10 +24,10 @@
                       <td t-att-data-id="a.get('id')" t-att-data-model="a['model']" t-att-data-model_id="a['model_id']" t-att-class="tdclass" t-att-data-level="a['level']">
                         <t t-if="column == 1">
                             <t t-if="a.get('unfoldable') and not a.get('is_used')">
-                                <span t-att-data-id="a['id']" class="o_stock_reports_unfoldable o_stock_reports_caret_icon"><i class="fa fa-fw fa-caret-right"></i></span>
+                                <span t-att-data-id="a['id']" class="o_stock_reports_unfoldable o_stock_reports_caret_icon"><i class="fa fa-fw fa-caret-right" role="img" aria-label="Unfold" title="Unfold"></i></span>
                             </t>
                             <t t-if="a.get('is_used')">
-                                <span class="o_stock_reports_stream" title="Traceability Report"><i class="fa fa-fw fa-level-up fa-rotate-270"></i></span>
+                                <span role="img" class="o_stock_reports_stream" title="Traceability Report" aria-label="Traceability Report"><i class="fa fa-fw fa-level-up fa-rotate-270"></i></span>
                             </t>
                         </t>
                         <t t-if="a['reference'] == c">
diff --git a/addons/stock/views/stock_inventory_views.xml b/addons/stock/views/stock_inventory_views.xml
index 37d72d168a37a0f30363358a760f14f3ae1bfd7b..e40566f33ded48f70d1ecdd695b7bf88b3753660 100644
--- a/addons/stock/views/stock_inventory_views.xml
+++ b/addons/stock/views/stock_inventory_views.xml
@@ -97,7 +97,7 @@
                             </div>
                             <div class="o_kanban_record_bottom">
                                 <div class="oe_kanban_bottom_left">
-                                    <i class="fa fa-clock-o"/> <t t-esc="record.date.value"/>
+                                    <i class="fa fa-clock-o" role="img" aria-label="Date" title="Date"/> <t t-esc="record.date.value"/>
                                 </div>
                             </div>
                         </div>
diff --git a/addons/stock/views/stock_move_views.xml b/addons/stock/views/stock_move_views.xml
index f5f95765ea5e1e20317ef654b54a89e27529d9df..4771536baaf7cae716e1651a76864bfb7d8db3cd 100644
--- a/addons/stock/views/stock_move_views.xml
+++ b/addons/stock/views/stock_move_views.xml
@@ -456,7 +456,7 @@
                                     </div>
                                     <div class="col-xs-8">
                                         <span class="pull-right">
-                                            <i class="fa fa-clock-o"/> <field name="date"/>
+                                            <i class="fa fa-clock-o" role="img" aria-label="Date" title="Date"/> <field name="date"/>
                                         </span>
                                     </div>
                                 </div>
diff --git a/addons/stock/views/stock_picking_views.xml b/addons/stock/views/stock_picking_views.xml
index fc836adb87f4ea5ccfbfd1e16d72715caec13730..71e1635d3b46a38a77478bc0b4edc8c58d99739d 100644
--- a/addons/stock/views/stock_picking_views.xml
+++ b/addons/stock/views/stock_picking_views.xml
@@ -640,7 +640,7 @@
                                             <div class="o_secondary"><field class="o_secondary"  name="warehouse_id"/></div>
                                         </div>
                                         <div class="o_kanban_manage_button_section">
-                                            <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" /></a>
+                                            <a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/></a>
                                         </div>
                                     </div>
                                     <div class="container o_kanban_card_content">
@@ -690,40 +690,40 @@
                                                 </div>
                                             </div>
                                         </div>
-                                    </div><div class="container o_kanban_card_manage_pane dropdown-menu">
+                                    </div><div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
                                         <div class="row">
                                             <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_view">
-                                                <div class="o_kanban_card_manage_title">
+                                                <div role="menuitem" class="o_kanban_card_manage_title">
                                                     <span>View</span>
                                                 </div>
-                                                <div>
+                                                <div role="menuitem">
                                                     <a name="get_stock_picking_action_picking_type" type="object">All</a>
                                                 </div>
-                                                <div>
+                                                <div role="menuitem">
                                                     <a name="%(action_picking_tree_ready)d" type="action">Ready</a>
                                                 </div>
-                                                <div>
+                                                <div role="menuitem">
                                                     <a name="get_action_picking_tree_waiting" type="object">Waiting</a>
                                                 </div>
                                             </div>
                                             <div class="col-xs-6 o_kanban_card_manage_section o_kanban_manage_new">
-                                                <div class="o_kanban_card_manage_title">
+                                                <div role="menuitem" class="o_kanban_card_manage_title">
                                                     <span>New</span>
                                                 </div>
-                                                <div>
+                                                <div role="menuitem">
                                                     <a name="%(action_picking_form)d" type="action" context="{'default_immediate_transfer': True}">Immediate Transfer</a>
                                                 </div>
-                                                <div>
+                                                <div role="menuitem">
                                                     <a name="%(action_picking_form)d" type="action">Planned Transfer</a>
                                                 </div>
                                             </div>
                                         </div>
 
                                         <div t-if="widget.editable" class="o_kanban_card_manage_settings row">
-                                            <div class="col-xs-8">
-                                                <ul class="oe_kanban_colorpicker" data-field="color"/>
+                                            <div class="col-xs-8" role="menuitem" aria-haspopup="true">
+                                                <ul class="oe_kanban_colorpicker" data-field="color" role="menu"/>
                                             </div>
-                                            <div class="col-xs-4 text-right">
+                                            <div role="menuitem" class="col-xs-4 text-right">
                                                 <a type="edit">Settings</a>
                                             </div>
                                         </div>
diff --git a/addons/stock/views/stock_scrap_views.xml b/addons/stock/views/stock_scrap_views.xml
index 6bde30ca512f142053d13324ebd46742bba60040..365442903e47c04a97aaf42a65e60709759bb04e 100644
--- a/addons/stock/views/stock_scrap_views.xml
+++ b/addons/stock/views/stock_scrap_views.xml
@@ -86,7 +86,7 @@
                                         <span t-esc="record.name.value"/>
                                     </strong>
                                     <strong t-if="record.date_expected.value" class="col-xs-6 text-right">
-                                        <i class="fa fa-clock-o"/><span t-esc="record.date_expected.value"/>
+                                        <i class="fa fa-clock-o" role="img" aria-label="Expected date" title="Expected date"/><span t-esc="record.date_expected.value"/>
                                     </strong>
                                     <div class="col-xs-12">
                                         <span t-esc="record.product_id.value"/>
diff --git a/addons/stock/views/stock_template.xml b/addons/stock/views/stock_template.xml
index 4ca47b3013d77e8bbd3e6d3d06ee2c225d489806..119fbd2ff6c7a03ca9c6e7c0315a2afa996c570e 100644
--- a/addons/stock/views/stock_template.xml
+++ b/addons/stock/views/stock_template.xml
@@ -102,7 +102,7 @@
     </template>
 
     <template id="exception_on_picking">
-        <div class="alert alert-warning"> Exception(s) occurred on the picking
+        <div class="alert alert-warning" role="alert"> Exception(s) occurred on the picking
             <a href="#" data-oe-model="stock.picking" t-att-data-oe-id="origin_picking.id"><t t-esc="origin_picking.name"/></a>.
             Manual actions may be needed.
             <div class="mt16">
diff --git a/addons/stock_account/views/stock_account_views.xml b/addons/stock_account/views/stock_account_views.xml
index 77747cdea5ce388f75402745300b1027ef335bb4..0ee6b9bd7755041abebace9d9f0444ac02ebc724 100644
--- a/addons/stock_account/views/stock_account_views.xml
+++ b/addons/stock_account/views/stock_account_views.xml
@@ -79,7 +79,7 @@
                     <field name="currency_id" invisible="1"/>
                     <field name="stock_value" sum="Stock Valuation" widget="monetary"/>
                     <field name="cost_method" invisible="1"/>
-                    <button name="action_valuation_at_date_details" type="object" icon="fa-info-circle" attrs="{'invisible': [('cost_method', '!=', 'fifo')]}" />
+                    <button name="action_valuation_at_date_details" type="object" icon="fa-info-circle" aria-label="Valuation" title="Valuation" attrs="{'invisible': [('cost_method', '!=', 'fifo')]}" />
                 </tree>
             </field>
         </record>
diff --git a/addons/stock_landed_costs/views/stock_landed_cost_views.xml b/addons/stock_landed_costs/views/stock_landed_cost_views.xml
index 77362b076b9d9b1ef34056d7fdf2805ba65be70c..b904605ecd115292a76ca3664fa91e79a922ca28 100644
--- a/addons/stock_landed_costs/views/stock_landed_cost_views.xml
+++ b/addons/stock_landed_costs/views/stock_landed_cost_views.xml
@@ -135,7 +135,7 @@
                                         </span>
                                     </div>
                                     <div class="col-xs-6">
-                                        <i class="fa fa-clock-o"/><span t-esc="record.date.value"/>
+                                        <i class="fa fa-clock-o" title="Date" role="img" aria-label="Date"/><span t-esc="record.date.value"/>
                                     </div>
                                     <div class="col-xs-6 text-right">
                                         <field name="account_journal_id"/>
diff --git a/addons/stock_picking_batch/views/stock_picking_batch_views.xml b/addons/stock_picking_batch/views/stock_picking_batch_views.xml
index 5666a0e10fd2f2e3f1b45fd094e30de22b36911b..79d4bb30db7bb4330df2dfcf828f19ae595866d4 100644
--- a/addons/stock_picking_batch/views/stock_picking_batch_views.xml
+++ b/addons/stock_picking_batch/views/stock_picking_batch_views.xml
@@ -74,7 +74,7 @@
                             <div class="o_kanban_record_bottom">
                                 <div class="oe_kanban_bottom_left"/>
                                 <div class="oe_kanban_bottom_right">
-                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
+                                    <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
                                 </div>
                             </div>
                         </div>
diff --git a/addons/survey/views/survey_result.xml b/addons/survey/views/survey_result.xml
index a28c6d78890561c2784683c2ab9cdcf7b69198e7..02f66f1aa92d51d3413eba77af6e844172c28b92 100644
--- a/addons/survey/views/survey_result.xml
+++ b/addons/survey/views/survey_result.xml
@@ -7,11 +7,11 @@
             <div class="container js_surveyresult">
                 <t t-call="survey.back" />
                 <div class="jumbotron mt32">
-                    <h1><span t-field="survey.title" /> <span style="font-size:1.5em;" class="fa fa-bar-chart-o pull-right "/></h1>
+                    <h1><span t-field="survey.title" /> <span style="font-size:1.5em;" class="fa fa-bar-chart-o pull-right " role="img" aria-label="Chart" title="Chart"/></h1>
                     <div t-field="survey.description" class="oe_no_empty" />
                 </div>
                 <div class="panel panel-default hidden-print">
-                    <div class="panel-heading"><span class="fa fa-filter"></span>  Filters <span t-if="filter_display_data" class="pull-right text-primary clear_survey_filter"><i class="fa fa-times"></i> Clear All Filters</span></div>
+                    <div class="panel-heading"><span class="fa fa-filter"> Filters </span><span t-if="filter_display_data" class="pull-right text-primary clear_survey_filter"><i class="fa fa-times"> Clear All Filters</i></span></div>
                     <div class="panel-body">
                         <span t-if="filter_finish == True">
                             <span class="label label-default only_left_radius filter-all">All surveys</span><span class="label label-primary only_right_radius filter-finished">Finished surveys</span>
@@ -20,7 +20,7 @@
                             <span class="label label-primary only_left_radius filter-all">All surveys</span><span class="label label-default only_right_radius filter-finished">Finished surveys</span>
                         </span>
                         <span t-foreach="filter_display_data" t-as="filter_data">
-                            <span class="label label-primary only_left_radius"><i class="fa fa-filter"></i></span><span class="label label-primary no_radius" t-esc="filter_data['question_text']"></span><span class="label label-success only_right_radius" t-esc="' > '.join(filter_data['labels'])"></span>
+                            <span class="label label-primary only_left_radius"><i class="fa fa-filter" role="img" aria-label="Filter" title="Filter"></i></span><span class="label label-primary no_radius" t-esc="filter_data['question_text']"></span><span class="label label-success only_right_radius" t-esc="' > '.join(filter_data['labels'])"></span>
                         </span>
                     </div>
                 </div>
@@ -135,33 +135,33 @@
     <template id="result_choice" name="Choice Result">
         <div>
             <!-- Tabs -->
-            <ul class="nav nav-tabs hidden-print">
+            <ul class="nav nav-tabs hidden-print" role="tablist">
                 <li class="active" t-if="question.type != 'simple_choice'">
-                    <a t-att-href="'#graph_question_%d' % question.id" data-toggle="tab">
-                        <i class="fa fa-bar-chart-o"></i> Graph
+                    <a t-att-href="'#graph_question_%d' % question.id" t-att-aria-controls="'graph_question_%d' % question.id" data-toggle="tab" role="tab">
+                        <span class="fa fa-bar-chart-o"> Graph</span>
                     </a>
                 </li>
                 <li class="active" t-if="question.type == 'simple_choice'">
-                    <a t-att-href="'#graph_question_%d' % question.id" data-toggle="tab">
-                        <i class="fa fa-bar-chart-o"></i> Pie Chart
+                    <a t-att-href="'#graph_question_%d' % question.id" t-att-aria-controls="'graph_question_%d' % question.id" data-toggle="tab" role="tab">
+                        <span class="fa fa-bar-chart-o"> Pie Chart</span>
                     </a>
                 </li>
                 <li>
-                    <a t-att-href="'#data_question_%d' % question.id" data-toggle="tab">
-                        <i class="fa fa-list-alt"></i> Data
+                    <a t-att-href="'#data_question_%d' % question.id" t-att-aria-controls="'data_question_%d' % question.id" data-toggle="tab" role="tab">
+                        <span class="fa fa-list-alt"> Data</span>
                     </a>
                 </li>
             </ul>
             <div class="tab-content">
-                <div class="tab-pane active survey_graph" t-if="question.type != 'simple_choice'" t-att-id="'graph_question_%d' % question.id" t-att-data-question_id="question.id" data-graph_type="bar" t-att-graph-data="graph_data">
+                <div role="tabpanel" class="tab-pane active survey_graph" t-if="question.type != 'simple_choice'" t-att-id="'graph_question_%d' % question.id" t-att-data-question_id="question.id" data-graph_type="bar" t-att-graph-data="graph_data">
                     <!-- svg element for drawing bar chart -->
                     <svg style="height:20em"></svg>
                 </div>
-                <div class="tab-pane active survey_graph" t-if="question.type == 'simple_choice'" t-att-id="'graph_question_%d' % question.id" t-att-data-question_id="question.id" data-graph_type="pie" t-att-graph-data="graph_data">
+                <div role="tabpanel" class="tab-pane active survey_graph" t-if="question.type == 'simple_choice'" t-att-id="'graph_question_%d' % question.id" t-att-data-question_id="question.id" data-graph_type="pie" t-att-graph-data="graph_data">
                     <!-- svg element for drawing pie chart -->
                     <svg style="height:20em"></svg>
                 </div>
-                <div class="tab-pane" t-att-id="'data_question_%d' % question.id">
+                <div role="tabpanel" class="tab-pane" t-att-id="'data_question_%d' % question.id">
                     <table class="table table-hover table-condensed">
                         <thead>
                             <tr>
@@ -177,7 +177,7 @@
                                 <td class="survey_answer">
                                     <span t-esc="round(user_input['count']*100.0/(input_summary['answered'] or 1),2)"></span> %
                                     <span t-esc="user_input['count']" class="label label-primary">Vote</span>
-                                    <i class="fa fa-filter text-primary invisible survey_filter" t-att-data-question_id="question.id" t-att-data-answer_id="user_input['answer_id']"></i>
+                                    <i class="fa fa-filter text-primary invisible survey_filter" t-att-data-question_id="question.id" t-att-data-answer_id="user_input['answer_id']" role="img" aria-label="Filter question" title="Filter question"/>
                                 </td>
                             </tr>
                         </tbody>
@@ -199,26 +199,24 @@
     <template id="result_matrix" name="Matrix Result">
         <t t-set="matrix_result" t-value="prepare_result"/>
         <!-- Tabs -->
-        <ul class="nav nav-tabs hidden-print">
+        <ul class="nav nav-tabs hidden-print" role="tablist">
             <li class="active">
-                <a t-att-href="'#graph_question_%d' % question.id" data-toggle="tab">
-                    <i class="fa fa-bar-chart"></i>
-                    Graph
+                <a t-att-href="'#graph_question_%d' % question.id" t-att-aria-controls="'graph_question_%d' % question.id" data-toggle="tab" role="tab">
+                    <span class="fa fa-bar-chart">Graph</span>
                 </a>
             </li>
             <li>
-                <a t-att-href="'#data_question_%d' % question.id" data-toggle="tab">
-                    <i class="fa fa-list-alt"></i>
-                    Data
+                <a t-att-href="'#data_question_%d' % question.id" t-att-aria-controls="'data_question_%d' % question.id" data-toggle="tab" role="tab">
+                    <span class="fa fa-list-alt">Data</span>
                 </a>
             </li>
         </ul>
         <div class="tab-content">
-            <div class="tab-pane active with-3d-shadow with-transitions survey_graph" t-att-id="'graph_question_%d' % question.id" t-att-data-question_id= "question.id" data-graph_type= "multi_bar" t-att-graph-data="graph_data">
+            <div role="tabpanel" class="tab-pane active with-3d-shadow with-transitions survey_graph" t-att-id="'graph_question_%d' % question.id" t-att-data-question_id= "question.id" data-graph_type= "multi_bar" t-att-graph-data="graph_data">
                 <!-- svg element for drawing Multibar chart -->
                 <svg style="height:20em"></svg>
             </div>
-            <div class="tab-pane" t-att-id="'data_question_%d' % question.id">
+            <div role="tabpanel" class="tab-pane" t-att-id="'data_question_%d' % question.id">
                 <table class="table table-hover table-condensed text-right">
                     <thead>
                         <tr>
@@ -235,7 +233,7 @@
                             </td>
                             <td class="survey_answer" t-foreach="matrix_result['answers']" t-as="answer_id">
                                 <span t-esc="round(matrix_result['result'][(row_id,answer_id)]*100.0/(input_summary['answered'] or 1),2)"></span> %
-                                <span class="label label-primary" t-esc="matrix_result['result'][(row_id,answer_id)]"></span><i class="fa fa-filter text-primary invisible survey_filter" t-att-data-question_id="question.id" t-att-data-row_id="row_id" t-att-data-answer_id="answer_id"></i>
+                                <span class="label label-primary" t-esc="matrix_result['result'][(row_id,answer_id)]"></span><i class="fa fa-filter text-primary invisible survey_filter" t-att-data-question_id="question.id" t-att-data-row_id="row_id" t-att-data-answer_id="answer_id" role="img" aria-label="Survey filter" title="Survey filter"></i>
                             </td>
                         </tr>
                     </tbody>
@@ -261,22 +259,21 @@
             <span class="label label-default only_left_radius">Minimum </span> <span class="label label-danger only_right_radius" t-esc="number_result['min']"></span>
             <span class="label label-default only_left_radius">Average </span> <span class="label label-warning only_right_radius" t-esc="number_result['average']"></span>
         </span>
-        <ul class="nav nav-tabs hidden-print">
+        <ul class="nav nav-tabs hidden-print" role="tablist">
             <li class="active">
-                <a t-att-href="'#most_common_%d' % question.id" data-toggle="tab">
-                    <i class="fa fa-list-ol"></i>
-                    Most Common <span t-esc="len(number_result['most_common'])"></span>
+                <a t-att-href="'#most_common_%d' % question.id" t-att-aria-controls="'most_common_%d' % question.id" data-toggle="tab" role="tab">
+                    <span class="fa fa-list-ol">Most Common </span>
+                    <span t-esc="len(number_result['most_common'])"></span>
                 </a>
             </li>
             <li>
-                <a t-att-href="'#data_question_%d' % question.id" data-toggle="tab">
-                    <i class="fa fa-list-alt"></i>
-                    All Data
+                <a t-att-href="'#data_question_%d' % question.id" t-att-aria-controls="'data_question_%d' % question.id" data-toggle="tab" role="tab">
+                    <span class="fa fa-list-alt">All Data</span>
                 </a>
             </li>
         </ul>
         <div class="tab-content">
-            <div class="tab-pane active with-3d-shadow with-transitions" t-att-id="'most_common_%d' % question.id">
+            <div role="tabpanel" class="tab-pane active with-3d-shadow with-transitions" t-att-id="'most_common_%d' % question.id">
                 <table class="table table-hover table-condensed">
                      <thead>
                          <tr>
@@ -296,7 +293,7 @@
                      </tbody>
                 </table>
             </div>
-            <div class="tab-pane" t-att-id="'data_question_%d' % question.id">
+            <div role="tabpanel" class="tab-pane" t-att-id="'data_question_%d' % question.id">
                 <table class="table table-hover table-condensed" t-att-id="'table_question_%d' % question.id">
                     <thead>
                         <tr>
@@ -323,7 +320,7 @@
                 <div class="jumbotron mt32">
                     <h2 class="text-muted">
                         <span>
-                            <i style="font-size:1.8em" class="fa fa-users pull-right"></i>
+                            <i style="font-size:1.8em" class="fa fa-users pull-right" role="img" aria-label="No answer" title="No answer"></i>
                         </span>
                         Sorry, No one answered this survey yet
                     </h2>
diff --git a/addons/survey/views/survey_templates.xml b/addons/survey/views/survey_templates.xml
index a8f0574b68a9c47648479ec8eeb55468059fe43f..ec103a8867dcae85e604a5277bd790f002495707 100644
--- a/addons/survey/views/survey_templates.xml
+++ b/addons/survey/views/survey_templates.xml
@@ -99,7 +99,7 @@
     <!-- Back Button to redirect in form view of survey -->
     <template id="back" name="Back">
         <div groups="website.group_website_publisher" t-ignore="true" class="pull-right">
-            <a t-attf-href="/web#view_type=form&amp;model=survey.survey&amp;id=#{survey.id}&amp;action=survey.action_survey_form" class="btn btn-default">Back to Survey</a>
+            <a role="button" t-attf-href="/web#view_type=form&amp;model=survey.survey&amp;id=#{survey.id}&amp;action=survey.action_survey_form" class="btn btn-default">Back to Survey</a>
         </div>
     </template>
 
@@ -114,7 +114,7 @@
                 <header>
                     <div><title>Odoo</title></div>
                     <div class="text-center">
-                        <img t-attf-src="/web/binary/company_logo"/>
+                        <img t-attf-src="/web/binary/company_logo" alt="Logo"/>
                     </div>
                 </header>
                 <div id="wrap" class="oe_structure oe_empty"/>
@@ -146,7 +146,7 @@
                     <div class='jumbotron mt32'>
                         <h1 t-field='survey.title' />
                         <div t-field='survey.description' class="oe_no_empty"/>
-                        <a class="btn btn-primary btn-lg" t-att-href="'/survey/fill/%s/%s' % (slug(survey), token)">
+                        <a role="button" class="btn btn-primary btn-lg" t-att-href="'/survey/fill/%s/%s' % (slug(survey), token)">
                             Start Survey
                         </a>
                     </div>
@@ -197,7 +197,7 @@
                     <t t-if="question.type == 'simple_choice'"><t t-call="survey.simple_choice"/></t>
                     <t t-if="question.type == 'multiple_choice'"><t t-call="survey.multiple_choice"/></t>
                     <t t-if="question.type == 'matrix'"><t t-call="survey.matrix"/></t>
-                    <div class="js_errzone alert alert-danger" style="display:none;"></div>
+                    <div class="js_errzone alert alert-danger" style="display:none;" role="alert"></div>
                 </div>
             </t>
             <div class="text-center mt16 mb16">
@@ -208,15 +208,15 @@
         </form>
 
         <!-- Modal used to display error message, i.c.o. ajax error -->
-        <div class="modal fade" id="AJAXErrorModal" role="dialog" aria-labelledby="AJAXErrorModal" aria-hidden="true" >
+        <div role="dialog" class="modal fade" id="AJAXErrorModal" >
             <div class="modal-dialog">
                 <div class="modal-content">
-                    <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                    <header class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                         <h4 class="modal-title">A problem has occured</h4>
-                    </div>
-                    <div class="modal-body"><p>Something went wrong while contacting survey server. <strong class="text-danger">Your answers have probably not been recorded.</strong> Try refreshing.</p></div>
-                    <div class="modal-footer"><button type="button" class="btn btn-primary" data-dismiss="modal">Close</button></div>
+                    </header>
+                    <main class="modal-body"><p>Something went wrong while contacting survey server. <strong class="text-danger">Your answers have probably not been recorded.</strong> Try refreshing.</p></main>
+                    <footer class="modal-footer"><button type="button" class="btn btn-primary" data-dismiss="modal">Close</button></footer>
                 </div>
             </div>
         </div>
@@ -363,7 +363,7 @@
                                         <t t-if="question.type == 'simple_choice'"><t t-call="survey.simple_choice"/></t>
                                         <t t-if="question.type == 'multiple_choice'"><t t-call="survey.multiple_choice"/></t>
                                         <t t-if="question.type == 'matrix'"><t t-call="survey.matrix"/></t>
-                                        <div class="js_errzone alert alert-danger" style="display:none;"></div>
+                                        <div class="js_errzone alert alert-danger" style="display:none;" role="alert"></div>
                                     </div>
                                 </t>
                                 <hr/>
diff --git a/addons/survey/views/survey_views.xml b/addons/survey/views/survey_views.xml
index cc966c7bf346d4b5cb0e34261b0e1c6a7f4aa091..94db82a6a8ef9759d9646c7b420edba8a69785c6 100644
--- a/addons/survey/views/survey_views.xml
+++ b/addons/survey/views/survey_views.xml
@@ -239,15 +239,15 @@
                         <div t-name="kanban-box" t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
                             <div class="o_dropdown_kanban dropdown" t-if="widget.editable">
 
-                                <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                     <span class="fa fa-ellipsis-v"/>
                                 </a>
-                                <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                    <li><a type="edit">Edit Survey</a></li>
-                                    <li t-if="widget.deletable"><a type="delete">Delete</a></li>
-                                    <li class="divider"/>
-                                    <li>Color</li>
-                                    <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                <ul class="dropdown-menu" role="menu">
+                                    <li><a role="menuitem" type="edit">Edit Survey</a></li>
+                                    <li t-if="widget.deletable"><a role="menuitem" type="delete">Delete</a></li>
+                                    <li role="separator" class="divider"/>
+                                    <li role="separator">Color</li>
+                                    <li role="menuitem" aria-haspopup="true"><ul role="menu" class="oe_kanban_colorpicker" data-field="color"/></li>
                                 </ul>
                             </div>
                             <div class="o_kanban_record_top">
@@ -411,30 +411,30 @@
                                 <div class="col-md-6 col-md-offset-3 o_preview_questions">
                                     <!-- Multiple Lines Text Zone -->
                                     <div attrs="{'invisible': [('type', '!=', 'free_text')]}">
-                                            <i class="fa fa-align-justify fa-4x"/>
+                                            <i class="fa fa-align-justify fa-4x" role="img" aria-label="Multiple lines" title="Multiple Lines"/>
                                     </div>
                                     <!-- Single Line Text Zone -->
                                     <div attrs="{'invisible': [('type', '!=', 'textbox')]}">
-                                        <i class="fa fa-minus fa-4x"/>
+                                        <i class="fa fa-minus fa-4x" role="img" aria-label="Single Line" title="Single Line"/>
                                     </div>
                                     <!-- Numerical Value -->
                                     <div attrs="{'invisible': [('type', '!=', 'numerical_box')]}">
-                                        <i class="fa fa-2x">123..</i>
+                                        <i class="fa fa-2x" role="img" aria-label="Numeric" title="Numeric">123..</i>
                                     </div>
                                     <!-- Date and Time -->
                                     <div attrs="{'invisible': [('type', '!=', 'date')]}">
                                         <p class="o_datetime">YYYY-MM-DD
-                                            <i class="fa fa-calendar fa-2x"/>
+                                            <i class="fa fa-calendar fa-2x" role="img" aria-label="Calendar" title="Calendar"/>
                                         </p>
                                     </div>
                                     <!-- Multiple choice: only one answer -->
-                                    <div attrs="{'invisible': [('type', '!=', 'simple_choice')]}">
+                                    <div attrs="{'invisible': [('type', '!=', 'simple_choice')]}" role="img" aria-label="Multiple choice with one answer" title="Multiple choice with one answer">
                                         <div class="row"><i class="fa fa-circle-o  fa-lg"/> answer</div>
                                         <div class="row"><i class="fa fa-dot-circle-o fa-lg"/> answer</div>
                                         <div class="row"><i class="fa fa-circle-o  fa-lg"/> answer</div>
                                     </div>
                                     <!-- Multiple choice: multiple answers allowed -->
-                                    <div attrs="{'invisible': [('type', '!=', 'multiple_choice')]}">
+                                    <div attrs="{'invisible': [('type', '!=', 'multiple_choice')]}" role="img" aria-label="Multiple choice with multiple answers" title="Multiple choice with multiple answers">
                                         <div class="row"><i class="fa fa-square-o fa-lg"/> answer</div>
                                         <div class="row"><i class="fa fa-check-square-o fa-lg"/> answer</div>
                                         <div class="row"><i class="fa fa-square-o fa-lg"/> answer</div>
@@ -449,21 +449,21 @@
                                         </div>
                                         <div class="row o_matrix_row">
                                             <div class="col-md-3">Row1</div>
-                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg"/></div>
-                                            <div class="col-md-3"><i class="fa fa-dot-circle-o fa-lg"/></div>
-                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg"/></div>
+                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg" role="img" aria-label="Not checked" title="Not checked"/></div>
+                                            <div class="col-md-3"><i class="fa fa-dot-circle-o fa-lg" role="img" aria-label="Checked" title="Checked"/></div>
+                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg" role="img" aria-label="Not checked" title="Not checked"/></div>
                                         </div>
                                         <div class="row o_matrix_row">
                                             <div class="col-md-3">Row2</div>
-                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg"/></div>
-                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg"/></div>
-                                            <div class="col-md-3"><i class="fa fa-dot-circle-o fa-lg"/></div>
+                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg" role="img" aria-label="Not checked" title="Not checked"/></div>
+                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg" role="img" aria-label="Not checked" title="Not checked"/></div>
+                                            <div class="col-md-3"><i class="fa fa-dot-circle-o fa-lg" role="img" aria-label="Checked" title="Checked"/></div>
                                         </div>
                                         <div class="row o_matrix_row">
                                             <div class="col-md-3">Row3</div>
-                                            <div class="col-md-3"><i class="fa fa-dot-circle-o fa-lg"/></div>
-                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg"/></div>
-                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg"/></div>
+                                            <div class="col-md-3"><i class="fa fa-dot-circle-o fa-lg" role="img" aria-label="Checked" title="Checked"/></div>
+                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg" role="img" aria-label="Not checked" title="Not checked"/></div>
+                                            <div class="col-md-3"><i class="fa fa-circle-o fa-lg" role="img" aria-label="Not checked" title="Not checked"/></div>
                                         </div>
                                     </div>
                                 </div>
diff --git a/addons/theme_bootswatch/views/theme_bootswatch_templates.xml b/addons/theme_bootswatch/views/theme_bootswatch_templates.xml
index a27043dfb89f57353b5690a1c9d1e1a5f1e0f669..142c9d5afc52531117d9ed5089dfc7d5bf953adc 100644
--- a/addons/theme_bootswatch/views/theme_bootswatch_templates.xml
+++ b/addons/theme_bootswatch/views/theme_bootswatch_templates.xml
@@ -2,15 +2,15 @@
 <odoo>
     <template id="theme_customize" inherit_id="website.theme_customize">
         <xpath expr="div" position="replace">
-            <div id="theme_customize_modal" class="modal fade bs-example-modal-sm">
+            <div role="dialog" id="theme_customize_modal" class="modal fade bs-example-modal-sm">
                 <div class="modal-dialog">
                 <div class="modal-content">
                     <div class="loading_backdrop"></div>
-                        <div class="modal-header">
+                        <header class="modal-header">
                             <button type="button" class="close">×</button>
                             <h4 class="modal-title">Customize your theme</h4>
-                        </div>
-                        <div class="modal-body">
+                        </header>
+                        <main class="modal-body">
                             <div class="row">
                                 <div class="col-xs-4 col-xs-offset-4">
                                     <label class="checked">
@@ -79,7 +79,7 @@
                                     </label>
                                 </div>
                             </div>
-                        </div>
+                        </main>
                     </div>
                 </div>
             </div>
diff --git a/addons/theme_default/views/theme_default_templates.xml b/addons/theme_default/views/theme_default_templates.xml
index 5b98ef506d5128235ae517bb1f6887001ce9404e..72382b058e0af1c65e3f6bd7677e6fa7b5e0da2c 100644
--- a/addons/theme_default/views/theme_default_templates.xml
+++ b/addons/theme_default/views/theme_default_templates.xml
@@ -19,18 +19,18 @@
 
 <template id="customize_modal" inherit_id="website.theme_customize" name="theme_default modal">
   <xpath expr="div" position="replace">
-    <div id="theme_customize_modal" class="modal fade">
+    <div role="dialog" id="theme_customize_modal" class="modal fade">
       <div class="modal-dialog">
           <div class="modal-content">
 
               <div class="loading_backdrop"></div>
-              <div class="modal-header text-center">
+              <header class="modal-header text-center">
                   <button type="button" class="close">×</button>
-                  <!-- <a class="btn btn-primary" href="/web#return_label=Website&amp;action=website.action_module_theme">Click here to change theme</a> -->
+                  <!-- <a role="button" class="btn btn-primary" href="/web#return_label=Website&amp;action=website.action_module_theme">Click here to change theme</a> -->
                   <hr style="margin: 20px -10px 10px -10px;"/>
                   <h4 class="modal-title">Customize this default theme</h4>
-              </div>
-              <div class="modal-body">
+              </header>
+              <main class="modal-body">
                   <h5 class="modal-h5">LAYOUT</h5>
                   <table name="layout">
                       <tr>
@@ -114,7 +114,7 @@
                           </td>
                       </tr>
                   </table>
-              </div>
+              </main>
           </div>
       </div>
   </div>
diff --git a/addons/web/static/lib/fontawesome/css/font-awesome-suffix.css b/addons/web/static/lib/fontawesome/css/font-awesome-suffix.css
new file mode 100644
index 0000000000000000000000000000000000000000..f5651cf8e024645204fba729dc1f01932dbc96cc
--- /dev/null
+++ b/addons/web/static/lib/fontawesome/css/font-awesome-suffix.css
@@ -0,0 +1,2145 @@
+/*!
+ *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  Suffix version by Odoo S.A.
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+   readers do not read off random characters that represent icons */
+.fa-suffix-glass:after {
+  content: "\f000";
+}
+.fa-suffix-music:after {
+  content: "\f001";
+}
+.fa-suffix-search:after {
+  content: "\f002";
+}
+.fa-suffix-envelope-o:after {
+  content: "\f003";
+}
+.fa-suffix-heart:after {
+  content: "\f004";
+}
+.fa-suffix-star:after {
+  content: "\f005";
+}
+.fa-suffix-star-o:after {
+  content: "\f006";
+}
+.fa-suffix-user:after {
+  content: "\f007";
+}
+.fa-suffix-film:after {
+  content: "\f008";
+}
+.fa-suffix-th-large:after {
+  content: "\f009";
+}
+.fa-suffix-th:after {
+  content: "\f00a";
+}
+.fa-suffix-th-list:after {
+  content: "\f00b";
+}
+.fa-suffix-check:after {
+  content: "\f00c";
+}
+.fa-suffix-remove:after,
+.fa-suffix-close:after,
+.fa-suffix-times:after {
+  content: "\f00d";
+}
+.fa-suffix-search-plus:after {
+  content: "\f00e";
+}
+.fa-suffix-search-minus:after {
+  content: "\f010";
+}
+.fa-suffix-power-off:after {
+  content: "\f011";
+}
+.fa-suffix-signal:after {
+  content: "\f012";
+}
+.fa-suffix-gear:after,
+.fa-suffix-cog:after {
+  content: "\f013";
+}
+.fa-suffix-trash-o:after {
+  content: "\f014";
+}
+.fa-suffix-home:after {
+  content: "\f015";
+}
+.fa-suffix-file-o:after {
+  content: "\f016";
+}
+.fa-suffix-clock-o:after {
+  content: "\f017";
+}
+.fa-suffix-road:after {
+  content: "\f018";
+}
+.fa-suffix-download:after {
+  content: "\f019";
+}
+.fa-suffix-arrow-circle-o-down:after {
+  content: "\f01a";
+}
+.fa-suffix-arrow-circle-o-up:after {
+  content: "\f01b";
+}
+.fa-suffix-inbox:after {
+  content: "\f01c";
+}
+.fa-suffix-play-circle-o:after {
+  content: "\f01d";
+}
+.fa-suffix-rotate-right:after,
+.fa-suffix-repeat:after {
+  content: "\f01e";
+}
+.fa-suffix-refresh:after {
+  content: "\f021";
+}
+.fa-suffix-list-alt:after {
+  content: "\f022";
+}
+.fa-suffix-lock:after {
+  content: "\f023";
+}
+.fa-suffix-flag:after {
+  content: "\f024";
+}
+.fa-suffix-headphones:after {
+  content: "\f025";
+}
+.fa-suffix-volume-off:after {
+  content: "\f026";
+}
+.fa-suffix-volume-down:after {
+  content: "\f027";
+}
+.fa-suffix-volume-up:after {
+  content: "\f028";
+}
+.fa-suffix-qrcode:after {
+  content: "\f029";
+}
+.fa-suffix-barcode:after {
+  content: "\f02a";
+}
+.fa-suffix-tag:after {
+  content: "\f02b";
+}
+.fa-suffix-tags:after {
+  content: "\f02c";
+}
+.fa-suffix-book:after {
+  content: "\f02d";
+}
+.fa-suffix-bookmark:after {
+  content: "\f02e";
+}
+.fa-suffix-print:after {
+  content: "\f02f";
+}
+.fa-suffix-camera:after {
+  content: "\f030";
+}
+.fa-suffix-font:after {
+  content: "\f031";
+}
+.fa-suffix-bold:after {
+  content: "\f032";
+}
+.fa-suffix-italic:after {
+  content: "\f033";
+}
+.fa-suffix-text-height:after {
+  content: "\f034";
+}
+.fa-suffix-text-width:after {
+  content: "\f035";
+}
+.fa-suffix-align-left:after {
+  content: "\f036";
+}
+.fa-suffix-align-center:after {
+  content: "\f037";
+}
+.fa-suffix-align-right:after {
+  content: "\f038";
+}
+.fa-suffix-align-justify:after {
+  content: "\f039";
+}
+.fa-suffix-list:after {
+  content: "\f03a";
+}
+.fa-suffix-dedent:after,
+.fa-suffix-outdent:after {
+  content: "\f03b";
+}
+.fa-suffix-indent:after {
+  content: "\f03c";
+}
+.fa-suffix-video-camera:after {
+  content: "\f03d";
+}
+.fa-suffix-photo:after,
+.fa-suffix-image:after,
+.fa-suffix-picture-o:after {
+  content: "\f03e";
+}
+.fa-suffix-pencil:after {
+  content: "\f040";
+}
+.fa-suffix-map-marker:after {
+  content: "\f041";
+}
+.fa-suffix-adjust:after {
+  content: "\f042";
+}
+.fa-suffix-tint:after {
+  content: "\f043";
+}
+.fa-suffix-edit:after,
+.fa-suffix-pencil-square-o:after {
+  content: "\f044";
+}
+.fa-suffix-share-square-o:after {
+  content: "\f045";
+}
+.fa-suffix-check-square-o:after {
+  content: "\f046";
+}
+.fa-suffix-arrows:after {
+  content: "\f047";
+}
+.fa-suffix-step-backward:after {
+  content: "\f048";
+}
+.fa-suffix-fast-backward:after {
+  content: "\f049";
+}
+.fa-suffix-backward:after {
+  content: "\f04a";
+}
+.fa-suffix-play:after {
+  content: "\f04b";
+}
+.fa-suffix-pause:after {
+  content: "\f04c";
+}
+.fa-suffix-stop:after {
+  content: "\f04d";
+}
+.fa-suffix-forward:after {
+  content: "\f04e";
+}
+.fa-suffix-fast-forward:after {
+  content: "\f050";
+}
+.fa-suffix-step-forward:after {
+  content: "\f051";
+}
+.fa-suffix-eject:after {
+  content: "\f052";
+}
+.fa-suffix-chevron-left:after {
+  content: "\f053";
+}
+.fa-suffix-chevron-right:after {
+  content: "\f054";
+}
+.fa-suffix-plus-circle:after {
+  content: "\f055";
+}
+.fa-suffix-minus-circle:after {
+  content: "\f056";
+}
+.fa-suffix-times-circle:after {
+  content: "\f057";
+}
+.fa-suffix-check-circle:after {
+  content: "\f058";
+}
+.fa-suffix-question-circle:after {
+  content: "\f059";
+}
+.fa-suffix-info-circle:after {
+  content: "\f05a";
+}
+.fa-suffix-crosshairs:after {
+  content: "\f05b";
+}
+.fa-suffix-times-circle-o:after {
+  content: "\f05c";
+}
+.fa-suffix-check-circle-o:after {
+  content: "\f05d";
+}
+.fa-suffix-ban:after {
+  content: "\f05e";
+}
+.fa-suffix-arrow-left:after {
+  content: "\f060";
+}
+.fa-suffix-arrow-right:after {
+  content: "\f061";
+}
+.fa-suffix-arrow-up:after {
+  content: "\f062";
+}
+.fa-suffix-arrow-down:after {
+  content: "\f063";
+}
+.fa-suffix-mail-forward:after,
+.fa-suffix-share:after {
+  content: "\f064";
+}
+.fa-suffix-expand:after {
+  content: "\f065";
+}
+.fa-suffix-compress:after {
+  content: "\f066";
+}
+.fa-suffix-plus:after {
+  content: "\f067";
+}
+.fa-suffix-minus:after {
+  content: "\f068";
+}
+.fa-suffix-asterisk:after {
+  content: "\f069";
+}
+.fa-suffix-exclamation-circle:after {
+  content: "\f06a";
+}
+.fa-suffix-gift:after {
+  content: "\f06b";
+}
+.fa-suffix-leaf:after {
+  content: "\f06c";
+}
+.fa-suffix-fire:after {
+  content: "\f06d";
+}
+.fa-suffix-eye:after {
+  content: "\f06e";
+}
+.fa-suffix-eye-slash:after {
+  content: "\f070";
+}
+.fa-suffix-warning:after,
+.fa-suffix-exclamation-triangle:after {
+  content: "\f071";
+}
+.fa-suffix-plane:after {
+  content: "\f072";
+}
+.fa-suffix-calendar:after {
+  content: "\f073";
+}
+.fa-suffix-random:after {
+  content: "\f074";
+}
+.fa-suffix-comment:after {
+  content: "\f075";
+}
+.fa-suffix-magnet:after {
+  content: "\f076";
+}
+.fa-suffix-chevron-up:after {
+  content: "\f077";
+}
+.fa-suffix-chevron-down:after {
+  content: "\f078";
+}
+.fa-suffix-retweet:after {
+  content: "\f079";
+}
+.fa-suffix-shopping-cart:after {
+  content: "\f07a";
+}
+.fa-suffix-folder:after {
+  content: "\f07b";
+}
+.fa-suffix-folder-open:after {
+  content: "\f07c";
+}
+.fa-suffix-arrows-v:after {
+  content: "\f07d";
+}
+.fa-suffix-arrows-h:after {
+  content: "\f07e";
+}
+.fa-suffix-bar-chart-o:after,
+.fa-suffix-bar-chart:after {
+  content: "\f080";
+}
+.fa-suffix-twitter-square:after {
+  content: "\f081";
+}
+.fa-suffix-facebook-square:after {
+  content: "\f082";
+}
+.fa-suffix-camera-retro:after {
+  content: "\f083";
+}
+.fa-suffix-key:after {
+  content: "\f084";
+}
+.fa-suffix-gears:after,
+.fa-suffix-cogs:after {
+  content: "\f085";
+}
+.fa-suffix-comments:after {
+  content: "\f086";
+}
+.fa-suffix-thumbs-o-up:after {
+  content: "\f087";
+}
+.fa-suffix-thumbs-o-down:after {
+  content: "\f088";
+}
+.fa-suffix-star-half:after {
+  content: "\f089";
+}
+.fa-suffix-heart-o:after {
+  content: "\f08a";
+}
+.fa-suffix-sign-out:after {
+  content: "\f08b";
+}
+.fa-suffix-linkedin-square:after {
+  content: "\f08c";
+}
+.fa-suffix-thumb-tack:after {
+  content: "\f08d";
+}
+.fa-suffix-external-link:after {
+  content: "\f08e";
+}
+.fa-suffix-sign-in:after {
+  content: "\f090";
+}
+.fa-suffix-trophy:after {
+  content: "\f091";
+}
+.fa-suffix-github-square:after {
+  content: "\f092";
+}
+.fa-suffix-upload:after {
+  content: "\f093";
+}
+.fa-suffix-lemon-o:after {
+  content: "\f094";
+}
+.fa-suffix-phone:after {
+  content: "\f095";
+}
+.fa-suffix-square-o:after {
+  content: "\f096";
+}
+.fa-suffix-bookmark-o:after {
+  content: "\f097";
+}
+.fa-suffix-phone-square:after {
+  content: "\f098";
+}
+.fa-suffix-twitter:after {
+  content: "\f099";
+}
+.fa-suffix-facebook-f:after,
+.fa-suffix-facebook:after {
+  content: "\f09a";
+}
+.fa-suffix-github:after {
+  content: "\f09b";
+}
+.fa-suffix-unlock:after {
+  content: "\f09c";
+}
+.fa-suffix-credit-card:after {
+  content: "\f09d";
+}
+.fa-suffix-feed:after,
+.fa-suffix-rss:after {
+  content: "\f09e";
+}
+.fa-suffix-hdd-o:after {
+  content: "\f0a0";
+}
+.fa-suffix-bullhorn:after {
+  content: "\f0a1";
+}
+.fa-suffix-bell:after {
+  content: "\f0f3";
+}
+.fa-suffix-certificate:after {
+  content: "\f0a3";
+}
+.fa-suffix-hand-o-right:after {
+  content: "\f0a4";
+}
+.fa-suffix-hand-o-left:after {
+  content: "\f0a5";
+}
+.fa-suffix-hand-o-up:after {
+  content: "\f0a6";
+}
+.fa-suffix-hand-o-down:after {
+  content: "\f0a7";
+}
+.fa-suffix-arrow-circle-left:after {
+  content: "\f0a8";
+}
+.fa-suffix-arrow-circle-right:after {
+  content: "\f0a9";
+}
+.fa-suffix-arrow-circle-up:after {
+  content: "\f0aa";
+}
+.fa-suffix-arrow-circle-down:after {
+  content: "\f0ab";
+}
+.fa-suffix-globe:after {
+  content: "\f0ac";
+}
+.fa-suffix-wrench:after {
+  content: "\f0ad";
+}
+.fa-suffix-tasks:after {
+  content: "\f0ae";
+}
+.fa-suffix-filter:after {
+  content: "\f0b0";
+}
+.fa-suffix-briefcase:after {
+  content: "\f0b1";
+}
+.fa-suffix-arrows-alt:after {
+  content: "\f0b2";
+}
+.fa-suffix-group:after,
+.fa-suffix-users:after {
+  content: "\f0c0";
+}
+.fa-suffix-chain:after,
+.fa-suffix-link:after {
+  content: "\f0c1";
+}
+.fa-suffix-cloud:after {
+  content: "\f0c2";
+}
+.fa-suffix-flask:after {
+  content: "\f0c3";
+}
+.fa-suffix-cut:after,
+.fa-suffix-scissors:after {
+  content: "\f0c4";
+}
+.fa-suffix-copy:after,
+.fa-suffix-files-o:after {
+  content: "\f0c5";
+}
+.fa-suffix-paperclip:after {
+  content: "\f0c6";
+}
+.fa-suffix-save:after,
+.fa-suffix-floppy-o:after {
+  content: "\f0c7";
+}
+.fa-suffix-square:after {
+  content: "\f0c8";
+}
+.fa-suffix-navicon:after,
+.fa-suffix-reorder:after,
+.fa-suffix-bars:after {
+  content: "\f0c9";
+}
+.fa-suffix-list-ul:after {
+  content: "\f0ca";
+}
+.fa-suffix-list-ol:after {
+  content: "\f0cb";
+}
+.fa-suffix-strikethrough:after {
+  content: "\f0cc";
+}
+.fa-suffix-underline:after {
+  content: "\f0cd";
+}
+.fa-suffix-table:after {
+  content: "\f0ce";
+}
+.fa-suffix-magic:after {
+  content: "\f0d0";
+}
+.fa-suffix-truck:after {
+  content: "\f0d1";
+}
+.fa-suffix-pinterest:after {
+  content: "\f0d2";
+}
+.fa-suffix-pinterest-square:after {
+  content: "\f0d3";
+}
+.fa-suffix-google-plus-square:after {
+  content: "\f0d4";
+}
+.fa-suffix-google-plus:after {
+  content: "\f0d5";
+}
+.fa-suffix-money:after {
+  content: "\f0d6";
+}
+.fa-suffix-caret-down:after {
+  content: "\f0d7";
+}
+.fa-suffix-caret-up:after {
+  content: "\f0d8";
+}
+.fa-suffix-caret-left:after {
+  content: "\f0d9";
+}
+.fa-suffix-caret-right:after {
+  content: "\f0da";
+}
+.fa-suffix-columns:after {
+  content: "\f0db";
+}
+.fa-suffix-unsorted:after,
+.fa-suffix-sort:after {
+  content: "\f0dc";
+}
+.fa-suffix-sort-down:after,
+.fa-suffix-sort-desc:after {
+  content: "\f0dd";
+}
+.fa-suffix-sort-up:after,
+.fa-suffix-sort-asc:after {
+  content: "\f0de";
+}
+.fa-suffix-envelope:after {
+  content: "\f0e0";
+}
+.fa-suffix-linkedin:after {
+  content: "\f0e1";
+}
+.fa-suffix-rotate-left:after,
+.fa-suffix-undo:after {
+  content: "\f0e2";
+}
+.fa-suffix-legal:after,
+.fa-suffix-gavel:after {
+  content: "\f0e3";
+}
+.fa-suffix-dashboard:after,
+.fa-suffix-tachometer:after {
+  content: "\f0e4";
+}
+.fa-suffix-comment-o:after {
+  content: "\f0e5";
+}
+.fa-suffix-comments-o:after {
+  content: "\f0e6";
+}
+.fa-suffix-flash:after,
+.fa-suffix-bolt:after {
+  content: "\f0e7";
+}
+.fa-suffix-sitemap:after {
+  content: "\f0e8";
+}
+.fa-suffix-umbrella:after {
+  content: "\f0e9";
+}
+.fa-suffix-paste:after,
+.fa-suffix-clipboard:after {
+  content: "\f0ea";
+}
+.fa-suffix-lightbulb-o:after {
+  content: "\f0eb";
+}
+.fa-suffix-exchange:after {
+  content: "\f0ec";
+}
+.fa-suffix-cloud-download:after {
+  content: "\f0ed";
+}
+.fa-suffix-cloud-upload:after {
+  content: "\f0ee";
+}
+.fa-suffix-user-md:after {
+  content: "\f0f0";
+}
+.fa-suffix-stethoscope:after {
+  content: "\f0f1";
+}
+.fa-suffix-suitcase:after {
+  content: "\f0f2";
+}
+.fa-suffix-bell-o:after {
+  content: "\f0a2";
+}
+.fa-suffix-coffee:after {
+  content: "\f0f4";
+}
+.fa-suffix-cutlery:after {
+  content: "\f0f5";
+}
+.fa-suffix-file-text-o:after {
+  content: "\f0f6";
+}
+.fa-suffix-building-o:after {
+  content: "\f0f7";
+}
+.fa-suffix-hospital-o:after {
+  content: "\f0f8";
+}
+.fa-suffix-ambulance:after {
+  content: "\f0f9";
+}
+.fa-suffix-medkit:after {
+  content: "\f0fa";
+}
+.fa-suffix-fighter-jet:after {
+  content: "\f0fb";
+}
+.fa-suffix-beer:after {
+  content: "\f0fc";
+}
+.fa-suffix-h-square:after {
+  content: "\f0fd";
+}
+.fa-suffix-plus-square:after {
+  content: "\f0fe";
+}
+.fa-suffix-angle-double-left:after {
+  content: "\f100";
+}
+.fa-suffix-angle-double-right:after {
+  content: "\f101";
+}
+.fa-suffix-angle-double-up:after {
+  content: "\f102";
+}
+.fa-suffix-angle-double-down:after {
+  content: "\f103";
+}
+.fa-suffix-angle-left:after {
+  content: "\f104";
+}
+.fa-suffix-angle-right:after {
+  content: "\f105";
+}
+.fa-suffix-angle-up:after {
+  content: "\f106";
+}
+.fa-suffix-angle-down:after {
+  content: "\f107";
+}
+.fa-suffix-desktop:after {
+  content: "\f108";
+}
+.fa-suffix-laptop:after {
+  content: "\f109";
+}
+.fa-suffix-tablet:after {
+  content: "\f10a";
+}
+.fa-suffix-mobile-phone:after,
+.fa-suffix-mobile:after {
+  content: "\f10b";
+}
+.fa-suffix-circle-o:after {
+  content: "\f10c";
+}
+.fa-suffix-quote-left:after {
+  content: "\f10d";
+}
+.fa-suffix-quote-right:after {
+  content: "\f10e";
+}
+.fa-suffix-spinner:after {
+  content: "\f110";
+}
+.fa-suffix-circle:after {
+  content: "\f111";
+}
+.fa-suffix-mail-reply:after,
+.fa-suffix-reply:after {
+  content: "\f112";
+}
+.fa-suffix-github-alt:after {
+  content: "\f113";
+}
+.fa-suffix-folder-o:after {
+  content: "\f114";
+}
+.fa-suffix-folder-open-o:after {
+  content: "\f115";
+}
+.fa-suffix-smile-o:after {
+  content: "\f118";
+}
+.fa-suffix-frown-o:after {
+  content: "\f119";
+}
+.fa-suffix-meh-o:after {
+  content: "\f11a";
+}
+.fa-suffix-gamepad:after {
+  content: "\f11b";
+}
+.fa-suffix-keyboard-o:after {
+  content: "\f11c";
+}
+.fa-suffix-flag-o:after {
+  content: "\f11d";
+}
+.fa-suffix-flag-checkered:after {
+  content: "\f11e";
+}
+.fa-suffix-terminal:after {
+  content: "\f120";
+}
+.fa-suffix-code:after {
+  content: "\f121";
+}
+.fa-suffix-mail-reply-all:after,
+.fa-suffix-reply-all:after {
+  content: "\f122";
+}
+.fa-suffix-star-half-empty:after,
+.fa-suffix-star-half-full:after,
+.fa-suffix-star-half-o:after {
+  content: "\f123";
+}
+.fa-suffix-location-arrow:after {
+  content: "\f124";
+}
+.fa-suffix-crop:after {
+  content: "\f125";
+}
+.fa-suffix-code-fork:after {
+  content: "\f126";
+}
+.fa-suffix-unlink:after,
+.fa-suffix-chain-broken:after {
+  content: "\f127";
+}
+.fa-suffix-question:after {
+  content: "\f128";
+}
+.fa-suffix-info:after {
+  content: "\f129";
+}
+.fa-suffix-exclamation:after {
+  content: "\f12a";
+}
+.fa-suffix-superscript:after {
+  content: "\f12b";
+}
+.fa-suffix-subscript:after {
+  content: "\f12c";
+}
+.fa-suffix-eraser:after {
+  content: "\f12d";
+}
+.fa-suffix-puzzle-piece:after {
+  content: "\f12e";
+}
+.fa-suffix-microphone:after {
+  content: "\f130";
+}
+.fa-suffix-microphone-slash:after {
+  content: "\f131";
+}
+.fa-suffix-shield:after {
+  content: "\f132";
+}
+.fa-suffix-calendar-o:after {
+  content: "\f133";
+}
+.fa-suffix-fire-extinguisher:after {
+  content: "\f134";
+}
+.fa-suffix-rocket:after {
+  content: "\f135";
+}
+.fa-suffix-maxcdn:after {
+  content: "\f136";
+}
+.fa-suffix-chevron-circle-left:after {
+  content: "\f137";
+}
+.fa-suffix-chevron-circle-right:after {
+  content: "\f138";
+}
+.fa-suffix-chevron-circle-up:after {
+  content: "\f139";
+}
+.fa-suffix-chevron-circle-down:after {
+  content: "\f13a";
+}
+.fa-suffix-html5:after {
+  content: "\f13b";
+}
+.fa-suffix-css3:after {
+  content: "\f13c";
+}
+.fa-suffix-anchor:after {
+  content: "\f13d";
+}
+.fa-suffix-unlock-alt:after {
+  content: "\f13e";
+}
+.fa-suffix-bullseye:after {
+  content: "\f140";
+}
+.fa-suffix-ellipsis-h:after {
+  content: "\f141";
+}
+.fa-suffix-ellipsis-v:after {
+  content: "\f142";
+}
+.fa-suffix-rss-square:after {
+  content: "\f143";
+}
+.fa-suffix-play-circle:after {
+  content: "\f144";
+}
+.fa-suffix-ticket:after {
+  content: "\f145";
+}
+.fa-suffix-minus-square:after {
+  content: "\f146";
+}
+.fa-suffix-minus-square-o:after {
+  content: "\f147";
+}
+.fa-suffix-level-up:after {
+  content: "\f148";
+}
+.fa-suffix-level-down:after {
+  content: "\f149";
+}
+.fa-suffix-check-square:after {
+  content: "\f14a";
+}
+.fa-suffix-pencil-square:after {
+  content: "\f14b";
+}
+.fa-suffix-external-link-square:after {
+  content: "\f14c";
+}
+.fa-suffix-share-square:after {
+  content: "\f14d";
+}
+.fa-suffix-compass:after {
+  content: "\f14e";
+}
+.fa-suffix-toggle-down:after,
+.fa-suffix-caret-square-o-down:after {
+  content: "\f150";
+}
+.fa-suffix-toggle-up:after,
+.fa-suffix-caret-square-o-up:after {
+  content: "\f151";
+}
+.fa-suffix-toggle-right:after,
+.fa-suffix-caret-square-o-right:after {
+  content: "\f152";
+}
+.fa-suffix-euro:after,
+.fa-suffix-eur:after {
+  content: "\f153";
+}
+.fa-suffix-gbp:after {
+  content: "\f154";
+}
+.fa-suffix-dollar:after,
+.fa-suffix-usd:after {
+  content: "\f155";
+}
+.fa-suffix-rupee:after,
+.fa-suffix-inr:after {
+  content: "\f156";
+}
+.fa-suffix-cny:after,
+.fa-suffix-rmb:after,
+.fa-suffix-yen:after,
+.fa-suffix-jpy:after {
+  content: "\f157";
+}
+.fa-suffix-ruble:after,
+.fa-suffix-rouble:after,
+.fa-suffix-rub:after {
+  content: "\f158";
+}
+.fa-suffix-won:after,
+.fa-suffix-krw:after {
+  content: "\f159";
+}
+.fa-suffix-bitcoin:after,
+.fa-suffix-btc:after {
+  content: "\f15a";
+}
+.fa-suffix-file:after {
+  content: "\f15b";
+}
+.fa-suffix-file-text:after {
+  content: "\f15c";
+}
+.fa-suffix-sort-alpha-asc:after {
+  content: "\f15d";
+}
+.fa-suffix-sort-alpha-desc:after {
+  content: "\f15e";
+}
+.fa-suffix-sort-amount-asc:after {
+  content: "\f160";
+}
+.fa-suffix-sort-amount-desc:after {
+  content: "\f161";
+}
+.fa-suffix-sort-numeric-asc:after {
+  content: "\f162";
+}
+.fa-suffix-sort-numeric-desc:after {
+  content: "\f163";
+}
+.fa-suffix-thumbs-up:after {
+  content: "\f164";
+}
+.fa-suffix-thumbs-down:after {
+  content: "\f165";
+}
+.fa-suffix-youtube-square:after {
+  content: "\f166";
+}
+.fa-suffix-youtube:after {
+  content: "\f167";
+}
+.fa-suffix-xing:after {
+  content: "\f168";
+}
+.fa-suffix-xing-square:after {
+  content: "\f169";
+}
+.fa-suffix-youtube-play:after {
+  content: "\f16a";
+}
+.fa-suffix-dropbox:after {
+  content: "\f16b";
+}
+.fa-suffix-stack-overflow:after {
+  content: "\f16c";
+}
+.fa-suffix-instagram:after {
+  content: "\f16d";
+}
+.fa-suffix-flickr:after {
+  content: "\f16e";
+}
+.fa-suffix-adn:after {
+  content: "\f170";
+}
+.fa-suffix-bitbucket:after {
+  content: "\f171";
+}
+.fa-suffix-bitbucket-square:after {
+  content: "\f172";
+}
+.fa-suffix-tumblr:after {
+  content: "\f173";
+}
+.fa-suffix-tumblr-square:after {
+  content: "\f174";
+}
+.fa-suffix-long-arrow-down:after {
+  content: "\f175";
+}
+.fa-suffix-long-arrow-up:after {
+  content: "\f176";
+}
+.fa-suffix-long-arrow-left:after {
+  content: "\f177";
+}
+.fa-suffix-long-arrow-right:after {
+  content: "\f178";
+}
+.fa-suffix-apple:after {
+  content: "\f179";
+}
+.fa-suffix-windows:after {
+  content: "\f17a";
+}
+.fa-suffix-android:after {
+  content: "\f17b";
+}
+.fa-suffix-linux:after {
+  content: "\f17c";
+}
+.fa-suffix-dribbble:after {
+  content: "\f17d";
+}
+.fa-suffix-skype:after {
+  content: "\f17e";
+}
+.fa-suffix-foursquare:after {
+  content: "\f180";
+}
+.fa-suffix-trello:after {
+  content: "\f181";
+}
+.fa-suffix-female:after {
+  content: "\f182";
+}
+.fa-suffix-male:after {
+  content: "\f183";
+}
+.fa-suffix-gittip:after,
+.fa-suffix-gratipay:after {
+  content: "\f184";
+}
+.fa-suffix-sun-o:after {
+  content: "\f185";
+}
+.fa-suffix-moon-o:after {
+  content: "\f186";
+}
+.fa-suffix-archive:after {
+  content: "\f187";
+}
+.fa-suffix-bug:after {
+  content: "\f188";
+}
+.fa-suffix-vk:after {
+  content: "\f189";
+}
+.fa-suffix-weibo:after {
+  content: "\f18a";
+}
+.fa-suffix-renren:after {
+  content: "\f18b";
+}
+.fa-suffix-pagelines:after {
+  content: "\f18c";
+}
+.fa-suffix-stack-exchange:after {
+  content: "\f18d";
+}
+.fa-suffix-arrow-circle-o-right:after {
+  content: "\f18e";
+}
+.fa-suffix-arrow-circle-o-left:after {
+  content: "\f190";
+}
+.fa-suffix-toggle-left:after,
+.fa-suffix-caret-square-o-left:after {
+  content: "\f191";
+}
+.fa-suffix-dot-circle-o:after {
+  content: "\f192";
+}
+.fa-suffix-wheelchair:after {
+  content: "\f193";
+}
+.fa-suffix-vimeo-square:after {
+  content: "\f194";
+}
+.fa-suffix-turkish-lira:after,
+.fa-suffix-try:after {
+  content: "\f195";
+}
+.fa-suffix-plus-square-o:after {
+  content: "\f196";
+}
+.fa-suffix-space-shuttle:after {
+  content: "\f197";
+}
+.fa-suffix-slack:after {
+  content: "\f198";
+}
+.fa-suffix-envelope-square:after {
+  content: "\f199";
+}
+.fa-suffix-wordpress:after {
+  content: "\f19a";
+}
+.fa-suffix-openid:after {
+  content: "\f19b";
+}
+.fa-suffix-institution:after,
+.fa-suffix-bank:after,
+.fa-suffix-university:after {
+  content: "\f19c";
+}
+.fa-suffix-mortar-board:after,
+.fa-suffix-graduation-cap:after {
+  content: "\f19d";
+}
+.fa-suffix-yahoo:after {
+  content: "\f19e";
+}
+.fa-suffix-google:after {
+  content: "\f1a0";
+}
+.fa-suffix-reddit:after {
+  content: "\f1a1";
+}
+.fa-suffix-reddit-square:after {
+  content: "\f1a2";
+}
+.fa-suffix-stumbleupon-circle:after {
+  content: "\f1a3";
+}
+.fa-suffix-stumbleupon:after {
+  content: "\f1a4";
+}
+.fa-suffix-delicious:after {
+  content: "\f1a5";
+}
+.fa-suffix-digg:after {
+  content: "\f1a6";
+}
+.fa-suffix-pied-piper-pp:after {
+  content: "\f1a7";
+}
+.fa-suffix-pied-piper-alt:after {
+  content: "\f1a8";
+}
+.fa-suffix-drupal:after {
+  content: "\f1a9";
+}
+.fa-suffix-joomla:after {
+  content: "\f1aa";
+}
+.fa-suffix-language:after {
+  content: "\f1ab";
+}
+.fa-suffix-fax:after {
+  content: "\f1ac";
+}
+.fa-suffix-building:after {
+  content: "\f1ad";
+}
+.fa-suffix-child:after {
+  content: "\f1ae";
+}
+.fa-suffix-paw:after {
+  content: "\f1b0";
+}
+.fa-suffix-spoon:after {
+  content: "\f1b1";
+}
+.fa-suffix-cube:after {
+  content: "\f1b2";
+}
+.fa-suffix-cubes:after {
+  content: "\f1b3";
+}
+.fa-suffix-behance:after {
+  content: "\f1b4";
+}
+.fa-suffix-behance-square:after {
+  content: "\f1b5";
+}
+.fa-suffix-steam:after {
+  content: "\f1b6";
+}
+.fa-suffix-steam-square:after {
+  content: "\f1b7";
+}
+.fa-suffix-recycle:after {
+  content: "\f1b8";
+}
+.fa-suffix-automobile:after,
+.fa-suffix-car:after {
+  content: "\f1b9";
+}
+.fa-suffix-cab:after,
+.fa-suffix-taxi:after {
+  content: "\f1ba";
+}
+.fa-suffix-tree:after {
+  content: "\f1bb";
+}
+.fa-suffix-spotify:after {
+  content: "\f1bc";
+}
+.fa-suffix-deviantart:after {
+  content: "\f1bd";
+}
+.fa-suffix-soundcloud:after {
+  content: "\f1be";
+}
+.fa-suffix-database:after {
+  content: "\f1c0";
+}
+.fa-suffix-file-pdf-o:after {
+  content: "\f1c1";
+}
+.fa-suffix-file-word-o:after {
+  content: "\f1c2";
+}
+.fa-suffix-file-excel-o:after {
+  content: "\f1c3";
+}
+.fa-suffix-file-powerpoint-o:after {
+  content: "\f1c4";
+}
+.fa-suffix-file-photo-o:after,
+.fa-suffix-file-picture-o:after,
+.fa-suffix-file-image-o:after {
+  content: "\f1c5";
+}
+.fa-suffix-file-zip-o:after,
+.fa-suffix-file-archive-o:after {
+  content: "\f1c6";
+}
+.fa-suffix-file-sound-o:after,
+.fa-suffix-file-audio-o:after {
+  content: "\f1c7";
+}
+.fa-suffix-file-movie-o:after,
+.fa-suffix-file-video-o:after {
+  content: "\f1c8";
+}
+.fa-suffix-file-code-o:after {
+  content: "\f1c9";
+}
+.fa-suffix-vine:after {
+  content: "\f1ca";
+}
+.fa-suffix-codepen:after {
+  content: "\f1cb";
+}
+.fa-suffix-jsfiddle:after {
+  content: "\f1cc";
+}
+.fa-suffix-life-bouy:after,
+.fa-suffix-life-buoy:after,
+.fa-suffix-life-saver:after,
+.fa-suffix-support:after,
+.fa-suffix-life-ring:after {
+  content: "\f1cd";
+}
+.fa-suffix-circle-o-notch:after {
+  content: "\f1ce";
+}
+.fa-suffix-ra:after,
+.fa-suffix-resistance:after,
+.fa-suffix-rebel:after {
+  content: "\f1d0";
+}
+.fa-suffix-ge:after,
+.fa-suffix-empire:after {
+  content: "\f1d1";
+}
+.fa-suffix-git-square:after {
+  content: "\f1d2";
+}
+.fa-suffix-git:after {
+  content: "\f1d3";
+}
+.fa-suffix-y-combinator-square:after,
+.fa-suffix-yc-square:after,
+.fa-suffix-hacker-news:after {
+  content: "\f1d4";
+}
+.fa-suffix-tencent-weibo:after {
+  content: "\f1d5";
+}
+.fa-suffix-qq:after {
+  content: "\f1d6";
+}
+.fa-suffix-wechat:after,
+.fa-suffix-weixin:after {
+  content: "\f1d7";
+}
+.fa-suffix-send:after,
+.fa-suffix-paper-plane:after {
+  content: "\f1d8";
+}
+.fa-suffix-send-o:after,
+.fa-suffix-paper-plane-o:after {
+  content: "\f1d9";
+}
+.fa-suffix-history:after {
+  content: "\f1da";
+}
+.fa-suffix-circle-thin:after {
+  content: "\f1db";
+}
+.fa-suffix-header:after {
+  content: "\f1dc";
+}
+.fa-suffix-paragraph:after {
+  content: "\f1dd";
+}
+.fa-suffix-sliders:after {
+  content: "\f1de";
+}
+.fa-suffix-share-alt:after {
+  content: "\f1e0";
+}
+.fa-suffix-share-alt-square:after {
+  content: "\f1e1";
+}
+.fa-suffix-bomb:after {
+  content: "\f1e2";
+}
+.fa-suffix-soccer-ball-o:after,
+.fa-suffix-futbol-o:after {
+  content: "\f1e3";
+}
+.fa-suffix-tty:after {
+  content: "\f1e4";
+}
+.fa-suffix-binoculars:after {
+  content: "\f1e5";
+}
+.fa-suffix-plug:after {
+  content: "\f1e6";
+}
+.fa-suffix-slideshare:after {
+  content: "\f1e7";
+}
+.fa-suffix-twitch:after {
+  content: "\f1e8";
+}
+.fa-suffix-yelp:after {
+  content: "\f1e9";
+}
+.fa-suffix-newspaper-o:after {
+  content: "\f1ea";
+}
+.fa-suffix-wifi:after {
+  content: "\f1eb";
+}
+.fa-suffix-calculator:after {
+  content: "\f1ec";
+}
+.fa-suffix-paypal:after {
+  content: "\f1ed";
+}
+.fa-suffix-google-wallet:after {
+  content: "\f1ee";
+}
+.fa-suffix-cc-visa:after {
+  content: "\f1f0";
+}
+.fa-suffix-cc-mastercard:after {
+  content: "\f1f1";
+}
+.fa-suffix-cc-discover:after {
+  content: "\f1f2";
+}
+.fa-suffix-cc-amex:after {
+  content: "\f1f3";
+}
+.fa-suffix-cc-paypal:after {
+  content: "\f1f4";
+}
+.fa-suffix-cc-stripe:after {
+  content: "\f1f5";
+}
+.fa-suffix-bell-slash:after {
+  content: "\f1f6";
+}
+.fa-suffix-bell-slash-o:after {
+  content: "\f1f7";
+}
+.fa-suffix-trash:after {
+  content: "\f1f8";
+}
+.fa-suffix-copyright:after {
+  content: "\f1f9";
+}
+.fa-suffix-at:after {
+  content: "\f1fa";
+}
+.fa-suffix-eyedropper:after {
+  content: "\f1fb";
+}
+.fa-suffix-paint-brush:after {
+  content: "\f1fc";
+}
+.fa-suffix-birthday-cake:after {
+  content: "\f1fd";
+}
+.fa-suffix-area-chart:after {
+  content: "\f1fe";
+}
+.fa-suffix-pie-chart:after {
+  content: "\f200";
+}
+.fa-suffix-line-chart:after {
+  content: "\f201";
+}
+.fa-suffix-lastfm:after {
+  content: "\f202";
+}
+.fa-suffix-lastfm-square:after {
+  content: "\f203";
+}
+.fa-suffix-toggle-off:after {
+  content: "\f204";
+}
+.fa-suffix-toggle-on:after {
+  content: "\f205";
+}
+.fa-suffix-bicycle:after {
+  content: "\f206";
+}
+.fa-suffix-bus:after {
+  content: "\f207";
+}
+.fa-suffix-ioxhost:after {
+  content: "\f208";
+}
+.fa-suffix-angellist:after {
+  content: "\f209";
+}
+.fa-suffix-cc:after {
+  content: "\f20a";
+}
+.fa-suffix-shekel:after,
+.fa-suffix-sheqel:after,
+.fa-suffix-ils:after {
+  content: "\f20b";
+}
+.fa-suffix-meanpath:after {
+  content: "\f20c";
+}
+.fa-suffix-buysellads:after {
+  content: "\f20d";
+}
+.fa-suffix-connectdevelop:after {
+  content: "\f20e";
+}
+.fa-suffix-dashcube:after {
+  content: "\f210";
+}
+.fa-suffix-forumbee:after {
+  content: "\f211";
+}
+.fa-suffix-leanpub:after {
+  content: "\f212";
+}
+.fa-suffix-sellsy:after {
+  content: "\f213";
+}
+.fa-suffix-shirtsinbulk:after {
+  content: "\f214";
+}
+.fa-suffix-simplybuilt:after {
+  content: "\f215";
+}
+.fa-suffix-skyatlas:after {
+  content: "\f216";
+}
+.fa-suffix-cart-plus:after {
+  content: "\f217";
+}
+.fa-suffix-cart-arrow-down:after {
+  content: "\f218";
+}
+.fa-suffix-diamond:after {
+  content: "\f219";
+}
+.fa-suffix-ship:after {
+  content: "\f21a";
+}
+.fa-suffix-user-secret:after {
+  content: "\f21b";
+}
+.fa-suffix-motorcycle:after {
+  content: "\f21c";
+}
+.fa-suffix-street-view:after {
+  content: "\f21d";
+}
+.fa-suffix-heartbeat:after {
+  content: "\f21e";
+}
+.fa-suffix-venus:after {
+  content: "\f221";
+}
+.fa-suffix-mars:after {
+  content: "\f222";
+}
+.fa-suffix-mercury:after {
+  content: "\f223";
+}
+.fa-suffix-intersex:after,
+.fa-suffix-transgender:after {
+  content: "\f224";
+}
+.fa-suffix-transgender-alt:after {
+  content: "\f225";
+}
+.fa-suffix-venus-double:after {
+  content: "\f226";
+}
+.fa-suffix-mars-double:after {
+  content: "\f227";
+}
+.fa-suffix-venus-mars:after {
+  content: "\f228";
+}
+.fa-suffix-mars-stroke:after {
+  content: "\f229";
+}
+.fa-suffix-mars-stroke-v:after {
+  content: "\f22a";
+}
+.fa-suffix-mars-stroke-h:after {
+  content: "\f22b";
+}
+.fa-suffix-neuter:after {
+  content: "\f22c";
+}
+.fa-suffix-genderless:after {
+  content: "\f22d";
+}
+.fa-suffix-facebook-official:after {
+  content: "\f230";
+}
+.fa-suffix-pinterest-p:after {
+  content: "\f231";
+}
+.fa-suffix-whatsapp:after {
+  content: "\f232";
+}
+.fa-suffix-server:after {
+  content: "\f233";
+}
+.fa-suffix-user-plus:after {
+  content: "\f234";
+}
+.fa-suffix-user-times:after {
+  content: "\f235";
+}
+.fa-suffix-hotel:after,
+.fa-suffix-bed:after {
+  content: "\f236";
+}
+.fa-suffix-viacoin:after {
+  content: "\f237";
+}
+.fa-suffix-train:after {
+  content: "\f238";
+}
+.fa-suffix-subway:after {
+  content: "\f239";
+}
+.fa-suffix-medium:after {
+  content: "\f23a";
+}
+.fa-suffix-yc:after,
+.fa-suffix-y-combinator:after {
+  content: "\f23b";
+}
+.fa-suffix-optin-monster:after {
+  content: "\f23c";
+}
+.fa-suffix-opencart:after {
+  content: "\f23d";
+}
+.fa-suffix-expeditedssl:after {
+  content: "\f23e";
+}
+.fa-suffix-battery-4:after,
+.fa-suffix-battery:after,
+.fa-suffix-battery-full:after {
+  content: "\f240";
+}
+.fa-suffix-battery-3:after,
+.fa-suffix-battery-three-quarters:after {
+  content: "\f241";
+}
+.fa-suffix-battery-2:after,
+.fa-suffix-battery-half:after {
+  content: "\f242";
+}
+.fa-suffix-battery-1:after,
+.fa-suffix-battery-quarter:after {
+  content: "\f243";
+}
+.fa-suffix-battery-0:after,
+.fa-suffix-battery-empty:after {
+  content: "\f244";
+}
+.fa-suffix-mouse-pointer:after {
+  content: "\f245";
+}
+.fa-suffix-i-cursor:after {
+  content: "\f246";
+}
+.fa-suffix-object-group:after {
+  content: "\f247";
+}
+.fa-suffix-object-ungroup:after {
+  content: "\f248";
+}
+.fa-suffix-sticky-note:after {
+  content: "\f249";
+}
+.fa-suffix-sticky-note-o:after {
+  content: "\f24a";
+}
+.fa-suffix-cc-jcb:after {
+  content: "\f24b";
+}
+.fa-suffix-cc-diners-club:after {
+  content: "\f24c";
+}
+.fa-suffix-clone:after {
+  content: "\f24d";
+}
+.fa-suffix-balance-scale:after {
+  content: "\f24e";
+}
+.fa-suffix-hourglass-o:after {
+  content: "\f250";
+}
+.fa-suffix-hourglass-1:after,
+.fa-suffix-hourglass-start:after {
+  content: "\f251";
+}
+.fa-suffix-hourglass-2:after,
+.fa-suffix-hourglass-half:after {
+  content: "\f252";
+}
+.fa-suffix-hourglass-3:after,
+.fa-suffix-hourglass-end:after {
+  content: "\f253";
+}
+.fa-suffix-hourglass:after {
+  content: "\f254";
+}
+.fa-suffix-hand-grab-o:after,
+.fa-suffix-hand-rock-o:after {
+  content: "\f255";
+}
+.fa-suffix-hand-stop-o:after,
+.fa-suffix-hand-paper-o:after {
+  content: "\f256";
+}
+.fa-suffix-hand-scissors-o:after {
+  content: "\f257";
+}
+.fa-suffix-hand-lizard-o:after {
+  content: "\f258";
+}
+.fa-suffix-hand-spock-o:after {
+  content: "\f259";
+}
+.fa-suffix-hand-pointer-o:after {
+  content: "\f25a";
+}
+.fa-suffix-hand-peace-o:after {
+  content: "\f25b";
+}
+.fa-suffix-trademark:after {
+  content: "\f25c";
+}
+.fa-suffix-registered:after {
+  content: "\f25d";
+}
+.fa-suffix-creative-commons:after {
+  content: "\f25e";
+}
+.fa-suffix-gg:after {
+  content: "\f260";
+}
+.fa-suffix-gg-circle:after {
+  content: "\f261";
+}
+.fa-suffix-tripadvisor:after {
+  content: "\f262";
+}
+.fa-suffix-odnoklassniki:after {
+  content: "\f263";
+}
+.fa-suffix-odnoklassniki-square:after {
+  content: "\f264";
+}
+.fa-suffix-get-pocket:after {
+  content: "\f265";
+}
+.fa-suffix-wikipedia-w:after {
+  content: "\f266";
+}
+.fa-suffix-safari:after {
+  content: "\f267";
+}
+.fa-suffix-chrome:after {
+  content: "\f268";
+}
+.fa-suffix-firefox:after {
+  content: "\f269";
+}
+.fa-suffix-opera:after {
+  content: "\f26a";
+}
+.fa-suffix-internet-explorer:after {
+  content: "\f26b";
+}
+.fa-suffix-tv:after,
+.fa-suffix-television:after {
+  content: "\f26c";
+}
+.fa-suffix-contao:after {
+  content: "\f26d";
+}
+.fa-suffix-500px:after {
+  content: "\f26e";
+}
+.fa-suffix-amazon:after {
+  content: "\f270";
+}
+.fa-suffix-calendar-plus-o:after {
+  content: "\f271";
+}
+.fa-suffix-calendar-minus-o:after {
+  content: "\f272";
+}
+.fa-suffix-calendar-times-o:after {
+  content: "\f273";
+}
+.fa-suffix-calendar-check-o:after {
+  content: "\f274";
+}
+.fa-suffix-industry:after {
+  content: "\f275";
+}
+.fa-suffix-map-pin:after {
+  content: "\f276";
+}
+.fa-suffix-map-signs:after {
+  content: "\f277";
+}
+.fa-suffix-map-o:after {
+  content: "\f278";
+}
+.fa-suffix-map:after {
+  content: "\f279";
+}
+.fa-suffix-commenting:after {
+  content: "\f27a";
+}
+.fa-suffix-commenting-o:after {
+  content: "\f27b";
+}
+.fa-suffix-houzz:after {
+  content: "\f27c";
+}
+.fa-suffix-vimeo:after {
+  content: "\f27d";
+}
+.fa-suffix-black-tie:after {
+  content: "\f27e";
+}
+.fa-suffix-fonticons:after {
+  content: "\f280";
+}
+.fa-suffix-reddit-alien:after {
+  content: "\f281";
+}
+.fa-suffix-edge:after {
+  content: "\f282";
+}
+.fa-suffix-credit-card-alt:after {
+  content: "\f283";
+}
+.fa-suffix-codiepie:after {
+  content: "\f284";
+}
+.fa-suffix-modx:after {
+  content: "\f285";
+}
+.fa-suffix-fort-awesome:after {
+  content: "\f286";
+}
+.fa-suffix-usb:after {
+  content: "\f287";
+}
+.fa-suffix-product-hunt:after {
+  content: "\f288";
+}
+.fa-suffix-mixcloud:after {
+  content: "\f289";
+}
+.fa-suffix-scribd:after {
+  content: "\f28a";
+}
+.fa-suffix-pause-circle:after {
+  content: "\f28b";
+}
+.fa-suffix-pause-circle-o:after {
+  content: "\f28c";
+}
+.fa-suffix-stop-circle:after {
+  content: "\f28d";
+}
+.fa-suffix-stop-circle-o:after {
+  content: "\f28e";
+}
+.fa-suffix-shopping-bag:after {
+  content: "\f290";
+}
+.fa-suffix-shopping-basket:after {
+  content: "\f291";
+}
+.fa-suffix-hashtag:after {
+  content: "\f292";
+}
+.fa-suffix-bluetooth:after {
+  content: "\f293";
+}
+.fa-suffix-bluetooth-b:after {
+  content: "\f294";
+}
+.fa-suffix-percent:after {
+  content: "\f295";
+}
+.fa-suffix-gitlab:after {
+  content: "\f296";
+}
+.fa-suffix-wpbeginner:after {
+  content: "\f297";
+}
+.fa-suffix-wpforms:after {
+  content: "\f298";
+}
+.fa-suffix-envira:after {
+  content: "\f299";
+}
+.fa-suffix-universal-access:after {
+  content: "\f29a";
+}
+.fa-suffix-wheelchair-alt:after {
+  content: "\f29b";
+}
+.fa-suffix-question-circle-o:after {
+  content: "\f29c";
+}
+.fa-suffix-blind:after {
+  content: "\f29d";
+}
+.fa-suffix-audio-description:after {
+  content: "\f29e";
+}
+.fa-suffix-volume-control-phone:after {
+  content: "\f2a0";
+}
+.fa-suffix-braille:after {
+  content: "\f2a1";
+}
+.fa-suffix-assistive-listening-systems:after {
+  content: "\f2a2";
+}
+.fa-suffix-asl-interpreting:after,
+.fa-suffix-american-sign-language-interpreting:after {
+  content: "\f2a3";
+}
+.fa-suffix-deafness:after,
+.fa-suffix-hard-of-hearing:after,
+.fa-suffix-deaf:after {
+  content: "\f2a4";
+}
+.fa-suffix-glide:after {
+  content: "\f2a5";
+}
+.fa-suffix-glide-g:after {
+  content: "\f2a6";
+}
+.fa-suffix-signing:after,
+.fa-suffix-sign-language:after {
+  content: "\f2a7";
+}
+.fa-suffix-low-vision:after {
+  content: "\f2a8";
+}
+.fa-suffix-viadeo:after {
+  content: "\f2a9";
+}
+.fa-suffix-viadeo-square:after {
+  content: "\f2aa";
+}
+.fa-suffix-snapchat:after {
+  content: "\f2ab";
+}
+.fa-suffix-snapchat-ghost:after {
+  content: "\f2ac";
+}
+.fa-suffix-snapchat-square:after {
+  content: "\f2ad";
+}
+.fa-suffix-pied-piper:after {
+  content: "\f2ae";
+}
+.fa-suffix-first-order:after {
+  content: "\f2b0";
+}
+.fa-suffix-yoast:after {
+  content: "\f2b1";
+}
+.fa-suffix-themeisle:after {
+  content: "\f2b2";
+}
+.fa-suffix-google-plus-circle:after,
+.fa-suffix-google-plus-official:after {
+  content: "\f2b3";
+}
+.fa-suffix-fa:after,
+.fa-suffix-font-awesome:after {
+  content: "\f2b4";
+}
+.fa-suffix-handshake-o:after {
+  content: "\f2b5";
+}
+.fa-suffix-envelope-open:after {
+  content: "\f2b6";
+}
+.fa-suffix-envelope-open-o:after {
+  content: "\f2b7";
+}
+.fa-suffix-linode:after {
+  content: "\f2b8";
+}
+.fa-suffix-address-book:after {
+  content: "\f2b9";
+}
+.fa-suffix-address-book-o:after {
+  content: "\f2ba";
+}
+.fa-suffix-vcard:after,
+.fa-suffix-address-card:after {
+  content: "\f2bb";
+}
+.fa-suffix-vcard-o:after,
+.fa-suffix-address-card-o:after {
+  content: "\f2bc";
+}
+.fa-suffix-user-circle:after {
+  content: "\f2bd";
+}
+.fa-suffix-user-circle-o:after {
+  content: "\f2be";
+}
+.fa-suffix-user-o:after {
+  content: "\f2c0";
+}
+.fa-suffix-id-badge:after {
+  content: "\f2c1";
+}
+.fa-suffix-drivers-license:after,
+.fa-suffix-id-card:after {
+  content: "\f2c2";
+}
+.fa-suffix-drivers-license-o:after,
+.fa-suffix-id-card-o:after {
+  content: "\f2c3";
+}
+.fa-suffix-quora:after {
+  content: "\f2c4";
+}
+.fa-suffix-free-code-camp:after {
+  content: "\f2c5";
+}
+.fa-suffix-telegram:after {
+  content: "\f2c6";
+}
+.fa-suffix-thermometer-4:after,
+.fa-suffix-thermometer:after,
+.fa-suffix-thermometer-full:after {
+  content: "\f2c7";
+}
+.fa-suffix-thermometer-3:after,
+.fa-suffix-thermometer-three-quarters:after {
+  content: "\f2c8";
+}
+.fa-suffix-thermometer-2:after,
+.fa-suffix-thermometer-half:after {
+  content: "\f2c9";
+}
+.fa-suffix-thermometer-1:after,
+.fa-suffix-thermometer-quarter:after {
+  content: "\f2ca";
+}
+.fa-suffix-thermometer-0:after,
+.fa-suffix-thermometer-empty:after {
+  content: "\f2cb";
+}
+.fa-suffix-shower:after {
+  content: "\f2cc";
+}
+.fa-suffix-bathtub:after,
+.fa-suffix-s15:after,
+.fa-suffix-bath:after {
+  content: "\f2cd";
+}
+.fa-suffix-podcast:after {
+  content: "\f2ce";
+}
+.fa-suffix-window-maximize:after {
+  content: "\f2d0";
+}
+.fa-suffix-window-minimize:after {
+  content: "\f2d1";
+}
+.fa-suffix-window-restore:after {
+  content: "\f2d2";
+}
+.fa-suffix-times-rectangle:after,
+.fa-suffix-window-close:after {
+  content: "\f2d3";
+}
+.fa-suffix-times-rectangle-o:after,
+.fa-suffix-window-close-o:after {
+  content: "\f2d4";
+}
+.fa-suffix-bandcamp:after {
+  content: "\f2d5";
+}
+.fa-suffix-grav:after {
+  content: "\f2d6";
+}
+.fa-suffix-etsy:after {
+  content: "\f2d7";
+}
+.fa-suffix-imdb:after {
+  content: "\f2d8";
+}
+.fa-suffix-ravelry:after {
+  content: "\f2d9";
+}
+.fa-suffix-eercast:after {
+  content: "\f2da";
+}
+.fa-suffix-microchip:after {
+  content: "\f2db";
+}
+.fa-suffix-snowflake-o:after {
+  content: "\f2dc";
+}
+.fa-suffix-superpowers:after {
+  content: "\f2dd";
+}
+.fa-suffix-wpexplorer:after {
+  content: "\f2de";
+}
+.fa-suffix-meetup:after {
+  content: "\f2e0";
+}
diff --git a/addons/web/static/lib/pdfjs/web/ui_utils.js b/addons/web/static/lib/pdfjs/web/ui_utils.js
index 7e798e342700aa9fd10830a881cab7cc69aa819a..5480224846bc36676555e92ea583aa5d6338b733 100644
--- a/addons/web/static/lib/pdfjs/web/ui_utils.js
+++ b/addons/web/static/lib/pdfjs/web/ui_utils.js
@@ -348,6 +348,10 @@ var ProgressBar = (function ProgressBarClosure() {
       this.div.classList.remove('indeterminate');
       var progressSize = this.width * this._percent / 100;
       this.div.style.width = progressSize + this.units;
+      // Add attributes for screen readers and analysis tools
+      this.bar.setAttribute('aria-valuemin', 0);
+      this.bar.setAttribute('aria-valuemax', 100);
+      this.bar.setAttribute('aria-valuenow', this._percent);
     },
 
     get percent() {
@@ -377,6 +381,7 @@ var ProgressBar = (function ProgressBarClosure() {
       }
       this.visible = false;
       this.bar.classList.add('hidden');
+      this.bar.setAttribute('aria-hidden', "true")
       document.body.classList.remove('loadingInProgress');
     },
 
@@ -387,6 +392,7 @@ var ProgressBar = (function ProgressBarClosure() {
       this.visible = true;
       document.body.classList.add('loadingInProgress');
       this.bar.classList.remove('hidden');
+      this.bar.setAttribute('aria-hidden', "false")
     }
   };
 
diff --git a/addons/web/static/lib/qweb/qweb-test-attributes.xml b/addons/web/static/lib/qweb/qweb-test-attributes.xml
index e16ef8a3f0eeda933ea61c2f0d5cd8bf51be91a2..b599b76b6295ad59d27404fb8defc3ccf1d43b9b 100644
--- a/addons/web/static/lib/qweb/qweb-test-attributes.xml
+++ b/addons/web/static/lib/qweb/qweb-test-attributes.xml
@@ -5,9 +5,9 @@
     <result id="static"><![CDATA[<div foo="a" bar="b" baz="c"></div>]]></result>
 
     <t t-name="static-void">
-        <img src="/test.jpg"/>
+        <img src="/test.jpg" alt="Test"/>
     </t>
-    <result id="static-void"><![CDATA[<img src="/test.jpg"/>]]></result>
+    <result id="static-void"><![CDATA[<img src="/test.jpg" alt="Test"/>]]></result>
 
     <t t-name="fixed-literal">
         <div t-att-foo="'bar'"/>
diff --git a/addons/web/static/lib/qweb/qweb2.js b/addons/web/static/lib/qweb/qweb2.js
index 94a0afaa32acec033b327f06c38cc5d951a7f506..6ce7453992658dc1a154f8ddf3ada7b1667f099c 100644
--- a/addons/web/static/lib/qweb/qweb2.js
+++ b/addons/web/static/lib/qweb/qweb2.js
@@ -471,10 +471,10 @@ QWeb2.Engine = (function() {
                     if (this.debug && window.console) {
                         console.log(code);
                     }
-                    this.tools.exception("Error evaluating template: " + error, { template: name });
+                    this.tools.exception("Error evaluating template: " + error, { template: template });
                 }
                 if (!tcompiled) {
-                    this.tools.exception("Error evaluating template: (IE?)" + error, { template: name });
+                    this.tools.exception("Error evaluating template: (IE?)" + error, { template: template });
                 }
                 this.compiled_templates[template] = tcompiled;
                 return this.render(template, dict);
diff --git a/addons/web/static/src/js/core/dialog.js b/addons/web/static/src/js/core/dialog.js
index 7d4796886b7082765714bd56454dcaa9aadaf672..6ebd94ef13eadc9004aa59eb1c37cc07cf5482c7 100644
--- a/addons/web/static/src/js/core/dialog.js
+++ b/addons/web/static/src/js/core/dialog.js
@@ -17,12 +17,13 @@ var _t = core._t;
  *   always exists during the lifecycle of the dialog.
  **/
 var Dialog = Widget.extend({
+    tagName: 'main',
     xmlDependencies: ['/web/static/src/xml/dialog.xml'],
     custom_events: _.extend({}, Widget.prototype.custom_events, {
         focus_control_button: '_onFocusControlButton',
     }),
     events: _.extend({} , Widget.prototype.events, {
-        'keydown .modal-footer button':'_onFooterButtonKeyDown',
+        'keydown footer.modal-footer button':'_onFooterButtonKeyDown',
     }),
     /**
      * @param {Widget} parent
@@ -92,7 +93,7 @@ var Dialog = Widget.extend({
                     self.$modal.find('.modal-dialog').addClass('modal-sm');
                     break;
             }
-            self.$footer = self.$modal.find(".modal-footer");
+            self.$footer = self.$modal.find("footer");
             self.set_buttons(self.buttons);
             self.$modal.on('hidden.bs.modal', _.bind(self.destroy, self));
         });
@@ -168,7 +169,17 @@ var Dialog = Widget.extend({
 
         var self = this;
         this.appendTo($('<div/>')).then(function () {
-            self.$modal.find(".modal-body").replaceWith(self.$el);
+            var $main = self.$modal.find("main:first");
+            if ($main.length === 0) {
+                $main = self.$modal.find(".modal-body:first");
+            }
+            if (self.$el.tagName !== 'MAIN') {
+                self.$el.removeClass(".modal-body");
+                self.$el = $('<main class="modal-body"/>').append(self.$el);
+            }
+            $main.replaceWith(self.$el);
+            self.$modal.attr('open', true);
+            self.$modal.removeAttr("aria-hidden");
             self.$modal.modal('show');
             self._opened.resolve();
         });
@@ -201,11 +212,13 @@ var Dialog = Widget.extend({
         $('.tooltip').remove(); //remove open tooltip if any to prevent them staying when modal has disappeared
         if (this.$modal) {
             this.$modal.modal('hide');
+            this.$modal.removeAttr('open');
+            this.$modal.attr('aria-hidden', true);
             this.$modal.remove();
         }
 
         if (!isFocusSet) {
-            var modals = $('body > .modal').filter(':visible');
+            var modals = $('body > [role="dialog"]').filter(':visible');
             if (modals.length) {
                 modals.last().focus();
                 // Keep class modal-open (deleted by bootstrap hide fnct) on body to allow scrolling inside the modal
@@ -287,9 +300,9 @@ Dialog.alert = function (owner, message, options) {
     return new Dialog(owner, _.extend({
         size: 'medium',
         buttons: buttons,
-        $content: $('<div>', {
+        $content: $('<main role="alert"/>').append($('<p>', {
             text: message,
-        }),
+        })),
         title: _t("Alert"),
     }, options)).open({shouldFocusButtons:true});
 };
@@ -312,9 +325,9 @@ Dialog.confirm = function (owner, message, options) {
     return new Dialog(owner, _.extend({
         size: 'medium',
         buttons: buttons,
-        $content: $('<div>', {
+        $content: $('<main role="alert">').append($('<p>', {
             text: message,
-        }),
+        })),
         title: _t("Confirmation"),
     }, options)).open({shouldFocusButtons:true});
 };
@@ -345,7 +358,7 @@ Dialog.safeConfirm = function (owner, message, options) {
             text: message,
         });
     }
-    $content = $('<div/>').append($content, $securityCheck);
+    $content = $('<main role="alert"/>').append($content, $securityCheck);
 
     var buttons = [
         {
diff --git a/addons/web/static/src/js/fields/abstract_field.js b/addons/web/static/src/js/fields/abstract_field.js
index 9bb61475b83f80b72a76ac2235b7cd2460f74072..eab0093ed503b3a79fcee0b0ee38b193831f703b 100644
--- a/addons/web/static/src/js/fields/abstract_field.js
+++ b/addons/web/static/src/js/fields/abstract_field.js
@@ -310,6 +310,7 @@ var AbstractField = Widget.extend({
      */
     removeInvalidClass: function () {
         this.$el.removeClass('o_field_invalid');
+        this.$el.removeAttr('aria-invalid');
     },
 
     /**
@@ -317,6 +318,7 @@ var AbstractField = Widget.extend({
      */
     setInvalidClass: function () {
         this.$el.addClass('o_field_invalid');
+        this.$el.attr('aria-invalid', 'true');
     },
 
     /**
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js
index 43b4e349a66b5531605ba77591d10bfc9d3cae08..0cf9271de9db3e96fbdcd4c2f6d3ed1ffd139e10 100644
--- a/addons/web/static/src/js/fields/basic_fields.js
+++ b/addons/web/static/src/js/fields/basic_fields.js
@@ -397,9 +397,10 @@ var LinkButton = AbstractField.extend({
         if (this.value) {
             var className = this.attrs.icon || 'fa-globe';
 
-            this.$el.html("<span />");
+            this.$el.html("<span role='img'/>");
             this.$el.addClass("fa "+ className);
             this.$el.attr('title', this.value);
+            this.$el.attr('aria-label', this.value);
         }
     },
 
@@ -1460,6 +1461,7 @@ var PriorityWidget = AbstractField.extend({
     _renderStar: function (tag, isFull, index, tip) {
         return $(tag)
             .attr('title', tip)
+            .attr('aria-label', tip)
             .attr('data-index', index)
             .addClass('o_priority_star fa')
             .toggleClass('fa-star', isFull)
@@ -1529,7 +1531,8 @@ var AttachmentImage = AbstractField.extend({
         if (this.value) {
             this.$el.empty().append($('<img>/', {
                 src: "/web/image/" + this.value.data.id + "?unique=1",
-                title: this.value.data.display_name
+                title: this.value.data.display_name,
+                alt: _("Image")
             }));
         }
     }
@@ -1598,7 +1601,9 @@ var StateSelectionWidget = AbstractField.extend({
         this.$('.o_status')
             .removeClass('o_status_red o_status_green')
             .addClass(currentState.state_class)
-            .prop('special_click', true);
+            .prop('special_click', true)
+            .parent().attr('title', currentState.state_name)
+            .attr('aria-label', currentState.state_name);
 
         // Render "FormSelection.Items" and move it into "FormSelection"
         var $items = $(qweb.render('FormSelection.items', {
@@ -1662,8 +1667,9 @@ var FavoriteWidget = AbstractField.extend({
      * @private
      */
     _render: function () {
-        var template = this.attrs.nolabel ? '<a href="#"><i class="fa %s" title="%s"></i></a>' : '<a href="#"><i class="fa %s"></i> %s</a>';
-        this.$el.empty().append(_.str.sprintf(template, this.value ? 'fa-star' : 'fa-star-o', this.value ? _t('Remove from Favorites') : _t('Add to Favorites')));
+        var tip = this.value ? _t('Remove from Favorites') : _t('Add to Favorites');
+        var template = this.attrs.nolabel ? '<a href="#"><i class="fa %s" title="%s" aria-label="%s" role="img"></i></a>' : '<a href="#"><i class="fa %s" role="img" aria-label="%s"> %s</i></a>';
+        this.$el.empty().append(_.str.sprintf(template, this.value ? 'fa-star' : 'fa-star-o', tip, tip));
     },
 
     //--------------------------------------------------------------------------
@@ -2043,7 +2049,10 @@ var FieldProgressBar = AbstractField.extend({
             widthComplete = 100;
         }
 
-        this.$('.o_progress').toggleClass('o_progress_overflow', value > max_value);
+        this.$('.o_progress').toggleClass('o_progress_overflow', value > max_value)
+            .attr('aria-valuemin', '0')
+            .attr('aria-valuemax', max_value)
+            .attr('aria-valuenow', value);
         this.$('.o_progressbar_complete').css('width', widthComplete + '%');
 
         if (!this.write_mode) {
@@ -2100,6 +2109,7 @@ var FieldToggleBoolean = AbstractField.extend({
             .toggleClass('text-muted', !this.value);
         var title = this.value ? this.attrs.options.active : this.attrs.options.inactive;
         this.$el.attr('title', title);
+        this.$el.attr('aria-pressed', this.value);
     },
 
     //--------------------------------------------------------------------------
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js
index c86411b6cd903670175d4939de881f22736abbac..83ce59f1eb6fe54f41ea7298239c4cd67594b8b5 100644
--- a/addons/web/static/src/js/fields/relational_fields.js
+++ b/addons/web/static/src/js/fields/relational_fields.js
@@ -1867,7 +1867,7 @@ var FormFieldMany2ManyTags = FieldMany2ManyTags.extend({
         var $target = $(ev.currentTarget);
         var color = $target.data('color');
         var id = $target.data('id');
-        var tag = this.$("span.badge[data-id='" + id + "']");
+        var tag = this.$("button.badge[data-id='" + id + "']");
         var currentColor = tag.data('color');
         var changes = {};
 
diff --git a/addons/web/static/src/js/views/basic/basic_renderer.js b/addons/web/static/src/js/views/basic/basic_renderer.js
index 9834c9c18de61a4f13785c8b265f6d7a1b26593d..13a00dda046755d025126b235056ef8a5a95d4dc 100644
--- a/addons/web/static/src/js/views/basic/basic_renderer.js
+++ b/addons/web/static/src/js/views/basic/basic_renderer.js
@@ -50,6 +50,7 @@ var BasicRenderer = AbstractRenderer.extend({
                 invalidFields.push(widget.name);
             }
             widget.$el.toggleClass('o_field_invalid', !canBeSaved);
+            widget.$el.attr('aria-invalid', !canBeSaved);
         });
         return invalidFields;
     },
diff --git a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js
index fad822efdb940f06ba0b8839db94a2848ec8a3e9..7af6b677dcf46d392098bd69c3bdaaddf9cf8c31 100644
--- a/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js
+++ b/addons/web/static/src/js/views/kanban/kanban_column_progressbar.js
@@ -166,6 +166,9 @@ var KanbanColumnProgressBar = Widget.extend({
             if (count > 0) {
                 $bar.addClass('o_bar_has_records');
                 $bar.css('width', (count * 100 / self.groupCount) + '%');
+                $bar.attr('aria-valuemin', 0);
+                $bar.attr('aria-valuemax', self.groupCount);
+                $bar.attr('aria-valuenow', count);
             } else {
                 $bar.css('width', '');
             }
diff --git a/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js b/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js
index 170b950a49d35b09fba38fb8486083e13e34a6c2..f554d333bc94b5fd01b88c69f527aaec71ce7f26 100644
--- a/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js
+++ b/addons/web/static/src/js/views/kanban/kanban_column_quick_create.js
@@ -216,7 +216,7 @@ var ColumnQuickCreate = Widget.extend({
         }
 
         // ignore clicks in modals
-        if ($(event.target).closest('.modal').length) {
+        if ($(event.target).closest('[role="dialog"]').length) {
             return;
         }
 
diff --git a/addons/web/static/src/js/views/kanban/kanban_record.js b/addons/web/static/src/js/views/kanban/kanban_record.js
index 30bafaab117c4d0849bb73895d0fc1f789e46acd..66171d2693cfa884385465db6de719df8d68c16c 100644
--- a/addons/web/static/src/js/views/kanban/kanban_record.js
+++ b/addons/web/static/src/js/views/kanban/kanban_record.js
@@ -17,7 +17,21 @@ var widgetRegistry = require('web.widget_registry');
 var _t = core._t;
 var QWeb = core.qweb;
 
-var NB_KANBAN_RECORD_COLORS = 12;
+var KANBAN_RECORD_COLORS = [
+    _t('No color'),
+    _t('Red'),
+    _t('Orange'),
+    _t('Yellow'),
+    _t('Light blue'),
+    _t('Dark purple'),
+    _t('Salmon pink'),
+    _t('Medium blue'),
+    _t('Dark blue'),
+    _t('Fushia'),
+    _t('Green'),
+    _t('Purple'),
+];
+var NB_KANBAN_RECORD_COLORS = KANBAN_RECORD_COLORS.length;
 
 var KanbanRecord = Widget.extend({
     events: {
@@ -126,6 +140,17 @@ var KanbanRecord = Widget.extend({
         }
         return 0;
     },
+    /**
+     * Computes a color name from value
+     *
+     * @private
+     * @param {number | string} variable
+     * @returns {integer} the color name
+     */
+    _getColorname: function (variable) {
+        var colorID = this._getColorID(variable);
+        return KANBAN_RECORD_COLORS[colorID];
+    },
     /**
      * @private
      * @param {string} model the name of the model
@@ -284,6 +309,7 @@ var KanbanRecord = Widget.extend({
     _render: function () {
         this._replaceElement(this.qweb.render('kanban-box', this.qweb_context));
         this.$el.addClass('o_kanban_record').attr("tabindex",0);
+        this.$el.attr('role', 'article');
         this.$el.data('record', this);
         if (this.$el.hasClass('oe_kanban_global_click') ||
             this.$el.hasClass('oe_kanban_global_click_edit')) {
@@ -338,6 +364,7 @@ var KanbanRecord = Widget.extend({
             kanban_image: this._getImageURL.bind(this),
             kanban_color: this._getColorClassname.bind(this),
             kanban_getcolor: this._getColorID.bind(this),
+            kanban_getcolorname: this._getColorname.bind(this),
             kanban_compute_domain: this._computeDomain.bind(this),
             read_only_mode: this.read_only_mode,
             record: this.record,
@@ -354,8 +381,10 @@ var KanbanRecord = Widget.extend({
     _setupColor: function () {
         var color_field = this.$el.attr('color');
         if (color_field && color_field in this.fields) {
+            var colorHelp = _.str.sprintf(_t("Card color: %s"), this._getColorname(this.recordData[color_field]));
             var colorClass = this._getColorClassname(this.recordData[color_field]);
             this.$el.addClass(colorClass);
+            this.$el.prepend('<span title="' + colorHelp + '" aria-label="' + colorHelp +'" role="img" class="oe_kanban_color_help"/>');
         }
     },
     /**
diff --git a/addons/web/static/src/js/views/kanban/kanban_record_quick_create.js b/addons/web/static/src/js/views/kanban/kanban_record_quick_create.js
index bf7e60b68c3bd4e64389dd77f103e62feb2d75ed..749938e8b9edb228ac9d805414d71491cade3ede 100644
--- a/addons/web/static/src/js/views/kanban/kanban_record_quick_create.js
+++ b/addons/web/static/src/js/views/kanban/kanban_record_quick_create.js
@@ -232,7 +232,7 @@ var RecordQuickCreate = Widget.extend({
         }
 
         // ignore clicks in modals
-        if ($(ev.target).closest('.modal').length) {
+        if ($(ev.target).closest('[role="dialog"]').length) {
             return;
         }
 
diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js
index 07aa8eacb4e0fd48f5d4c885478376e185e3a93b..9ec82878e70ffea93f76f93a8d152ab028a9b490 100644
--- a/addons/web/static/src/js/views/list/list_editable_renderer.js
+++ b/addons/web/static/src/js/views/list/list_editable_renderer.js
@@ -527,7 +527,7 @@ ListRenderer.include({
     _renderRows: function () {
         var $rows = this._super();
         if (this.addCreateLine) {
-            var $a = $('<a href="#">').text(_t("Add a line"));
+            var $a = $('<a href="#" role="button">').text(_t("Add a line"));
             var $td = $('<td>')
                         .attr('colspan', this._getNumberOfCols())
                         .addClass('o_field_x2many_list_row_add')
@@ -923,9 +923,9 @@ ListRenderer.include({
 
         // ignore clicks in modals, except if the list is in a modal, and the
         // click is performed in that modal
-        var $clickModal = $(event.target).closest('.modal');
+        var $clickModal = $(event.target).closest('[role="dialog"]');
         if ($clickModal.length) {
-            var $listModal = this.$el.closest('.modal');
+            var $listModal = this.$el.closest('[role="dialog"]');
             if ($clickModal.prop('id') !== $listModal.prop('id')) {
                 return;
             }
diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js
index bf206eae32c39c22a029cea208d18088251dac40..e84d6687cc9ef47f98a85b791c392ea0f1dba785 100644
--- a/addons/web/static/src/js/views/list/list_renderer.js
+++ b/addons/web/static/src/js/views/list/list_renderer.js
@@ -549,6 +549,10 @@ var ListRenderer = BasicRenderer.extend({
             .toggleClass('o-sort-up', isNodeSorted ? order[0].asc : false)
             .addClass(field.sortable && 'o_column_sortable');
 
+        if (isNodeSorted) {
+            $th.attr('aria-sort', order[0].asc ? 'ascending': 'descending');
+        }
+
         if (field.type === 'float' || field.type === 'integer' || field.type === 'monetary') {
             $th.css({textAlign: 'right'});
         }
diff --git a/addons/web/static/src/js/views/pivot/pivot_renderer.js b/addons/web/static/src/js/views/pivot/pivot_renderer.js
index b5648d358a9728e813ea5a23f7d042fa306ade55..b395307616186465b22f94901d6973a79d45e32e 100644
--- a/addons/web/static/src/js/views/pivot/pivot_renderer.js
+++ b/addons/web/static/src/js/views/pivot/pivot_renderer.js
@@ -96,6 +96,11 @@ var PivotRenderer = AbstractRenderer.extend({
                     $cell.data('id', cell.id).data('measure', cell.measure);
                     if (cell.id === this.state.sortedColumn.id && cell.measure === this.state.sortedColumn.measure) {
                         $cell.addClass('o_pivot_measure_row_sorted_' + this.state.sortedColumn.order);
+                        if (this.state.sortedColumn.order == 'asc') {
+                            $cell.attr('aria-sorted', 'ascending');
+                        } else {
+                            $cell.attr('aria-sorted', 'descending');
+                        }
                     }
                 }
                 $row.append($cell);
diff --git a/addons/web/static/src/js/widgets/change_password.js b/addons/web/static/src/js/widgets/change_password.js
index c05fa30408b0759a7db8357dc85e4c195a35d4c0..b2e4e013335bc328aa5bf4a2e9eda1f988431dbf 100644
--- a/addons/web/static/src/js/widgets/change_password.js
+++ b/addons/web/static/src/js/widgets/change_password.js
@@ -28,7 +28,7 @@ var ChangePassword = AbstractAction.extend({
         var $button = self.$('.oe_form_button');
         $button.appendTo(this.getParent().$footer);
         $button.eq(1).click(function () {
-            self.$el.parents('.modal').modal('hide');
+            self.$el.parents('[role="dialog"]').modal('hide');
         });
         $button.eq(0).click(function () {
             self._rpc({
diff --git a/addons/web/static/src/js/widgets/debug_manager.js b/addons/web/static/src/js/widgets/debug_manager.js
index 4b86b76c36dfda0b1b71bdcfc28ca308acbf2d30..4bdc27448a01d695d66e89df2c3fa0f2dd40c6c4 100644
--- a/addons/web/static/src/js/widgets/debug_manager.js
+++ b/addons/web/static/src/js/widgets/debug_manager.js
@@ -848,7 +848,7 @@ if (config.debug) {
                         if (action) {
                             var controller = parent.getCurrentControllerInDialog();
                             self.debugManager = new DebugManager(self);
-                            var $header = self.$modal.find('.modal-header:first');
+                            var $header = self.$modal.find('header.modal-header:first');
                             return self.debugManager.prependTo($header).then(function () {
                                 self.debugManager.update('action', action, controller.widget);
                             });
diff --git a/addons/web/static/src/js/widgets/domain_selector_dialog.js b/addons/web/static/src/js/widgets/domain_selector_dialog.js
index 46b54089c5fef6c129bcf981690820e940c809e7..d0c0030b100765e4fdc0be48ff469767d84e42a8 100644
--- a/addons/web/static/src/js/widgets/domain_selector_dialog.js
+++ b/addons/web/static/src/js/widgets/domain_selector_dialog.js
@@ -43,7 +43,7 @@ return Dialog.extend({
         var self = this;
         this.opened().then(function () {
             // this restores default modal height (bootstrap) and allows field selector to overflow
-            self.$el.css('overflow', 'visible').closest('.modal-dialog').css('height', 'auto');
+            self.$el.css('overflow', 'visible').closest('[role="dialog"]').css('height', 'auto');
         });
         return $.when(
             this._super.apply(this, arguments),
diff --git a/addons/web/static/src/scss/ui.scss b/addons/web/static/src/scss/ui.scss
index 8911b4f10abe8d38235dbc8798eb62534c4ca43e..d88f21f83a10772d9c283db39122a77b47b96cd7 100644
--- a/addons/web/static/src/scss/ui.scss
+++ b/addons/web/static/src/scss/ui.scss
@@ -9,3 +9,7 @@
 .ui-autocomplete {
     z-index: $zindex-modal + 1;
 }
+
+[aria-hidden="true"], [aria-hidden="1"] {
+    display: none!important;
+}
diff --git a/addons/web/static/src/scss/utils.scss b/addons/web/static/src/scss/utils.scss
index efb8dce7598a7826a219bfbc45e23a2521d8f398..cf04a8d32f8cfb9a9fa91638e21c92f86f65aeef 100644
--- a/addons/web/static/src/scss/utils.scss
+++ b/addons/web/static/src/scss/utils.scss
@@ -337,6 +337,14 @@
         }
     }
 }
+.oe_kanban_color_help {
+    bottom: 0px;
+    left: -1px;
+    top: 0px;
+    width: 6px;
+    position: absolute;
+    right: auto;
+}
 @mixin o-kanban-slim-col {
     position: relative;
     @include o-flex(0, 0, auto);
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 328f1ab93b5c8c2584e7d2e11b97aad5918eb1b7..45bd3555d692962fec17ae29e283b6589bb296c6 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -6,13 +6,13 @@
 <div t-name="Loading" class="o_loading"/>
 
 <t t-name="WidgetLabel.tooltip">
-    <div class="oe_tooltip_string" t-if="widget.string">
+    <div class="oe_tooltip_string" t-if="widget.string" role="tooltip">
         <t t-esc="widget.string"/> <t t-if="debug and widget.nolabel">(nolabel)</t>
     </div>
-    <p t-if="widget.attrs.help || widget.field.help" class="oe_tooltip_help">
+    <p t-if="widget.attrs.help || widget.field.help" class="oe_tooltip_help" role="tooltip">
         <t t-esc="widget.attrs.help || widget.field.help"/>
     </p>
-    <ul t-if="debug" class="oe_tooltip_technical">
+    <ul t-if="debug" class="oe_tooltip_technical" role="tooltip">
         <li data-item="field" t-if="widget.name">
             <span class="oe_tooltip_technical_title">Field:</span>
             <t t-esc="widget.name"/>
@@ -70,7 +70,7 @@
     </ul>
 </t>
 <t t-name="WidgetButton.tooltip">
-    <div class="oe_tooltip_string" t-if="debug || node.attrs.string">
+    <div class="oe_tooltip_string" t-if="debug || node.attrs.string" role="tooltip">
         <t t-if="debug">
             Button
             <t t-if="node.attrs.string">: </t>
@@ -78,10 +78,10 @@
         </t>
         <t t-esc="node.attrs.string"/>
     </div>
-    <p t-if="node.attrs.help" class="oe_tooltip_help">
+    <p t-if="node.attrs.help" class="oe_tooltip_help" role="tooltip">
         <t t-esc="node.attrs.help"/>
     </p>
-    <ul t-if="debug" class="oe_tooltip_technical">
+    <ul t-if="debug" class="oe_tooltip_technical" role="tooltip">
         <li data-item="object">
             <span class="oe_tooltip_technical_title">Object:</span>
             <t t-esc="state.model"/>
@@ -115,18 +115,18 @@
 </t>
 
 <t t-name="Notification">
-    <div t-attf-class="o_notification #{widget.className}" t-translation="off">
-        <a t-if="widget.sticky" class="fa fa-times o_close" href="#"/>
+    <div t-attf-class="o_notification #{widget.className}" t-translation="off" role="alertdialog">
+        <a t-if="widget.sticky" class="fa fa-times o_close" href="#" title="Close" aria-label="Close"/>
         <div class="o_notification_title">
-            <span t-attf-class="o_icon fa fa-3x #{widget.icon}"/>
+            <span t-attf-class="o_icon fa fa-3x #{widget.icon}" role="img" t-attf-aria-label="Notification #{widget.name}" t-attf-title="Notification #{widget.name}"/>
             <t t-raw="widget.title"/>
         </div>
         <div class="o_notification_content" t-if="widget.message"><t t-raw="widget.message"/></div>
         <div t-if="widget.buttons.length" class="o_buttons">
             <button t-foreach="widget.buttons" t-as="button" t-attf-class="btn btn-sm #{button.primary ? 'btn-primary' : 'btn-default'}" type="button">
                 <t t-if="button.icon">
-                    <i t-if="button.icon.indexOf('fa-') === 0" t-attf-class="fa fa-fw o_button_icon #{button.icon}"/>
-                    <img t-else="" t-att-src="button.icon"/>
+                    <i t-if="button.icon.indexOf('fa-') === 0" t-attf-class="fa fa-fw o_button_icon #{button.icon}" role="img" t-att-aria-label="button.name" t-att-title="button.name"/>
+                    <img t-else="" t-att-src="button.icon" t-att-alt="button.name"/>
                 </t>
                 <span><t t-esc="button.text"/></span>
             </button>
@@ -134,7 +134,7 @@
     </div>
 </t>
 
-<div t-name="CrashManager.warning" class="o_dialog_warning">
+<div t-name="CrashManager.warning" class="o_dialog_warning" role="alert">
     <t t-js="d">
         var message = (d.message !== undefined) ? d.message : d.error.data.message;
         d.html_error = context.engine.tools.html_escape(message).replace(/\n/g, '<br/>');
@@ -144,7 +144,7 @@
 <div t-name="CrashManager.error" class="o_dialog_error">
     <div class="alert alert-warning clearfix" role="alert">
         <button class="btn btn-sm btn-primary pull-right ml8 o_clipboard_button">
-            <i class="fa fa-clipboard mr8"/>Copy the full error to clipboard
+            <span class="fa fa-clipboard mr8">Copy the full error to clipboard</span>
         </button>
         <p><b>An error occurred</b></p>
         <p>Please use the copy button to report the error to your support service.</p>
@@ -152,13 +152,13 @@
 
     <t t-set="errUID" t-value="_.uniqueId()"/>
     <button class="btn btn-sm btn-link" t-att-data-target="'#o_error_detail' + errUID" data-toggle="collapse">See details</button>
-    <div t-att-id="'o_error_detail' + errUID" class="collapse alert alert-danger o_error_detail">
+    <div t-att-id="'o_error_detail' + errUID" class="collapse alert alert-danger o_error_detail" role="alert">
         <pre><t t-esc="error.message"/></pre>
         <pre><t t-esc="error.data.debug"/></pre>
     </div>
 </div>
 
-<form t-name="ChangePassword" name="change_password_form" method="POST">
+<form t-name="ChangePassword" name="change_password_form" method="POST" aria-atomic="true">
     <div class="o_form_view">
         <table class="o_group o_inner_group o_label_nowrap">
             <tr>
@@ -182,23 +182,23 @@
 
 <t t-name="ControlPanel">
     <div class="o_control_panel">
-        <ol class="breadcrumb"/>
-        <div class="o_cp_searchview"/>
+        <ol class="breadcrumb" role="navigation"/>
+        <div class="o_cp_searchview" role="search"/>
         <div class="o_cp_left">
-            <div class="o_cp_buttons"/>
-            <div class="o_cp_sidebar"/>
+            <div class="o_cp_buttons" role="toolbar" aria-label="Control panel toolbar"/>
+            <aside class="o_cp_sidebar"/>
         </div>
         <div class="o_cp_right">
-            <div class="btn-group o_search_options"/>
-            <div class="o_cp_pager"/>
-            <div class="btn-group btn-group-sm o_cp_switch_buttons"/>
+            <div class="btn-group o_search_options" role="search"/>
+            <nav class="o_cp_pager" role="search" aria-label="Pager"/>
+            <nav class="btn-group btn-group-sm o_cp_switch_buttons" role="toolbar" aria-label="View switcher"/>
         </div>
     </div>
 </t>
 <t t-name="X2ManyControlPanel">
     <div class="o_x2m_control_panel">
-        <div class="o_cp_buttons"/>
-        <div class="o_cp_pager"/>
+        <nav class="o_cp_buttons" aria-label="Control panel toolbar" role="toolbar"/>
+        <nav class="o_cp_pager" aria-label="Pager" role="toolbar"/>
     </div>
 </t>
 
@@ -206,41 +206,41 @@
     <t t-foreach="views" t-as="view">
         <button type="button" t-att-accesskey="view.accessKey"
             t-attf-class="btn btn-icon fa fa-lg #{view.icon} o_cp_switch_#{view.type}"
-            t-att-aria-label="view.type"
-            t-att-data-view-type="view.type" t-att-title="view.label" tabindex="-1"/>
+            t-attf-aria-label="View #{view.type}"
+            t-att-data-view-type="view.type" t-attf-title="View #{view.type}" tabindex="-1"/>
     </t>
 </t>
 
 <t t-name="WebClient.DebugManager">
-    <li class="o_debug_manager">
-        <a href="#" title="Open Developer Tools" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" tabindex="-1">
+    <li class="o_debug_manager" role="menuitem">
+        <a href="#" title="Open Developer Tools" aria-label="Open Developer Tools" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" tabindex="-1">
             <span class="fa fa-bug"/>
         </a>
         <ul class="dropdown-menu o_debug_dropdown" role="menu"/>
     </li>
 </t>
 <t t-name="WebClient.DebugManager.Global">
-    <li><a href="#" data-action="perform_js_tests">Run JS Tests</a></li>
-    <li><a href="#" data-action="perform_js_mobile_tests">Run JS Mobile Tests</a></li>
-    <li><a href="#" data-action="select_view">Open View</a></li>
+    <li><a role="menuitem" href="#" data-action="perform_js_tests">Run JS Tests</a></li>
+    <li><a role="menuitem" href="#" data-action="perform_js_mobile_tests">Run JS Mobile Tests</a></li>
+    <li><a role="menuitem" href="#" data-action="select_view">Open View</a></li>
     <t t-if="manager._events">
-        <li class="divider"/>
-        <li><a href="#" data-action="show_timelines">Toggle Timelines</a></li>
-        <li><a href="#" data-action="requests_clear">Clear Events</a></li>
+        <li class="divider" role="separator"/>
+        <li><a role="menuitem" href="#" data-action="show_timelines">Toggle Timelines</a></li>
+        <li><a role="menuitem" href="#" data-action="requests_clear">Clear Events</a></li>
     </t>
-    <li class="divider o_debug_leave_section"/>
-    <li><a href="#" data-action="split_assets">Activate Assets Debugging</a></li>
-    <li><a href="#" data-action="regenerateAssets">Regenerate Assets Bundles</a></li>
-    <li><a href="#" data-action="leave_debug_mode">Leave the Developer Tools</a></li>
+    <li class="divider o_debug_leave_section" role="separator"/>
+    <li><a role="menuitem" href="#" data-action="split_assets">Activate Assets Debugging</a></li>
+    <li><a role="menuitem" href="#" data-action="regenerateAssets">Regenerate Assets Bundles</a></li>
+    <li><a role="menuitem" href="#" data-action="leave_debug_mode">Leave the Developer Tools</a></li>
 </t>
 <t t-name="WebClient.DebugManager.Action">
     <t t-if="action">
-        <li class="divider"/>
-        <li><a href="#" data-action="edit" t-att-data-model="action.type" t-att-data-id="action.id">Edit Action</a></li>
+        <li class="divider" role="separator"/>
+        <li><a role="menuitem" href="#" data-action="edit" t-att-data-model="action.type" t-att-data-id="action.id">Edit Action</a></li>
         <t t-if="action.res_model">
-            <li><a href="#" data-action="get_view_fields">View Fields</a></li>
-            <li><a href="#" data-action="manage_filters">Manage Filters</a></li>
-            <li><a href="#" data-action="translate">Technical Translation</a></li>
+            <li><a role="menuitem" href="#" data-action="get_view_fields">View Fields</a></li>
+            <li><a role="menuitem" href="#" data-action="manage_filters">Manage Filters</a></li>
+            <li><a role="menuitem" href="#" data-action="translate">Technical Translation</a></li>
         </t>
     </t>
 </t>
@@ -248,7 +248,7 @@
     <dl><t t-foreach="fields" t-as="field">
         <dt><h4><t t-esc="field"/></h4></dt>
         <dd>
-            <dl><ul><li t-foreach="field_value" t-as="attribute">
+            <dl><ul role="menu"><li role="menuitem" t-foreach="field_value" t-as="attribute">
                 <strong><t t-esc="attribute"/></strong>:
                 <t t-esc="attribute_value"/>
             </li></ul></dl>
@@ -257,21 +257,21 @@
 </t>
 <t t-name="WebClient.DebugManager.View">
     <t t-if="view">
-        <li class="divider"/>
+        <li role="separator" class="divider"/>
         <t t-if="view.type === 'form'">
-            <li><a href="#" data-action="set_defaults">Set Defaults</a></li>
+            <li><a role="menuitem" href="#" data-action="set_defaults">Set Defaults</a></li>
             <t t-if="controller.getSelectedIds().length === 1">
-                <li><a href="#" data-action="get_metadata">View Metadata</a></li>
+                <li><a role="menuitem" href="#" data-action="get_metadata">View Metadata</a></li>
             </t>
         </t>
-        <li><a href="#" data-action="fvg">Fields View Get</a></li>
+        <li><a role="menuitem" href="#" data-action="fvg">Fields View Get</a></li>
         <t t-if="can_edit">
             <li>
-              <a href="#" data-action="edit" data-model="ir.ui.view" t-att-data-id="view.fieldsView.view_id">
+              <a role="menuitem" href="#" data-action="edit" data-model="ir.ui.view" t-att-data-id="view.fieldsView.view_id">
                 Edit View: <t t-esc="_.str.capitalize(view.type)"/>
               </a>
             </li>
-            <li t-if="searchview and searchview.$el.is(':visible')"><a href="#" data-action="edit" data-model="ir.ui.view" t-att-data-id="action.searchFieldsView.view_id">Edit SearchView</a></li>
+            <li t-if="searchview and searchview.$el.is(':visible')"><a role="menuitem" href="#" data-action="edit" data-model="ir.ui.view" t-att-data-id="action.searchFieldsView.view_id">Edit SearchView</a></li>
         </t>
     </t>
 </t>
@@ -332,7 +332,7 @@
                 </a>
             </t>
             <ul class="dropdown-menu" role="menu">
-                <li t-foreach="widget.items[section.name]" t-as="item" t-att-class="item.classname">
+                <li role="menuitem" t-foreach="widget.items[section.name]" t-as="item" t-att-class="item.classname">
                     <t t-if="section.name == 'files'">
                         <t t-set="item.title">
                             <b>Attachment : </b><br/>
@@ -351,10 +351,10 @@
                     </t>
                     <a t-att-title="item.title or None" t-att-data-section="section.name" t-att-data-index="item_index" t-att-href="item.url or '#'">
                         <t t-raw="item.label"/>
-                        <span t-if="section.name == 'files' and widget.options.editable and !item.callback" class="fa fa-trash-o o_sidebar_delete_attachment" t-att-data-id="item.id" title="Delete this attachment"/>
+                        <span t-if="section.name == 'files' and widget.options.editable and !item.callback" class="fa fa-trash-o o_sidebar_delete_attachment" t-att-data-id="item.id" title="Delete this attachment" role="img" aria-label="Delete this attachment"/>
                     </a>
                 </li>
-                <li t-if="section.name == 'files' and widget.options.editable" class="o_sidebar_add_attachment">
+                <li role="menuitem" t-if="section.name == 'files' and widget.options.editable" class="o_sidebar_add_attachment">
                     <t t-call="HiddenInputFile">
                         <t t-set="fileupload_id" t-value="widget.fileuploadId"/>
                         <t t-set="fileupload_action" t-translation="off">/web/binary/upload_attachment</t>
@@ -371,7 +371,7 @@
 </t>
 
 <t t-name="ListView.buttons">
-    <div class="o_list_buttons">
+    <div class="o_list_buttons" role="toolbar" aria-label="Main actions">
         <t t-if="widget.is_action_enabled('create')">
             <button type="button" class="btn btn-primary btn-sm o_list_button_add" accesskey="c">
                 Create
@@ -387,7 +387,7 @@
 </t>
 
 <t t-name="FormView.buttons">
-    <div class="o_form_buttons_view">
+    <div class="o_form_buttons_view" role="toolbar" aria-label="Main actions">
         <button t-if="widget.is_action_enabled('edit')" type="button"
                 class="btn btn-primary btn-sm o_form_button_edit" accesskey="a">
             Edit
@@ -397,7 +397,7 @@
             Create
         </button>
     </div>
-    <div class="o_form_buttons_edit">
+    <div class="o_form_buttons_edit" role="toolbar" aria-label="Main actions">
         <button type="button"
                 class="btn btn-primary btn-sm o_form_button_save" accesskey="s">
             Save
@@ -409,7 +409,7 @@
     </div>
 </t>
 <t t-name="SaveCancelButton.tooltip">
-    <div class="oe_tooltip_string">
+    <div class="oe_tooltip_string" role="alert">
         <div class="tooltip-inner">
             Hit ENTER to SAVE<br/>
             Hit ESCAPE to DISCARD
@@ -417,7 +417,7 @@
     </div>
 </t>
 <t t-name="CreateButton.tooltip">
-    <div class="oe_tooltip_string">
+    <div class="oe_tooltip_string" role="tooltip">
         <div class="tooltip-inner">
             Hit ENTER to CREATE<br/>
             Hit DOWN to navigate to the list bellow
@@ -425,14 +425,14 @@
     </div>
 </t>
 <t t-name="FormButton.tooltip">
-    <div class="oe_tooltip_string">
+    <div class="oe_tooltip_string" role="tooltip">
         <div class="tooltip-inner">
             Hit ENTER to 
             <t t-esc="title"></t>
         </div>
     </div>
 </t>
-<form t-name="FormView.set_default">
+<form t-name="FormView.set_default" aria-atomic="true">
     <t t-set="args" t-value="widget.args"/>
     <table style="width: 100%">
         <tr>
@@ -489,25 +489,25 @@
     </table>
 </form>
 <t t-name="GraphView.buttons">
-    <div class="btn-group btn-group-sm" role="group">
+    <div class="btn-group btn-group-sm" role="toolbar" aria-label="Main actions">
         <button class="btn btn-primary btn-sm dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
             Measures <span class="caret"/>
         </button>
-        <ul class="dropdown-menu o_graph_measures_list">
+        <ul class="dropdown-menu o_graph_measures_list" role="menu">
             <li t-foreach="measures" t-as="measure" t-att-data-field="measure[0]">
-                <a href="#"><t t-esc="measure[1].string"/><t t-if="measure[1].type === 'many2one'"> (count)</t></a>
+                <a role="menuitem" href="#"><t t-esc="measure[1].string"/><t t-if="measure[1].type === 'many2one'"> (count)</t></a>
             </li>
-            <li class="divider"></li>
-            <li data-field="__count__"><a href="#">Count</a></li>
+            <li role="separator" class="divider"></li>
+            <li data-field="__count__"><a role="menuitem" href="#">Count</a></li>
         </ul>
     </div>
-    <div class="btn-group btn-group-sm">
-        <button class="btn btn-default fa fa-bar-chart-o o_graph_button" title="Bar Chart" data-mode="bar"/>
-        <button class="btn btn-default fa fa-line-chart o_graph_button" title="Line Chart" data-mode="line"/>
-        <button class="btn btn-default fa fa-pie-chart o_graph_button" title="Pie Chart" data-mode="pie"/>
+    <div class="btn-group btn-group-sm" role="toolbar" aria-label="Change graph">
+        <button class="btn btn-default fa fa-bar-chart-o o_graph_button" title="Bar Chart" aria-label="Bar Chart" data-mode="bar"/>
+        <button class="btn btn-default fa fa-line-chart o_graph_button" title="Line Chart" aria-label="Line Chart" data-mode="line"/>
+        <button class="btn btn-default fa fa-pie-chart o_graph_button" title="Pie Chart" aria-label="Pie Chart" data-mode="pie"/>
     </div>
 </t>
-<div t-name="GraphView.error" class="o_view_nocontent" >
+<div t-name="GraphView.error" class="o_view_nocontent" role="alert">
     <div class="o_nocontent_help">
         <p class="o_view_nocontent_empty_folder"><t t-esc="title"/></p>
         <p><t t-esc="description"/></p>
@@ -518,51 +518,51 @@
     <div class="o_field_selection"/>
 </div>
 <t t-name="PivotView.buttons">
-    <div class="btn-group btn-group-sm" role="group">
+    <div class="btn-group btn-group-sm" role="toolbar" aria-label="Main actions">
         <button class="btn btn-primary btn-sm dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
             Measures <span class="caret"/>
         </button>
-        <ul class="dropdown-menu o_pivot_measures_list">
+        <ul class="dropdown-menu o_pivot_measures_list" role="menu">
             <li t-foreach="measures" t-as="measure" t-att-data-field="measure[0]">
-                <a href="#"><t t-esc="measure[1].string"/><t t-if="measure[1].type === 'many2one'"> (count)</t></a>
+                <a role="menuitem" href="#"><t t-esc="measure[1].string"/><t t-if="measure[1].type === 'many2one'"> (count)</t></a>
             </li>
-            <li class="divider"></li>
-            <li data-field="__count"><a href="#">Count</a></li>
+            <li role="separator" class="divider"></li>
+            <li data-field="__count"><a role="menuitem" href="#">Count</a></li>
         </ul>
     </div>
-    <div class="btn-group btn-group-sm">
-        <button class="btn btn-default fa fa-expand o_pivot_flip_button" title="Flip axis"/>
-        <button class="btn btn-default fa fa-arrows-alt o_pivot_expand_button" title="Expand all"/>
-        <button class="btn btn-default fa fa-download o_pivot_download" title="Download xls"/>
+    <div class="btn-group btn-group-sm" role="toolbar" aria-label="Pivot settings">
+        <button class="btn btn-default fa fa-expand o_pivot_flip_button" title="Flip axis" aria-label="Flip axis"/>
+        <button class="btn btn-default fa fa-arrows-alt o_pivot_expand_button" title="Expand all" aria-label="Expand all"/>
+        <button class="btn btn-default fa fa-download o_pivot_download" title="Download xls" aria-label="Download xls"/>
     </div>
 </t>
 <t t-name="PivotView.FieldSelection">
     <ul class="dropdown-menu o_pivot_field_menu" role="menu">
         <t t-foreach="fields" t-as="field">
             <t t-if="(field[1].type === 'date') || (field[1].type === 'datetime')">
-                <li t-att-data-field="field[0]" t-attf-class="o_inline_dropdown#{field[2] ? ' disabled' : ''}">
+                <li role="menuitem" aria-haspopup="true" t-att-data-field="field[0]" t-attf-class="o_inline_dropdown#{field[2] ? ' disabled' : ''}">
                     <a href="#" class="o_pivot_field_selection">
                         <t t-esc="field[1].string"/>
                     </a>
-                    <ul class="dropdown-menu">
-                        <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'day'">Day</a></li>
-                        <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'week'">Week</a></li>
-                        <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'month'">Month</a></li>
-                        <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'quarter'">Quarter</a></li>
-                        <li t-att-data-field="field[0]"><a href="#" t-att-data-interval="'year'">Year</a></li>
+                    <ul class="dropdown-menu" role="menu">
+                        <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'day'">Day</a></li>
+                        <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'week'">Week</a></li>
+                        <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'month'">Month</a></li>
+                        <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'quarter'">Quarter</a></li>
+                        <li t-att-data-field="field[0]"><a role="menuitem" href="#" t-att-data-interval="'year'">Year</a></li>
                     </ul>
                 </li>
             </t>
             <t t-else="">
                 <li t-att-data-field="field[0]" t-att-class="(field[2] ? 'disabled' : '')">
-                    <a href="#"><t t-esc="field[1].string"/></a>
+                    <a role="menuitem" href="#"><t t-esc="field[1].string"/></a>
                 </li>
             </t>
         </t>
     </ul>
 </t>
 <div t-name="PivotView.nodata">
-    <div class="o_view_nocontent">
+    <div class="o_view_nocontent" role="alert">
         <div class="o_nocontent_help">
             <p class="o_view_nocontent_empty_folder">
                 No data to display
@@ -575,15 +575,15 @@
 </div>
 
 <t t-name="FormSelection">
-    <div class="btn-group o_selection">
-        <a href="#" data-toggle="dropdown"><span class="o_status"/></a>
+    <div class="btn-group o_selection" aria-atomic="true">
+        <a href="#" data-toggle="dropdown" aria-label="Dropdown menu" title="Dropdown menu"><span class="o_status"/></a>
         <ul class="dropdown-menu state" role="menu">
         </ul>
     </div>
 </t>
 <t t-name="FormSelection.items">
     <li t-foreach="states" t-as="rec" t-att-data-value="rec.name">
-        <a href="#">
+        <a role="menuitem" href="#">
             <span t-att-class="'o_status ' + (rec.state_class &amp;&amp; rec.state_class || '')"/>
             <t t-raw="rec.state_name"/>
         </a>
@@ -591,34 +591,34 @@
 </t>
 <t t-name="FieldDomain.content">
     <div t-if="hasModel" class="o_field_domain_panel">
-        <i class="fa fa-arrow-right"/>
+        <i class="fa fa-arrow-right" role="img" aria-label="Domain" title="Domain"/>
 
         <button t-if="isValid" class="btn btn-xs btn-default o_domain_show_selection_button" type="button">
             <t t-esc="nbRecords"/> record(s)
         </button>
-        <span t-else="" class="text-warning"><i class="fa fa-exclamation-triangle"/> Invalid domain</span>
+        <span t-else="" class="text-warning" role="alert"><i class="fa fa-exclamation-triangle" role="img" aria-label="Warning" title="Warning"/> Invalid domain</span>
 
         <button t-if="inDialogEdit" class="btn btn-xs btn-primary o_field_domain_dialog_button">Edit Domain</button>
     </div>
     <div t-else="">Select a model to add a filter.</div>
 </t>
 <t t-name="DomainNode.ControlPanel">
-    <div t-if="!widget.readonly &amp;&amp; !widget.noControlPanel" class="o_domain_node_control_panel">
-        <button class="btn o_domain_delete_node_button"><i class="fa fa-times"/></button>
-        <button class="btn o_domain_add_node_button"><i class="fa fa-plus-circle"/></button>
-        <button class="btn o_domain_add_node_button" data-branch="1"><i class="fa fa-ellipsis-h"/></button>
+    <div t-if="!widget.readonly &amp;&amp; !widget.noControlPanel" class="o_domain_node_control_panel" role="toolbar" aria-label="Domain node">
+        <button class="btn o_domain_delete_node_button" title="Delete node" aria-label="Delete node"><i class="fa fa-times"/></button>
+        <button class="btn o_domain_add_node_button" title="Add node" aria-label="Add node"><i class="fa fa-plus-circle"/></button>
+        <button class="btn o_domain_add_node_button" title="Add branch" aria-label="Add branch" data-branch="1"><i class="fa fa-ellipsis-h"/></button>
     </div>
 </t>
 <t t-name="DomainTree.OperatorSelector">
-    <div t-if="!widget.readonly" class="btn-group o_domain_tree_operator_selector">
+    <div t-if="!widget.readonly" class="btn-group o_domain_tree_operator_selector" aria-atomic="true">
         <button class="btn btn-xs btn-primary o_domain_tree_operator_caret" data-toggle="dropdown">
             <t t-if="widget.operator === '&amp;'">All</t>
             <t t-if="widget.operator === '|'">Any</t>
             <t t-if="widget.operator === '!'">None</t>
         </button>
-        <ul class="dropdown-menu">
-            <li><a href="#" data-operator="&amp;">All</a></li>
-            <li><a href="#" data-operator="|">Any</a></li>
+        <ul class="dropdown-menu" role="menu">
+            <li><a role="menuitem" href="#" data-operator="&amp;">All</a></li>
+            <li><a role="menuitem" href="#" data-operator="|">Any</a></li>
         </ul>
     </div>
     <strong t-else="">
@@ -627,10 +627,10 @@
         <t t-if="widget.operator === '!'">NONE</t>
     </strong>
 </t>
-<div t-name="DomainSelector" t-attf-class="o_domain_node o_domain_tree o_domain_selector #{widget.readonly ? 'o_read_mode' : 'o_edit_mode'}">
+<div aria-atomic="true" t-name="DomainSelector" t-attf-class="o_domain_node o_domain_tree o_domain_selector #{widget.readonly ? 'o_read_mode' : 'o_edit_mode'}">
     <t t-if="widget.children.length === 0">
         <span>Match <strong>all records</strong></span>
-        <button t-if="!widget.readonly" class="btn btn-xs btn-primary o_domain_add_first_node_button"><i class="fa fa-plus"/> Add filter</button>
+        <button t-if="!widget.readonly" class="btn btn-xs btn-primary o_domain_add_first_node_button"><span class="fa fa-plus"> Add filter</span></button>
     </t>
     <t t-else="">
         <div class="o_domain_tree_header">
@@ -686,12 +686,12 @@
                 <t t-if="_.contains(['in', 'not in'], widget.operator)">
                     <div class="o_domain_leaf_value_input">
                         <span class="badge" t-foreach="widget.displayValue" t-as="val">
-                            <t t-esc="val"/> <i class="o_domain_leaf_value_remove_tag_button fa fa-times" t-att-data-value="val"/>
+                            <t t-esc="val"/> <i class="o_domain_leaf_value_remove_tag_button fa fa-times" t-att-data-value="val" role="img" aria-label="Remove tag" title="Remove tag"/>
                         </span>
                     </div>
                     <div class="o_domain_leaf_value_tags">
                         <input placeholder="Add new value" type="text" class="o_input"/>
-                        <button class="btn btn-xs btn-primary fa fa-plus o_domain_leaf_value_add_tag_button"/>
+                        <button class="btn btn-xs btn-primary fa fa-plus o_domain_leaf_value_add_tag_button" aria-label="Add tag" title="Add tag"/>
                     </div>
                 </t>
                 <t t-else="">
@@ -724,16 +724,16 @@
         </t>
     </div>
 </div>
-<div t-name="ModelFieldSelector" t-attf-class="o_field_selector#{!widget.options.readonly ? ' o_edit_mode o_input' : ''}">
+<div aria-atomic="true" t-name="ModelFieldSelector" t-attf-class="o_field_selector#{!widget.options.readonly ? ' o_edit_mode o_input' : ''}">
     <div class="o_field_selector_value" tabindex="0"/>
     <div class="o_field_selector_controls" tabindex="0">
-        <i class="fa fa-exclamation-triangle o_field_selector_warning hidden" title="Invalid field chain"/>
+        <i role="alert" class="fa fa-exclamation-triangle o_field_selector_warning hidden" title="Invalid field chain" aria-label="Invalid field chain"/>
     </div>
     <div t-if="!widget.options.readonly" class="o_field_selector_popover hidden" tabindex="0">
         <div class="o_field_selector_popover_header text-center">
-            <i class="fa fa-arrow-left o_field_selector_popover_option o_field_selector_prev_page"/>
+            <i class="fa fa-arrow-left o_field_selector_popover_option o_field_selector_prev_page" title="Previous" role="img" aria-label="Previous"/>
             <div class="o_field_selector_title"/>
-            <i class="fa fa-times o_field_selector_popover_option o_field_selector_close"/>
+            <i class="fa fa-times o_field_selector_popover_option o_field_selector_close" title="Close" role="img" aria-label="Close"/>
         </div>
         <div class="o_field_selector_popover_body">
             <ul class="o_field_selector_page"/>
@@ -746,7 +746,7 @@
 <t t-name="ModelFieldSelector.value">
     <t t-foreach="chain" t-as="fieldName">
         <t t-if="fieldName_index > 0">
-            <i class="fa fa-chevron-right"/>
+            <i class="fa fa-chevron-right" role="img" aria-label="Followed by" title="Followed by"/>
         </t>
         <span class="o_field_selector_chain_part">
             <t t-set="fieldInfo" t-value="_.findWhere(pages[fieldName_index], {'name': fieldName})"/>
@@ -761,13 +761,13 @@
             t-att-data-name="line.name">
             <t t-esc="line.string"/>
             <div t-if="debug" class="text-muted o_field_selector_item_title"><t t-esc="line.name"/> (<t t-esc="line.type"/>)</div>
-            <i t-if="relationToFollow" class="fa fa-chevron-right o_field_selector_relation_icon"/>
+            <i t-if="relationToFollow" class="fa fa-chevron-right o_field_selector_relation_icon" role="img" aria-label="Relation to follow" title="Relation to follow"/>
         </li>
     </t>
 </ul>
 <t t-name="web.datepicker">
     <t t-set="placeholder" t-value="widget.getParent().node and widget.getParent().node.attrs.placeholder"/>
-    <div class="o_datepicker">
+    <div class="o_datepicker" aria-atomic="true">
         <input type="text"
             class="o_datepicker_input o_input"
             t-att-name="widget.name"
@@ -786,7 +786,7 @@
         t-att-id="widget.idForLabel"/>
 </t>
 <t t-name="FieldRadio.button">
-    <div class="o_radio_item">
+    <div class="o_radio_item" aria-atomic="true">
         <input type="radio" class="o_radio_input" t-att-checked="checked ? true : undefined"
             t-att-data-value="value[0]" t-att-data-index="index" t-att-id="id"/>
         <label class="o_form_label" t-att-for="id"><t t-esc="value[1]"/></label>
@@ -804,7 +804,7 @@
         <a t-if="!widget.nodeOptions.no_open" class="o_form_uri" href="#"/>
         <span t-if="widget.nodeOptions.no_open"/>
     </t>
-    <div t-if="widget.mode === 'edit'" class="o_field_widget o_field_many2one">
+    <div t-if="widget.mode === 'edit'" class="o_field_widget o_field_many2one" aria-atomic="true">
         <div class="o_input_dropdown">
             <input type="text" class="o_input"
                 t-att-barcode_events="widget.nodeOptions.barcode_events"
@@ -812,9 +812,9 @@
                 t-att-autofocus="widget.attrs.autofocus"
                 t-att-placeholder="widget.attrs.placeholder"
                 t-att-id="widget.idForLabel"/>
-            <span class="o_dropdown_button" draggable="false"/>
+            <a role="button" class="o_dropdown_button" draggable="false"/>
         </div>
-        <button type="button" t-if="!widget.nodeOptions.no_open" class="fa fa-external-link btn btn-default o_external_button" tabindex="-1" draggable="false"/>
+        <button type="button" t-if="!widget.nodeOptions.no_open" class="fa fa-external-link btn btn-default o_external_button" tabindex="-1" draggable="false" aria-label="External link" title="External link"/>
     </div>
 </t>
 <t t-name="FieldReference" t-extend="FieldMany2One">
@@ -828,23 +828,29 @@
 <t t-name="FieldMany2ManyTag">
     <t t-foreach="elements" t-as="el">
         <t t-set="color" t-value="el[colorField] || 0"/>
-        <span t-attf-class="badge dropdown o_tag_color_#{color}" t-att-data-color="color" t-att-data-index="el_index" t-att-data-id="el.id">
-            <span class="o_badge_text"><t t-esc="el.display_name"/></span>
-            <span t-if="!readonly" class="fa fa-times o_delete"/>
-        </span>
+        <t t-set="colornames" t-value="['No color', 'Red', 'Orange', 'Yellow', 'Light blue', 'Dark purple', 'Salmon pink', 'Medium blue', 'Dark blue', 'Fushia', 'Green', 'Purple']"/>
+        <button t-attf-class="badge dropdown o_tag_color_#{color}" t-att-data-color="color" t-att-data-index="el_index" t-att-data-id="el.id" t-attf-title="Tag color: #{colornames[color]}">
+            <span class="o_badge_text"><span role="img" t-attf-aria-label="Tag color: #{colornames[color]}"/><t t-esc="el.display_name"/></span>
+            <a t-if="!readonly" class="fa fa-times o_delete" title="Delete" aria-label="Delete"/>
+        </button>
     </t>
 </t>
 <t t-name="FieldMany2ManyTag.colorpicker">
     <div class="o_colorpicker dropdown-menu tagcolor_dropdown_menu" role="menu">
         <ul>
-            <li t-foreach="11" t-as="color">
-                <a href="#"
-                   t-att-data-id="tag_id"
-                   t-att-data-color="color+1"
-                   t-attf-class="o_tag_color_#{color+1}"/>
-            </li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_1" data-color="1" title="Red" aria-label="Red"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_2" data-color="2" title="Orange" aria-label="Orange"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_3" data-color="3" title="Yellow" aria-label="Yellow"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_4" data-color="4" title="Light blue" aria-label="Light blue"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_5" data-color="5" title="Dark purple" aria-label="Dark purple"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_6" data-color="6" title="Salmon pink" aria-label="Salmon pink"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_7" data-color="7" title="Medium blue" aria-label="Medium blue"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_8" data-color="8" title="Dark blue" aria-label="Dark blue"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_9" data-color="9" title="Fushia" aria-label="Fushia"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_10" data-color="10" title="Green" aria-label="Green"/></li>
+            <li><a role="menuitem" href="#" t-att-data-id="tag_id" class="o_tag_color_11" data-color="11" title="Purple" aria-label="Purple"/></li>
             <li> <!-- checkbox for tag color 0 -->
-                <div class="o_hide_in_kanban"
+                <div role="menuitem" class="o_hide_in_kanban"
                      t-att-data-id="tag_id"
                      t-att-data-color="0">
                     <div class="o_checkbox">
@@ -857,7 +863,7 @@
     </div>
 </t>
 <t t-name="ProgressBar">
-    <div class="o_progressbar">
+    <div class="o_progressbar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
         <div t-if="widget.title" class="o_progressbar_title"><t t-esc="widget.title"/></div><div class="o_progress">
             <div class="o_progressbar_complete"/>
         </div><div class="o_progressbar_value"/>
@@ -887,18 +893,26 @@
     </t>
 </t>
 <t t-name="FieldStatus.content.button">
-    <t t-set="disabled" t-value="!clickable || i.selected"/>
-    <button type="button" t-att-data-value="i.id" t-att-disabled="disabled ? 'disabled' : undefined"
-        t-attf-class="btn btn-sm o_arrow_button btn-#{i.selected ? 'primary' : 'default'}#{disabled ? ' disabled' : ''}">
-        <t t-esc="i.display_name"/>
+    <t t-set="disabled" t-value="!clickable"/>
+    <button type="button" t-att-data-value="i.id" disabled="disabled" title="Current state" aria-pressed="true"
+        class="btn btn-sm o_arrow_button btn-primary disabled" t-if="i.selected" aria-current="step">
+        <t t-esc="i.display_name" role="img" t-attf-aria-label="#{i.display_name} is current state"/>
+    </button>
+    <button type="button" t-att-data-value="i.id" disabled="disabled" title="Not active state" aria-pressed="false"
+        class="btn btn-sm o_arrow_button btn-default disabled" t-if="!i.selected and disabled">
+        <t t-esc="i.display_name" role="img" t-attf-aria-label="#{i.display_name} is not current state"/>
+    </button>
+    <button type="button" t-att-data-value="i.id" title="Not active state, click to change it" aria-pressed="false"
+        class="btn btn-sm o_arrow_button btn-default" t-if="!i.selected and !disabled">
+        <t t-esc="i.display_name" role="img" t-attf-aria-label="Click to change current state to #{i.display_name}"/>
     </button>
 </t>
 <t t-name="FieldBinaryImage">
-    <div class="o_field_image">
+    <div class="o_field_image" aria-atomic="true">
         <t t-if="widget.mode !== 'readonly'">
             <div class="o_form_image_controls">
-                <span class="fa fa-pencil fa-lg pull-left o_select_file_button" title="Edit"/>
-                <span class="fa fa-trash-o fa-lg pull-right o_clear_file_button" title="Clear"/>
+                <button class="fa fa-pencil fa-lg pull-left o_select_file_button" title="Edit" aria-label="Edit"/>
+                <button class="fa fa-trash-o fa-lg pull-right o_clear_file_button" title="Clear" aria-label="Clear"/>
 
                 <span class="o_form_binary_progress">Uploading...</span>
                 <t t-call="HiddenInputFile">
@@ -911,6 +925,7 @@
 </t>
 <t t-name="FieldBinaryImage-img">
     <img class="img img-responsive"
+        alt="Binary file"
         t-att-src='url'
         t-att-border="widget.readonly ? 0 : 1"
         t-att-name="widget.name"/>
@@ -918,7 +933,7 @@
 <t t-name="FieldBinaryFile">
     <a t-if="widget.mode === 'readonly'" href="javascript:void(0)" class="o_form_uri"/>
 
-    <div t-if="widget.mode !== 'readonly'" class="o_field_binary_file">
+    <div t-if="widget.mode !== 'readonly'" class="o_field_binary_file" aria-atomic="true">
         <input type="text" class="o_input"
             readonly="readonly"
             t-att-name="widget.name"
@@ -926,8 +941,8 @@
             t-att-autofocus="widget.attrs.autofocus"/>
 
         <button type="button" class="btn btn-sm btn-primary o_select_file_button" title="Select">Upload your file</button>
-        <button type="button" class="btn btn-sm btn-default fa fa-pencil o_select_file_button" title="Select"/>
-        <button type="button" class="btn btn-sm btn-default fa fa-trash-o o_clear_file_button" title="Clear"/>
+        <button type="button" class="btn btn-sm btn-default fa fa-pencil o_select_file_button" title="Select" aria-label="Select"/>
+        <button type="button" class="btn btn-sm btn-default fa fa-trash-o o_clear_file_button" title="Clear" aria-label="Clear"/>
 
         <span class="o_form_binary_progress">Uploading...</span>
         <t t-call="HiddenInputFile">
@@ -938,7 +953,7 @@
 </t>
 
 <t t-name="HiddenInputFile">
-    <div t-attf-class="o_hidden_input_file #{fileupload_class or ''}" t-att-style="fileupload_style">
+    <div t-attf-class="o_hidden_input_file #{fileupload_class or ''}" t-att-style="fileupload_style" aria-atomic="true">
         <form class="o_form_binary_form" t-att-target="fileupload_id"
               method="post" enctype="multipart/form-data" t-att-action="fileupload_action || '/web/binary/upload'">
             <input type="hidden" name="csrf_token" t-att-value="csrf_token"/>
@@ -953,12 +968,12 @@
 </t>
 
 <t t-name="FieldPdfViewer">
-    <div class="o_field_pdfviewer">
-        <div t-if="widget.mode !== 'readonly'" class="o_form_pdf_controls mt8">
+    <div class="o_field_pdfviewer" aria-atomic="true">
+        <div t-if="widget.mode !== 'readonly'" class="o_form_pdf_controls mt8" role="toolbar" aria-label="PDF controls">
             <span class="o_form_binary_progress">Uploading...</span>
             <button type="button" class="btn btn-sm btn-primary o_select_file_button" title="Select">Upload your file</button>
-            <button class="btn btn-sm btn-default fa fa-pencil o_select_file_button" title="Select" type="button"></button>
-            <button class="btn btn-sm btn-default fa fa-trash-o o_clear_file_button" title="Clear" type="button"></button>
+            <button class="btn btn-sm btn-default fa fa-pencil o_select_file_button" title="Select" aria-label="Select" type="button"></button>
+            <button class="btn btn-sm btn-default fa fa-trash-o o_clear_file_button" title="Clear" aria-label="Clear" type="button"></button>
         </div>
         <iframe class="o_pdfview_iframe o_field_pdfviewer"/>
         <t t-call="HiddenInputPDFFile">
@@ -976,10 +991,10 @@
     </t>
 </t>
 
-<div t-name="FieldBinaryFileUploader" t-attf-class="oe_fileupload #{widget.attrs.class ? widget.attrs.class :''}">
+<div t-name="FieldBinaryFileUploader" t-attf-class="oe_fileupload #{widget.attrs.class ? widget.attrs.class :''}" aria-atomic="true">
     <div class="oe_placeholder_files"/>
     <div t-if="widget.mode !== 'readonly'" class="oe_add">
-        <button class="btn btn-default o_attach"><span class="fa fa-paperclip"/> <t t-esc="widget.string"/></button>
+        <button class="btn btn-default o_attach" title="Attach"><span class="fa fa-paperclip" aria-label="Attach"/> <t t-esc="widget.string"/></button>
         <t t-call="HiddenInputFile">
             <t t-set="fileupload_id" t-value="widget.fileupload_id"/>
             <t t-set="fileupload_action" t-translation="off">/web/binary/upload_attachment</t>
@@ -990,7 +1005,7 @@
         </t>
     </div>
 </div>
-<div t-name="FieldBinaryFileUploader.files" class="oe_attachments">
+<div t-name="FieldBinaryFileUploader.files" class="oe_attachments" aria-atomic="true">
     <t t-if="widget.mode === 'readonly'">
         <div t-foreach="widget.value.data" t-as="file">
             <a target="_blank" t-att-href="widget.metadata[file.id].url" t-attf-title="#{(file.data.name || file.data.filename) + (file.data.date?' \n('+file.data.date+')':'' )}"><t t-raw="file.data.name || file.data.filename"/></a>
@@ -1000,19 +1015,20 @@
         <div t-foreach="widget.value.data" t-as="file" class="oe_attachment">
             <t t-if="!file.data.upload">
                 <div>
-                    <a href="#" class="fa fa-times pull-right oe_delete" title="Delete this file" t-att-data-id="file.data.id"/>
+                    <a href="#" class="fa fa-times pull-right oe_delete" title="Delete this file" aria-label="Delete this file" t-att-data-id="file.data.id"/>
                     <t t-raw="file.data.name || file.data.filename"/>
                 </div>
                 <a class="o_image" target="_blank" t-att-href="widget.metadata[file.id] ? widget.metadata[file.id].url : false"
                    t-att-title="file.data.name"
+                   t-att-aria-label="file.data.name"
                    t-att-data-mimetype="file.data.mimetype"
                    t-attf-data-src="/web/image/#{file.data.id}/100x80"/>
             </t>
         </div>
         <div t-foreach="widget.uploadingFiles" t-as="file" class="oe_attachment">
             <div>Uploading...</div>
-            <a t-att-title="file.name" t-att-name="file.name" class="o_image">
-                <i class="fa fa-spinner fa-spin fa-5x fa-fw"></i>
+            <a t-att-title="file.name" t-att-aria-label="file.name" t-att-name="file.name" class="o_image">
+                <i class="fa fa-spinner fa-spin fa-5x fa-fw" role="img" aria-label="Loading, please wait..." title="Loading, please wait..."></i>
             </a>
             <div><t t-esc="file.name"/></div>
         </div>
@@ -1087,12 +1103,12 @@
 
 
 
-<div t-name="SearchView" class="o_searchview">
-    <span class="o_searchview_more fa" title="Advanced Search..."/>
+<div t-name="SearchView" class="o_searchview" role="search" aria-autocomplete="list">
+    <span class="o_searchview_more fa" title="Advanced Search..." role="img" aria-label="Advanced Search..."/>
     <div class="o_searchview_input_container"/>
 </div>
 <t t-name="SearchViewMobile">
-    <div class="o_searchview">
+    <div class="o_searchview" role="search" aria-autocomplete="list">
         <button class="o_enable_searchview btn btn-sm fa fa-search"/>
         <div class="o_mobile_search o_hidden">
             <div class="o_mobile_search_header">
@@ -1109,14 +1125,14 @@
     </div>
 </t>
 
-<input t-name="SearchView.InputView" type="text" class="o_searchview_input" accesskey="Q" placeholder="Search..."/>
-<div t-name="SearchView.FacetView" tabindex="0" class="o_searchview_facet">
+<input t-name="SearchView.InputView" type="text" class="o_searchview_input" accesskey="Q" placeholder="Search..." role="searchbox" aria-haspopup="true"/>
+<div t-name="SearchView.FacetView" tabindex="0" class="o_searchview_facet" role="img" aria-label="search">
     <span t-if="widget.model.has('icon')" t-att-class="'fa ' + widget.model.get('icon') + ' o_searchview_facet_label'"/>
     <span t-if="!widget.model.has('icon')" class="o_searchview_facet_label">
         <t t-esc="widget.model.get('category')"/>
     </span>
     <div class="o_facet_values"/>
-    <div class="fa fa-sm fa-remove o_facet_remove"/>
+    <div class="fa fa-sm fa-remove o_facet_remove" role="img" aria-label="Remove" title="Remove"/>
 </div>
 <span t-name="SearchView.FacetView.Value">
     <t t-esc="widget.model.get('label') + (widget.intervalLabel ? (': ' + widget.intervalLabel) : '')"/>
@@ -1129,7 +1145,7 @@
     <li t-foreach="widget.filters" t-as="filter" t-if="!filter.visible || filter.visible()"
             t-att-title="filter.attrs.string ? filter.attrs.help : undefined"
             t-att-data-index="filter_index">
-        <a href="#"><t t-esc="filter.attrs.string or filter.attrs.help or filter.attrs.name or 'Ω'"/></a>
+        <a role="menuitem" href="#"><t t-esc="filter.attrs.string or filter.attrs.help or filter.attrs.name or 'Ω'"/></a>
     </li>
 </t>
 <t t-name="SearchView.field">
@@ -1192,7 +1208,7 @@
     </div>
 </t>
 <t t-name="SearchView.extended_search.proposition">
-    <li class="o_filter_condition">
+    <li role="menuitem" class="o_filter_condition">
         <span class="o_or_filter">or</span>
         <span>
             <select class="o_input o_searchview_extended_prop_field">
@@ -1203,7 +1219,7 @@
                     </option>
                 </t>
             </select>
-            <span class="o_searchview_extended_delete_prop fa fa-trash-o"/>
+            <span class="o_searchview_extended_delete_prop fa fa-trash-o" role="img" aria-label="Delete" title="Delete"/>
         </span>
         <select class="o_input o_searchview_extended_prop_op"/>
         <span class="o_searchview_extended_prop_value"/>
@@ -1225,32 +1241,32 @@
 </t>
 
 <div t-name="SearchView.FavoriteMenu" class="btn-group o_dropdown">
-    <button class="o_dropdown_toggler_btn btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false" tabindex="-1">
+    <button class="o_dropdown_toggler_btn btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false" tabindex="-1" aria-label="Favorites" title="Favorites">
         <span class="fa fa-star"/> Favorites <span t-attf-class="#{widget.isMobile ? 'fa fa-chevron-right pull-right mt4' : 'caret'}"/>
     </button>
     <ul class="dropdown-menu o_favorites_menu" role="menu">
         <li class="divider user_filter"/>
         <li class="divider shared_filter"/>
         <li class="o_save_search o_closed_menu">
-            <a href="#">Save current search</a>
+            <a role="menuitem" href="#">Save current search</a>
         </li>
-        <li class="o_save_name">
+        <li role="menuitem" class="o_save_name">
             <input type="text"></input>
         </li>
-        <li class="o_save_name">
+        <li role="menuitem" class="o_save_name">
             <span><div class="o_checkbox"><input type="checkbox"/><span/></div> Use by default</span>
         </li>
-        <li class="o_save_name">
-            <span><div class="o_checkbox"><input type="checkbox"/><span/></div> Share with all users </span><span class="fa fa-users"/>
+        <li role="menuitem" class="o_save_name">
+            <span><div class="o_checkbox"><input type="checkbox"/><span/></div> Share with all users </span><span class="fa fa-users" role="img" aria-label="Users" title="Users"/>
         </li>
         <li class="o_save_name">
-            <button type="button" class="btn btn-primary btn-sm">Save</button>
+            <button role="menuitem" type="button" class="btn btn-primary btn-sm">Save</button>
         </li>
     </ul>
 </div>
 
 <div t-name="ExportDialog" class="o_export">
-    <p>
+    <p role="status">
         This wizard will export all data that matches the current search criteria to a CSV file.
         You can export all data or only the fields that can be reimported after modification.
     </p>
@@ -1293,16 +1309,16 @@
     </div>
 </div>
 <p t-name="Export.DomainMessage">
-    <strong t-if="!record.ids_to_export">Please pay attention that all records matching your search filter will be exported. Not only the selected ids.</strong>
-    <strong t-if="record.ids_to_export">Please note that only the selected ids will be exported.</strong>
+    <strong t-if="!record.ids_to_export" role="alert">Please pay attention that all records matching your search filter will be exported. Not only the selected ids.</strong>
+    <strong t-if="record.ids_to_export" role="alert">Please note that only the selected ids will be exported.</strong>
 </p>
 <div t-name="Export.TreeItems"
     t-foreach="fields" t-as="field"
     t-att-data-id="field.id"
     class="o_export_tree_item"
-    tabindex="-1"> <!-- tabindex make the div focusable -->
+    tabindex="-1" role="treeitem"> <!-- tabindex make the div focusable -->
     <span t-if="field.children &amp;&amp; (field.id).split('/').length != 3"
-          class="o_expand_parent fa fa-plus"/>
+          class="o_expand_parent fa fa-plus" role="img" aria-label="Expand parents" title="Expand parents"/>
     <span class="o_tree_column" t-att-title="debug and field.id or None"><t t-esc="field.string"/></span>
 </div>
 <t t-name="Export.SaveList">
@@ -1322,14 +1338,14 @@
 <t t-name="Throbber">
     <div>
         <div class="oe_blockui_spin" style="height: 50px">
-            <img src="/web/static/src/img/spin.png" style="animation: fa-spin 1s infinite steps(12);"/>
+            <img src="/web/static/src/img/spin.png" style="animation: fa-spin 1s infinite steps(12);" alt="Loading..."/>
         </div>
         <br />
         <div class="oe_throbber_message" style="color:white"></div>
     </div>
 </t>
 <t t-name="Spinner">
-    <div class="o_spinner"><i class="fa fa-spinner fa-spin"/></div>
+    <div class="o_spinner"><i class="fa fa-spinner fa-spin" role="img" aria-label="Loading, please wait..." title="Loading, please wait..."/></div>
 </t>
 <t t-name="M2ODialog">
     <div>
@@ -1338,7 +1354,7 @@
     </div>
 </t>
 <t t-name="FieldMany2ManyCheckBoxes">
-    <div>
+    <div aria-atomic="true">
         <div t-foreach="widget.m2mValues" t-as="m2m_value">
             <t t-set="id_for_label" t-value="'o_many2many_checkbox_' + _.uniqueId()"/>
             <div class="o_checkbox">
@@ -1354,7 +1370,7 @@
     <span class="o_stat_text"><t t-esc="text"/></span>
 </t>
 <t t-name="toggle_button">
-    <button type="button" class="o_icon_button" t-att-title="widget.string" t-att-aria-label="widget.string">
+    <button type="button" class="o_icon_button" t-att-title="widget.string" t-att-aria-label="widget.string" aria-pressed="false">
         <i class="fa fa-circle" t-att-title="widget.string"/>
     </button>
 </t>
@@ -1363,14 +1379,14 @@
     <span class="o_pager_counter">
         <span class="o_pager_value"></span> / <span class="o_pager_limit"></span>
     </span>
-    <span class="btn-group btn-group-sm">
+    <span class="btn-group btn-group-sm" aria-atomic="true">
         <!-- accesskeys not wanted in X2Many widgets -->
         <t t-if="widget.options.withAccessKey">
             <t t-set="att_prev" t-value="{'accesskey': 'p'}" />
             <t t-set="att_next" t-value="{'accesskey': 'n'}" />
         </t>
-        <button type="button" class="fa fa-chevron-left btn btn-icon o_pager_previous" t-att="att_prev" aria-label="Previous" tabindex="-1"/>
-        <button type="button" class="fa fa-chevron-right btn btn-icon o_pager_next" t-att="att_next" aria-label="Next" tabindex="-1"/>
+        <button type="button" class="fa fa-chevron-left btn btn-icon o_pager_previous" t-att="att_prev" aria-label="Previous" title="Next" tabindex="-1"/>
+        <button type="button" class="fa fa-chevron-right btn btn-icon o_pager_next" t-att="att_next" aria-label="Next" title="Next" tabindex="-1"/>
     </span>
 </div>
 
@@ -1381,15 +1397,15 @@
 </t>
 
 <t t-name="notification-box">
-    <div t-attf-class="o_notification_box mb0 alert alert-dismissible alert-{{type}}" role="alert">
+    <div t-attf-class="o_notification_box mb0 alert alert-dismissible alert-{{type}}" role="alertdialog">
         <button type="button" class="close" data-dismiss="alert" aria-label="Close">
-            <span aria-hidden="true" class="fa fa-times"></span>
+            <span class="fa fa-times"></span>
         </button>
     </div>
 </t>
 
 <t t-name="translation-alert">
-    <div>
+    <div role="alertdialog">
         Please update translations of :
         <t t-foreach="fields" t-as="field">
             <strong><a class="oe_field_translate" t-att-name="field.name" href="#"><t t-esc="field.string"/><t t-if="!field_last">, </t></a></strong>
@@ -1400,7 +1416,7 @@
 <t t-name="UserMenu">
     <li class="o_user_menu">
         <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" href="#">
-            <img class="img-circle oe_topbar_avatar" t-att-src="_s + '/web/static/src/img/user_menu_avatar.png'"/>
+            <img class="img-circle oe_topbar_avatar" t-att-src="_s + '/web/static/src/img/user_menu_avatar.png'" alt="Avatar"/>
             <span class="oe_topbar_name"/>
         </a>
         <ul class="dropdown-menu" role="menu">
@@ -1410,17 +1426,17 @@
 </t>
 
 <t t-name="UserMenu.Actions">
-    <li><a href="#" data-menu="documentation">Documentation</a></li>
-    <li><a href="#" data-menu="support">Support</a></li>
-    <li class="divider"/>
-    <li><a href="#" data-menu="settings">Preferences</a></li>
-    <li><a href="#" data-menu="account">My Odoo.com account</a></li>
-    <li><a href="#" data-menu="logout">Log out</a></li>
+    <li><a role="menuitem" href="#" data-menu="documentation">Documentation</a></li>
+    <li><a role="menuitem" href="#" data-menu="support">Support</a></li>
+    <li role="separator" class="divider"/>
+    <li><a role="menuitem" href="#" data-menu="settings">Preferences</a></li>
+    <li><a role="menuitem" href="#" data-menu="account">My Odoo.com account</a></li>
+    <li><a role="menuitem" href="#" data-menu="logout">Log out</a></li>
 </t>
 
 <t t-name="SwitchCompanyMenu">
     <li class="o_switch_company_menu">
-        <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" href="#">
+        <a class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false" href="#" aria-label="Dropdown menu" title="Dropdown menu">
             <span t-attf-class="#{widget.isMobile ? 'fa fa-building-o' : 'oe_topbar_name'}"/> <span class="caret"/>
         </a>
         <ul class="dropdown-menu" role="menu"/>
@@ -1428,35 +1444,35 @@
 </t>
 
 <t t-name="EnterpriseUpgrade">
-    <div class="row">
+    <div class="row" role="status">
         <div class="col-xs-6">
             Get this feature and much more with Odoo Enterprise!
             <ul class="list-unstyled">
-                <li><i class="fa fa-check"></i> Access to all Enterprise Apps</li>
-                <li><i class="fa fa-check"></i> New design</li>
-                <li><i class="fa fa-check"></i> Mobile support</li>
-                <li><i class="fa fa-check"></i> Upgrade to future versions</li>
-                <li><i class="fa fa-check"></i> Bugfixes guarantee</li>
-                <li><a href="http://www.odoo.com/editions" target="_blank"><i class="fa fa-plus"></i> And more</a></li>
+                <li><span class="fa fa-check"> Access to all Enterprise Apps</span></li>
+                <li><span class="fa fa-check"> New design</span></li>
+                <li><span class="fa fa-check"> Mobile support</span></li>
+                <li><span class="fa fa-check"> Upgrade to future versions</span></li>
+                <li><span class="fa fa-check"> Bugfixes guarantee</span></li>
+                <li><a href="http://www.odoo.com/editions" target="_blank"><span class="fa fa-plus"> And more</span></a></li>
             </ul>
         </div>
         <div class="col-xs-6">
-            <img class="img-responsive" t-att-src='_s + "/web/static/src/img/enterprise_upgrade.jpg"' draggable="false"/>
+            <img class="img-responsive" t-att-src='_s + "/web/static/src/img/enterprise_upgrade.jpg"' draggable="false" alt="Upgrade to enterprise"/>
         </div>
     </div>
 </t>
 
 <t t-name="BaseSetting.Tabs">
     <t t-foreach="tabItems" t-as="tab">
-        <div class="tab" t-attf-data-key="#{tab.key}">
+        <div class="tab" t-attf-data-key="#{tab.key}" role="tab">
             <div class="icon hidden-xs" t-attf-style="background : url('#{imgurl}') no-repeat center;background-size:contain;"/> <span class="app_name"><t t-esc="tab.string"/></span>
         </div>
     </t>
 </t>
 
 <t t-name="BaseSetting.SearchHeader">
-    <div class="settingSearchHeader o_hidden">
-        <img class="icon" t-att-src="imgurl"></img>
+    <div class="settingSearchHeader o_hidden" role="search">
+        <img class="icon" t-att-src="imgurl" alt="Search"></img>
         <span class="appName"><t t-esc="string"/></span>
     </div>
 </t>
diff --git a/addons/web/static/src/xml/dialog.xml b/addons/web/static/src/xml/dialog.xml
index 68c3ab3f2e3113689a6b7da8a805533ebc5989b7..eb1a67ee98d7bde7511d39fa98bef4456cd6ae91 100644
--- a/addons/web/static/src/xml/dialog.xml
+++ b/addons/web/static/src/xml/dialog.xml
@@ -3,15 +3,15 @@
 
 <!-- These templates are accessible in backend and frontend -->
 
-<div t-name="Dialog" t-attf-class="modal#{technical ? ' o_technical_modal' : ''}" tabindex="-1" data-backdrop="static" role="dialog" aria-hidden="true" t-att-id="_.uniqueId('modal_')">
+<div role="dialog" t-name="Dialog" t-attf-class="modal#{technical ? ' o_technical_modal' : ''}" tabindex="-1" data-backdrop="static" t-att-id="_.uniqueId('modal_')">
     <div class="modal-dialog">
         <div class="modal-content">
-            <div class="modal-header">
-                <button type="button" class="close" data-dismiss="modal" aria-hidden="true" tabindex="-1">×</button>
+            <header class="modal-header">
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close" tabindex="-1">×</button>
                 <h4 class="modal-title"><t t-raw="title"/><span class="o_subtitle text-muted small"><t t-esc="subtitle"/></span></h4>
-            </div>
-            <div class="modal-body"/>
-            <div class="modal-footer"/>
+            </header>
+            <main class="modal-body"/>
+            <footer class="modal-footer"/>
         </div>
     </div>
 </div>
diff --git a/addons/web/static/src/xml/kanban.xml b/addons/web/static/src/xml/kanban.xml
index 67514072c95ef6f5063175e23278562566e1bc68..4b62f52cda85fa20055564b17c5e89915b58cd91 100644
--- a/addons/web/static/src/xml/kanban.xml
+++ b/addons/web/static/src/xml/kanban.xml
@@ -9,18 +9,19 @@
 </t>
 
 <t t-name="KanbanView.Group">
-    <div t-attf-class="o_kanban_group#{widget.data_records.length == 0 ? ' o_kanban_no_records' : ''}" t-att-data-id="widget.id or widget.db_id">
+    <div t-attf-class="o_kanban_group#{widget.data_records.length == 0 ? ' o_kanban_no_records' : ''}" t-att-data-id="widget.id or widget.db_id"
+        role="feed" t-attf-aria-labelledby="kanban_header_#{widget.id or widget.db_id}">
         <div class="o_kanban_header">
             <div class="o_kanban_header_title" t-att-title="widget.data_records.length + ' records'" data-delay="500">
-                <span class="o_column_title"><t t-esc="widget.title"/></span>
-                <span class="o_column_unfold"><i class="fa fa-arrows-h"/></span>
+                <span t-attf-id="#kanban_header_#{widget.id or widget.db_id}" class="o_column_title"><t t-esc="widget.title"/></span>
+                <span class="o_column_unfold"><i class="fa fa-arrows-h" role="img" aria-label="Unfold" title="Unfold"/></span>
                 <span class="o_kanban_config dropdown">
-                    <a class="dropdown-toggle" data-toggle="dropdown" href="#"><i class="fa fa-gear"/></a>
+                    <a class="dropdown-toggle" data-toggle="dropdown" href="#"><i class="fa fa-gear" role="img" aria-label="Settings" title="Settings"/></a>
                     <ul class="dropdown-menu" role="menu">
-                        <li><a class="o_kanban_toggle_fold" href="#">Fold</a></li>
+                        <li><a role="menuitem" class="o_kanban_toggle_fold" href="#">Fold</a></li>
                         <t t-if="widget.grouped_by_m2o">
-                            <li t-if="widget.editable and widget.id"><a class="o_column_edit" href="#">Edit Stage</a></li>
-                            <li t-if="widget.deletable and widget.id"><a class="o_column_delete" href="#">Delete</a></li>
+                            <li t-if="widget.editable and widget.id"><a role="menuitem" class="o_column_edit" href="#">Edit Stage</a></li>
+                            <li t-if="widget.deletable and widget.id"><a role="menuitem" class="o_column_delete" href="#">Delete</a></li>
                         </t>
                         <t t-if="widget.has_active_field">
                             <li><a class="o_column_archive_records" href="#">Archive All</a></li>
@@ -28,7 +29,7 @@
                         </t>
                     </ul>
                 </span>
-                <span t-if="widget.quick_create" class="o_kanban_quick_add"><i class="fa fa-plus"/></span>
+                <span t-if="widget.quick_create" class="o_kanban_quick_add"><i class="fa fa-plus" role="img" aria-label="Quick add" title="Quick add"/></span>
             </div>
         </div>
         <div t-if="widget.remaining > 0" class="o_kanban_load_more">
@@ -44,7 +45,7 @@
 <t t-name="KanbanView.ColumnQuickCreate">
     <div class="o_column_quick_create">
         <div class="o_quick_create_folded">
-            <span class="o_kanban_add_column"><i class="fa fa-plus"/></span>
+            <span class="o_kanban_add_column"><i class="fa fa-plus" role="img" aria-label="Add column" title="Add column"/></span>
             <span class="o_kanban_title">Add a Column</span>
         </div>
         <div class="o_quick_create_unfolded">
@@ -56,7 +57,7 @@
                     </span>
                 </div>
                 <t t-if="widget.examples">
-                    <span class="btn-link o_kanban_examples">Examples</span>
+                    <a href="#" role="button" class="btn-link o_kanban_examples">Examples</a>
                 </t>
                 <span class="o_discard_msg text-muted pull-right">Esc to discard</span>
             </div>
@@ -76,9 +77,18 @@
 </t>
 
 <t t-name="KanbanColorPicker">
-    <li t-foreach="12" t-as="color">
-        <a href="#" t-att-data-color="color_index" t-attf-class="oe_kanban_color_#{color}"/>
-    </li>
+    <li><a role="menuitem" href="#" data-color="0" class="oe_kanban_color_0" title="No color" aria-label="No color"/></li>
+    <li><a role="menuitem" href="#" data-color="1" class="oe_kanban_color_1" title="Red" aria-label="Red"/></li>
+    <li><a role="menuitem" href="#" data-color="2" class="oe_kanban_color_2" title="Orange" aria-label="Orange"/></li>
+    <li><a role="menuitem" href="#" data-color="3" class="oe_kanban_color_3" title="Yellow" aria-label="Yellow"/></li>
+    <li><a role="menuitem" href="#" data-color="4" class="oe_kanban_color_4" title="Light blue" aria-label="Light blue"/></li>
+    <li><a role="menuitem" href="#" data-color="5" class="oe_kanban_color_5" title="Dark purple" aria-label="Dark purple"/></li>
+    <li><a role="menuitem" href="#" data-color="6" class="oe_kanban_color_6" title="Salmon pink" aria-label="Salmon pink"/></li>
+    <li><a role="menuitem" href="#" data-color="7" class="oe_kanban_color_7" title="Medium blue" aria-label="Medium blue"/></li>
+    <li><a role="menuitem" href="#" data-color="8" class="oe_kanban_color_8" title="Dark blue" aria-label="Dark blue"/></li>
+    <li><a role="menuitem" href="#" data-color="9" class="oe_kanban_color_9" title="Fushia" aria-label="Fushia"/></li>
+    <li><a role="menuitem" href="#" data-color="10" class="oe_kanban_color_10" title="Green" aria-label="Green"/></li>
+    <li><a role="menuitem" href="#" data-color="11" class="oe_kanban_color_11" title="Purple" aria-label="Purple"/></li>
 </t>
 
 <t t-name="GraphCustomTooltip">
@@ -103,6 +113,7 @@
                 <div t-attf-class="progress-bar transition-off bg-#{color_value}-full#{count ? ' o_bar_has_records' : ''}#{widget.activeFilter ? ' active progress-bar-striped' : ''}"
                     t-att-data-filter="color"
                     t-attf-data-original-title="#{count} #{color}"
+                    aria-valuemin="0" aria-valuemax="100" t-att-aria-valuenow="count*100" role="progressbar"
                     t-attf-style="width: #{count ? (count * 100 / widget.groupCount) : 0}%;"/>
             </t>
         </div>
@@ -116,7 +127,7 @@
         <ul class="nav nav-pills nav-stacked">
             <t t-foreach="examples" t-as="example">
                 <li t-att-class="example_index == 0 and 'active' or None">
-                    <a data-toggle="tab" t-attf-href="#example_#{example_index}"> <t t-esc="example.name"/> </a>
+                    <a t-attf-aria-controls="example_#{example_index}" data-toggle="tab" role="tab" t-attf-href="#example_#{example_index}"> <t t-esc="example.name"/> </a>
                 </li>
             </t>
         </ul>
@@ -124,7 +135,7 @@
     <div class="o_kanban_examples_dialog_content">
         <div class="tab-content">
             <t t-foreach="examples" t-as="example">
-                <div t-attf-id="example_#{example_index}" t-attf-class="tab-pane fade #{example_index == 0 and 'active in' or ''}">
+                <div role="tabpanel" t-attf-id="example_#{example_index}" t-attf-class="tab-pane fade #{example_index == 0 and 'active in' or ''}">
                     <div t-if="example.description" class="o_kanban_examples_description">
                         <t t-raw="example.description"/> <!-- description is supposed to be properly escaped -->
                     </div>
@@ -147,7 +158,7 @@
     <div class="o_kanban_examples_ghost">
         <div class="o_ghost_content"/>
         <div class="o_ghost_content o_ghost_tag"/>
-        <img class="pull-right o_ghost_avatar" src="/base/static/img/avatar.png"/>
+        <img class="pull-right o_ghost_avatar" src="/base/static/img/avatar.png" alt="Avatar"/>
     </div>
 </t>
 
diff --git a/addons/web/static/src/xml/web_calendar.xml b/addons/web/static/src/xml/web_calendar.xml
index 7f65ed93a08e791b3df73930d295fb88a3c92656..41f772cd52ff438d84700d07f3c8cc754f6cbe5d 100644
--- a/addons/web/static/src/xml/web_calendar.xml
+++ b/addons/web/static/src/xml/web_calendar.xml
@@ -1,7 +1,7 @@
 <template>
     <div t-name="CalendarView" class="o_calendar_container">
         <div class="o_calendar_view">
-            <div class="o_calendar_buttons"/>
+            <div class="o_calendar_buttons" role="toolbar" aria-label="Calendar toolbar"/>
             <div class="o_calendar_widget" />
         </div>
         <div class="o_calendar_sidebar_container hidden-xs">
@@ -44,17 +44,17 @@
                         <input type="checkbox" name="selection" t-att-checked="(filter.active ? true : undefined)"/><span/>
                     </div>
                     <t t-if="filter.value == 'all'">
-                        <span><i class="fa fa-users fa-fw o_cal_avatar"/></span>
+                        <span><i class="fa fa-users fa-fw o_cal_avatar" role="img" aria-label="Avatar" title="Avatar"/></span>
                     </t>
                     <t t-if="widget.avatar_field &amp;&amp; (filter.value != 'all')">
-                        <img t-attf-src="/web/image/#{widget.avatar_model}/#{filter.value}/#{widget.avatar_field}" class="o_cal_avatar"/>
+                        <img t-attf-src="/web/image/#{widget.avatar_model}/#{filter.value}/#{widget.avatar_field}" class="o_cal_avatar" alt="Avatar"/>
                     </t>
                     <t t-set="color" t-value="widget.getColor(filter.color_index)"/>
                     <span t-if="typeof color === 'number'" t-attf-class="color_filter o_underline_color_#{widget.getColor(filter.color_index)}"><t t-esc="filter.label"/></span>
                     <span t-elif="color" t-attf-style="border-bottom: 4px solid #{color};"><t t-esc="filter.label"/></span>
                     <span t-else=""><t t-esc="filter.label"/></span>
                     <t t-if="filter.id">
-                        <span class="o_remove fa fa-times" title="Remove this favorite from the list"/>
+                        <span class="o_remove fa fa-times" title="Remove this favorite from the list" role="img" aria-label="Remove this favorite from the list"/>
                    </t>
                 </div>
             </div>
@@ -64,9 +64,9 @@
     <t t-name="CalendarView.buttons">
         <div class="o_calendar_buttons">
             <t t-if="!isMobile">
-                <button class="o_calendar_button_prev btn btn-sm btn-primary"><span class="fa fa-arrow-left"/></button>
+                <button class="o_calendar_button_prev btn btn-sm btn-primary" aria-label="Previous" title="Previous"><span class="fa fa-arrow-left"/></button>
                 <button class="o_calendar_button_today btn btn-sm btn-primary">Today</button>
-                <button class="o_calendar_button_next btn btn-sm btn-primary"><span class="fa fa-arrow-right"/></button>
+                <button class="o_calendar_button_next btn btn-sm btn-primary" aria-label="Next" title="Next"><span class="fa fa-arrow-right"/></button>
             </t>
             <div class="btn-group btn-group-sm">
                 <button type="button" class="o_calendar_button_day btn btn-sm btn-default">Day</button>
@@ -78,15 +78,15 @@
 
     <t t-name="CalendarView.TodayButtonMobile">
         <span class="fa-stack o_calendar_button_today">
-            <i class="fa fa-calendar-o fa-stack-2x"></i>
+            <i class="fa fa-calendar-o fa-stack-2x" role="img" aria-label="Today" title="Today"></i>
             <strong class="o_calendar_text fa-stack-1x"><t t-esc="moment().date()"/></strong>
         </span>
     </t>
 
-    <div t-name="CalendarView.quick_create" class="o_calendar_quick_create">
+    <main t-name="CalendarView.quick_create" class="o_calendar_quick_create">
         <div class="form-group">
             <label for='name' class='control-label'>Summary:</label>
             <input type='text' name='name' class="o_input" t-att-value="widget.dataTemplate.name or None"/>
         </div>
-    </div>
+    </main>
 </template>
diff --git a/addons/web/static/tests/chrome/action_manager_tests.js b/addons/web/static/tests/chrome/action_manager_tests.js
index b0a90173363444abc9731f6505e977f829e90f65..07febe832343d1a4e45a0af94c98d3d0c7de8e81 100644
--- a/addons/web/static/tests/chrome/action_manager_tests.js
+++ b/addons/web/static/tests/chrome/action_manager_tests.js
@@ -2624,12 +2624,12 @@ QUnit.module('ActionManager', {
         // go back to kanban view
         $('.o_control_panel .breadcrumb li:first a').click();
 
-        assert.strictEqual($('.modal .modal-body').text(),
+        assert.strictEqual($('main.modal-body:first').text(),
             "The record has been modified, your changes will be discarded. Do you want to proceed?",
             "should display a modal dialog to confirm discard action");
 
         // cancel
-        $('.modal .modal-footer button.btn-default').click();
+        $('footer.modal-footer button.btn-default').click();
 
         assert.strictEqual(actionManager.$('.o_form_view').length, 1,
             "should still be in form view");
@@ -2638,7 +2638,7 @@ QUnit.module('ActionManager', {
         $('.o_control_panel .breadcrumb li:first a').click();
 
         // confirm discard
-        $('.modal .modal-footer button.btn-primary').click();
+        $('footer.modal-footer button.btn-primary').click();
 
         assert.strictEqual(actionManager.$('.o_form_view').length, 0,
             "should no longer be in form view");
@@ -3001,8 +3001,8 @@ QUnit.module('ActionManager', {
 
         assert.strictEqual($('.o_technical_modal .o_form_view').length, 1,
             "should have rendered a form view in a modal");
-        assert.ok($('.o_technical_modal .modal-body').hasClass('o_act_window'),
-            "modal-body element should have classname 'o_act_window'");
+        assert.ok($('.o_technical_modal main').hasClass('o_act_window'),
+            "dialog main element should have classname 'o_act_window'");
         assert.ok($('.o_technical_modal .o_form_view').hasClass('o_form_editable'),
             "form view should be in edit mode");
 
@@ -3032,11 +3032,11 @@ QUnit.module('ActionManager', {
         });
         actionManager.doAction(5);
 
-        assert.strictEqual($('.o_technical_modal .modal-body button.infooter').length, 0,
+        assert.strictEqual($('.o_technical_modal main button.infooter').length, 0,
             "the button should not be in the body");
-        assert.strictEqual($('.o_technical_modal .modal-footer button.infooter').length, 1,
+        assert.strictEqual($('.o_technical_modal footer button.infooter').length, 1,
             "the button should be in the footer");
-        assert.strictEqual($('.o_technical_modal .modal-footer button').length, 1,
+        assert.strictEqual($('.o_technical_modal footer button').length, 1,
             "the modal footer should only contain one button");
 
         actionManager.destroy();
@@ -3066,7 +3066,7 @@ QUnit.module('ActionManager', {
             type: 'ir.actions.client',
         });
 
-        assert.strictEqual($('.modal .o_test').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_test').length, 1,
             "should have rendered the client action in a dialog");
         assert.verifySteps(['on_attach_callback']);
 
diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js
index 9cda103eedd3224d702cbdb2d0f8e652ea2b58a8..e285626f7637ff8e3588939cf06d3878f3a61a51 100644
--- a/addons/web/static/tests/fields/basic_fields_tests.js
+++ b/addons/web/static/tests/fields/basic_fields_tests.js
@@ -1842,7 +1842,7 @@ QUnit.module('basic_fields', {
 
         // Actual flow: click on an element of the m2m to get its form view
         form.$('tbody td:contains(gold)').click();
-        assert.strictEqual($('.modal-dialog').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             'The modal should have opened');
         assert.verifySteps([
             "The view's image should have been fetched",
@@ -2570,7 +2570,7 @@ QUnit.module('basic_fields', {
 
         // switch to form view
         form.$('.o_field_widget[name=p] .o_data_row').click();
-        assert.strictEqual($('.modal .o_field_date[name=datetime]').text(), '02/07/2017',
+        assert.strictEqual($('[role="dialog"] .o_field_date[name=datetime]').text(), '02/07/2017',
             'the datetime (date widget) should be correctly displayed in form view');
 
         form.destroy();
@@ -2614,7 +2614,7 @@ QUnit.module('basic_fields', {
 
         // switch to form view
         form.$('.o_field_widget[name=p] .o_data_row').click();
-        assert.strictEqual($('.modal .o_field_date[name=datetime]').text(), '02/08/2017',
+        assert.strictEqual($('[role="dialog"] .o_field_date[name=datetime]').text(), '02/08/2017',
             'the datetime (date widget) should be correctly displayed in form view');
 
         form.destroy();
@@ -4602,13 +4602,13 @@ QUnit.module('basic_fields', {
 
         // open the selection
         form.$(".o_domain_show_selection_button").click();
-        assert.strictEqual($('.modal .o_list_view .o_data_row').length, 2,
+        assert.strictEqual($('[role="dialog"] .o_list_view .o_data_row').length, 2,
             "should have open a list view with 2 records in a dialog");
 
         // click on a record -> should not open the record
         // we don't actually check that it doesn't open the record because even
         // if it tries to, it will crash as we don't define an arch in this test
-        $('.modal .o_list_view .o_data_row:first .o_data_cell').click();
+        $('[role="dialog"] .o_list_view .o_data_row:first .o_data_cell').click();
 
         form.destroy();
     });
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 9b42c5188910d0a49d8bccbd8a6b97d3bf864727..95b12e9137ddf2d6ab58a420f916e60eab2b422f 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -206,7 +206,7 @@ QUnit.module('relational_fields', {
 
         form.$('.o_external_button').click(); // click on the external button (should do an RPC)
 
-        assert.strictEqual($('.modal .modal-title').text().trim(), 'Open: custom label',
+        assert.strictEqual($('[role="dialog"] .modal-title').text().trim(), 'Open: custom label',
                         "dialog title should display the custom string label");
 
         // TODO: test that we can edit the record in the dialog, and that the value is correctly
@@ -246,7 +246,7 @@ QUnit.module('relational_fields', {
         // click on the external button (should do an RPC)
         form.$('.o_external_button').click();
         // save and close modal
-        $('.modal .modal-footer .btn-primary:first').click();
+        $('footer.modal-footer .btn-primary:first').click();
         // save form
         form.$buttons.find('.o_form_button_save').click();
         // click next on pager
@@ -315,10 +315,10 @@ QUnit.module('relational_fields', {
         // click on the external button (should do an RPC)
         form.$('.o_external_button').click();
 
-        $('.modal input[name="foo"]').val('brandon').trigger('input');
+        $('[role="dialog"] input[name="foo"]').val('brandon').trigger('input');
 
         // save and close modal
-        $('.modal .modal-footer .btn-primary:first').click();
+        $('footer.modal-footer .btn-primary:first').click();
         // save form
         form.$buttons.find('.o_form_button_save').click();
         // click next on pager
@@ -372,7 +372,7 @@ QUnit.module('relational_fields', {
         assert.strictEqual(form.$('button.o_external_button:visible').length, 1,
             "should still have an open record button");
         form.$('input.o_input').trigger('focusout');
-        assert.strictEqual($('.modal button:contains(Create and edit)').length, 0,
+        assert.strictEqual($('[role="dialog"] button:contains(Create and edit)').length, 0,
             "there should not be a quick create modal");
 
         form.destroy();
@@ -471,10 +471,10 @@ QUnit.module('relational_fields', {
         // open the many2one in form view and change something
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_external_button').click();
-        $('.modal-body input[name="other_field"]').val('wood').trigger('input');
+        $('main.modal-body input[name="other_field"]').val('wood').trigger('input');
 
         // save the modal and make sure an onchange is triggered
-        $('.modal .modal-footer .btn-primary').first().click();
+        $('footer.modal-footer .btn-primary').first().click();
         assert.verifySteps(['read', 'get_formview_id', 'load_views', 'read', 'write', 'onchange', 'read']);
 
         // save the main record, and check that no extra rpcs are done (record
@@ -572,20 +572,20 @@ QUnit.module('relational_fields', {
         form.$('.o_field_many2one input').click();
         // click on 'Search More' (mouseenter required by ui-autocomplete)
         $dropdown.find('.o_m2o_dropdown_option:contains(Search)').mouseenter().click();
-        assert.ok($('.modal .o_list_view').length, "should have opened a list view in a modal");
-        assert.ok(!$('.modal .o_list_view .o_list_record_selector').length,
+        assert.ok($('[role="dialog"] .o_list_view').length, "should have opened a list view in a modal");
+        assert.ok(!$('[role="dialog"] .o_list_view .o_list_record_selector').length,
             "there should be no record selector in the list view");
-        assert.ok(!$('.modal .modal-footer .o_select_button').length,
+        assert.ok(!$('footer.modal-footer .o_select_button').length,
             "there should be no 'Select' button in the footer");
-        assert.ok($('.modal tbody tr').length > 10, "list should contain more than 10 records");
+        assert.ok($('[role="dialog"] tbody tr').length > 10, "list should contain more than 10 records");
         // filter the list using the searchview
-        $('.modal .o_searchview_input').trigger({type: 'keypress', which: 80}); // P
-        $('.modal .o_searchview_input').trigger({type: 'keydown', which: 13}); // enter
-        assert.strictEqual($('.modal tbody tr').length, 10,
+        $('[role="dialog"] .o_searchview_input').trigger({type: 'keypress', which: 80}); // P
+        $('[role="dialog"] .o_searchview_input').trigger({type: 'keydown', which: 13}); // enter
+        assert.strictEqual($('[role="dialog"] tbody tr').length, 10,
             "list should be restricted to records containing a P (10 records)");
         // choose a record
-        $('.modal tbody tr:contains(Partner 20)').click(); // choose record 'Partner 20'
-        assert.ok(!$('.modal').length, "should have closed the modal");
+        $('[role="dialog"] tbody tr:contains(Partner 20)').click(); // choose record 'Partner 20'
+        assert.ok(!$('[role="dialog"]').length, "should have closed the modal");
         assert.ok(!$dropdown.is(':visible'), 'should have closed the dropdown');
         assert.strictEqual(form.$('.o_field_many2one input').val(), 'Partner 20',
                     'value of the m2o should have been correctly updated');
@@ -1690,7 +1690,7 @@ QUnit.module('relational_fields', {
             form.$('.o_data_cell').click();
             form.$('.o_external_button').click();
 
-            var $modal = $('.modal-dialog');
+            var $modal = $('[role="dialog"]');
             assert.equal($modal.length, 1,
                 'There should be 1 modal opened');
 
@@ -1702,7 +1702,7 @@ QUnit.module('relational_fields', {
                                   {position: 'top'});
 
             // Saving the modal and then the original model
-            $modal.find('.modal-footer .btn-primary').click();
+            $modal.find('footer.modal-footer .btn-primary').click();
             form.$buttons.find('.o_form_button_save').click();
 
             assert.verifySteps(['onchange sequence', 'partner_type write']);
@@ -1900,7 +1900,7 @@ QUnit.module('relational_fields', {
         form.$('.o_field_many2one input').focus();
         form.$('.o_field_many2one input').val('new partner').trigger('keyup').trigger('focusout');
 
-        $('.modal .modal-footer .btn-primary').first().click();
+        $('footer.modal-footer .btn-primary').first().click();
 
         form.destroy();
     });
@@ -1928,14 +1928,14 @@ QUnit.module('relational_fields', {
 
         // cancel the many2one creation with Cancel button
         form.$('.o_field_many2one input').focus().val('new product').trigger('keyup').trigger('blur');
-        assert.strictEqual($('.modal').length, 1, "there should be one opened modal");
-        $('.modal .modal-footer .btn:contains(Cancel)').click();
+        assert.strictEqual($('[role="dialog"]').length, 1, "there should be one opened modal");
+        $('footer.modal-footer .btn:contains(Cancel)').click();
         assert.strictEqual(form.$('.o_field_many2one input').val(), "",
             'the many2one should not set a value as its creation has been cancelled (with Cancel button)');
 
         // cancel the many2one creation with Close button
         form.$('.o_field_many2one input').focus().val('new product').trigger('keyup').trigger('blur');
-        $('.modal .modal-header button').click();
+        $('header.modal-header button').click();
         assert.strictEqual(form.$('.o_field_many2one input').val(), "",
             'the many2one should not set a value as its creation has been cancelled (with Close button)');
 
@@ -1944,16 +1944,16 @@ QUnit.module('relational_fields', {
         form.$('.o_field_many2one input').autocomplete('widget').find('a').first().click();
         assert.strictEqual(form.$('input').val(), "xphone", "should have selected xphone");
         form.$('.o_field_many2one input').focus().val('new product').trigger('keyup').trigger('blur');
-        assert.strictEqual($('.modal').length, 1, "there should be one opened modal");
-        $('.modal .modal-footer .btn:contains(Cancel)').click();
+        assert.strictEqual($('[role="dialog"]').length, 1, "there should be one opened modal");
+        $('footer.modal-footer .btn:contains(Cancel)').click();
         assert.strictEqual(form.$('.o_field_many2one input').val(), "xphone",
             'should have restored the many2one with its previous selected value (xphone)');
 
         // confirm the many2one creation
         form.$('.o_field_many2one input').focus();
         form.$('.o_field_many2one input').val('new partner').trigger('keyup').trigger('blur');
-        $('.modal .modal-footer .btn-primary').click();
-        assert.strictEqual($('.modal .o_form_view').length, 1,
+        $('footer.modal-footer .btn-primary').click();
+        assert.strictEqual($('[role="dialog"] .o_form_view').length, 1,
             'a new modal should be opened and contain a form view');
 
         form.destroy();
@@ -1976,7 +1976,7 @@ QUnit.module('relational_fields', {
         form.$('.o_field_many2one input').focus();
         form.$('.o_field_many2one input').val('new partner').trigger('keyup').trigger('focusout');
 
-        assert.strictEqual($('.modal').length, 0, "should not display the create modal");
+        assert.strictEqual($('[role="dialog"]').length, 0, "should not display the create modal");
         form.destroy();
     });
 
@@ -2019,14 +2019,14 @@ QUnit.module('relational_fields', {
             "there should be an external button displayed");
 
         form.$('.o_field_many2one .o_external_button').click();
-        assert.strictEqual($('.modal .o_form_view.o_form_readonly').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_form_view.o_form_readonly').length, 1,
             "there should be a readonly form view opened");
 
-        $('.modal .o_form_button_cancel').click();
+        $('[role="dialog"] .o_form_button_cancel').click();
 
         form.$('.o_field_many2one input').val('new product').trigger('keyup').trigger('focusout');
 
-        assert.strictEqual($('.modal').length, 0, "should not display the create modal");
+        assert.strictEqual($('[role="dialog"]').length, 0, "should not display the create modal");
         form.destroy();
     });
 
@@ -2143,10 +2143,10 @@ QUnit.module('relational_fields', {
             }));
             concurrency.delay(0).then(function() {
                 $input.blur();
-                assert.strictEqual($('.modal').length, 1,
+                assert.strictEqual($('[role="dialog"]').length, 1,
                     "should have one modal in body");
                 // Check that discarding clears $input
-                $('.modal .o_form_button_cancel').click();
+                $('[role="dialog"] .o_form_button_cancel').click();
                 assert.strictEqual($input.val(), '',
                     "the field should be empty");
                 form.destroy();
@@ -2202,7 +2202,7 @@ QUnit.module('relational_fields', {
                 which: $.ui.keyCode.ENTER,
                 keyCode: $.ui.keyCode.ENTER,
             }));
-            assert.strictEqual($('div.modal').length, 0, "should not have any modal in DOM");
+            assert.strictEqual($('[role="dialog"]').length, 0, "should not have any modal in DOM");
             assert.verifySteps(['name_search', 'onchange', 'write', 'read']);
             list.destroy();
             relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY = M2O_DELAY;
@@ -2258,7 +2258,7 @@ QUnit.module('relational_fields', {
                 keyCode: $.ui.keyCode.ENTER,
             }));
             def.resolve();
-            assert.strictEqual($('div.modal').length, 0, "should not have any modal in DOM");
+            assert.strictEqual($('[role="dialog"]').length, 0, "should not have any modal in DOM");
             assert.verifySteps(['name_search', 'onchange', 'write', 'read']);
             list.destroy();
             relationalFields.FieldMany2One.prototype.AUTOCOMPLETE_DELAY = M2O_DELAY;
@@ -2409,15 +2409,15 @@ QUnit.module('relational_fields', {
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_data_row td:contains(first record)').click();
         form.$('.o_external_button').click();
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "should have one modal in body");
 
         // Changing the 'trululu' value
-        $('.modal input[name="display_name"]').val('test').trigger('input');
-        $('.modal button.btn-primary').click();
+        $('[role="dialog"] input[name="display_name"]').val('test').trigger('input');
+        $('[role="dialog"] button.btn-primary').click();
 
         // Test whether the value has changed
-        assert.strictEqual($('.modal').length, 0,
+        assert.strictEqual($('[role="dialog"]').length, 0,
             "the modal should be closed");
         assert.equal(form.$('.o_data_cell:contains(test)').text(), 'test',
             "the partner name should have been updated to 'test'");
@@ -2504,7 +2504,7 @@ QUnit.module('relational_fields', {
         form.$buttons.find('.btn.btn-primary.btn-sm.o_form_button_edit').click();
         form.$('.o_field_x2many_list_row_add a').click();
 
-        var $modal = $('.modal-dialog.modal-lg');
+        var $modal = $('.modal-lg');
 
         assert.equal($modal.length, 1,
             'There should be one modal');
@@ -2532,7 +2532,7 @@ QUnit.module('relational_fields', {
         // Third round: re-add 1 records
         form.$('.o_field_x2many_list_row_add a').click();
 
-        $modal = $('.modal-dialog.modal-lg');
+        $modal = $('.modal-lg');
 
         assert.equal($modal.length, 1,
             'There should be one modal');
@@ -3370,7 +3370,7 @@ QUnit.module('relational_fields', {
         assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "blurp#21#22#23#24#25#26#27#28#29",
             "should display the records in order with the changes");
 
-        $('.modal .modal-footer button:first').click();
+        $('footer.modal-footer button:first').click();
 
         assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "#20#21#22#23#24#25#26#27#28#29",
             "should cancel changes and display the records in order");
@@ -3402,7 +3402,7 @@ QUnit.module('relational_fields', {
         assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "#20#39#40#41#42#43#44#45#46#47",
             "should display the records in order after resequence");
 
-        $('.modal .modal-footer button:first').click();
+        $('footer.modal-footer button:first').click();
 
         assert.equal(form.$('.o_field_one2many td[class="o_data_cell"]').text(), "#20#21#22#23#24#25#26#27#28#29",
             "should cancel changes and display the records in order");
@@ -3750,62 +3750,62 @@ QUnit.module('relational_fields', {
         // in its relation
         form.$('.o_data_row').click();
 
-        assert.strictEqual($('.modal').length, 1, "should have opened a dialog");
-        assert.strictEqual($('.modal .o_data_row').length, 0,
+        assert.strictEqual($('[role="dialog"]').length, 1, "should have opened a dialog");
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 0,
             "there should be no record in the one2many in the dialog");
 
         // add a many2many subrecord
-        $('.modal .o_field_x2many_list_row_add a').click();
+        $('[role="dialog"] .o_field_x2many_list_row_add a').click();
 
-        assert.strictEqual($('.modal').length, 2,
+        assert.strictEqual($('[role="dialog"]').length, 2,
             "should have opened a second dialog");
 
         // select a many2many subrecord
-        $('.modal:nth(1) .o_list_view .o_data_cell:first').click();
+        $('[role="dialog"]:nth(1) .o_list_view .o_data_cell:first').click();
 
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "second dialog should be closed");
-        assert.strictEqual($('.modal .o_data_row').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 1,
             "there should be one record in the one2many in the dialog");
-        assert.notOk($('.modal .o_x2m_control_panel .o_cp_pager div').is(':visible'),
+        assert.notOk($('[role="dialog"] .o_x2m_control_panel .o_cp_pager div').is(':visible'),
             'm2m pager should be hidden');
 
         // click on 'Save & Close'
-        $('.modal .modal-footer .btn-primary:first').click();
+        $('footer.modal-footer .btn-primary:first').click();
 
-        assert.strictEqual($('.modal').length, 0, "dialog should be closed");
+        assert.strictEqual($('[role="dialog"]').length, 0, "dialog should be closed");
 
         // reopen o2m record, and another m2m subrecord in its relation, but
         // discard the changes
         form.$('.o_data_row').click();
 
-        assert.strictEqual($('.modal').length, 1, "should have opened a dialog");
-        assert.strictEqual($('.modal .o_data_row').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1, "should have opened a dialog");
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 1,
             "there should be one record in the one2many in the dialog");
 
         // add another m2m subrecord
-        $('.modal .o_field_x2many_list_row_add a').click();
+        $('[role="dialog"] .o_field_x2many_list_row_add a').click();
 
-        assert.strictEqual($('.modal').length, 2,
+        assert.strictEqual($('[role="dialog"]').length, 2,
             "should have opened a second dialog");
 
-        $('.modal:nth(1) .o_list_view .o_data_cell:first').click();
+        $('[role="dialog"]:nth(1) .o_list_view .o_data_cell:first').click();
 
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "second dialog should be closed");
-        assert.strictEqual($('.modal .o_data_row').length, 2,
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 2,
             "there should be two records in the one2many in the dialog");
 
         // click on 'Discard'
-        $('.modal .modal-footer .btn-default').click();
+        $('footer.modal-footer .btn-default').click();
 
-        assert.strictEqual($('.modal').length, 0, "dialog should be closed");
+        assert.strictEqual($('[role="dialog"]').length, 0, "dialog should be closed");
 
         // reopen o2m record to check that second changes have properly been discarded
         form.$('.o_data_row').click();
 
-        assert.strictEqual($('.modal').length, 1, "should have opened a dialog");
-        assert.strictEqual($('.modal .o_data_row').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1, "should have opened a dialog");
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 1,
             "there should be one record in the one2many in the dialog");
 
         form.destroy();
@@ -4158,8 +4158,8 @@ QUnit.module('relational_fields', {
         checkRead = true;
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o-kanban-button-new').click();
-        $('.modal input').val('new record').trigger('input');
-        $('.modal .modal-footer .btn-primary:first').click(); // save and close
+        $('[role="dialog"] input').val('new record').trigger('input');
+        $('footer.modal-footer .btn-primary:first').click(); // save and close
         // checks
         assert.strictEqual(readIDs, undefined, "should not have read any record");
         assert.strictEqual(form.$('span:contains(new record)').length, 0,
@@ -4195,8 +4195,8 @@ QUnit.module('relational_fields', {
         readIDs = undefined;
         // add and delete a record in page 1
         form.$('.o-kanban-button-new').click();
-        $('.modal input').val('new record page 1').trigger('input');
-        $('.modal .modal-footer .btn-primary:first').click(); // save and close
+        $('[role="dialog"] input').val('new record page 1').trigger('input');
+        $('footer.modal-footer .btn-primary:first').click(); // save and close
         assert.strictEqual(form.$('.o_kanban_record:first span:contains(relational record 11)').length,
             1, 'first record should be the one with id 11 (next checks rely on that)');
         form.$('.delete_icon:first').click();
@@ -4210,8 +4210,8 @@ QUnit.module('relational_fields', {
         readIDs = undefined;
         form.$('.delete_icon:first').click();
         form.$('.o-kanban-button-new').click();
-        $('.modal input').val('new record page 2').trigger('input');
-        $('.modal .modal-footer .btn-primary:first').click(); // save and close
+        $('[role="dialog"] input').val('new record page 2').trigger('input');
+        $('footer.modal-footer .btn-primary:first').click(); // save and close
         assert.strictEqual(readIDs, undefined, "should not have read any record");
         // checks
         assert.strictEqual(form.$('.o_kanban_record:not(".o_kanban_ghost")').length, 5,
@@ -4255,13 +4255,13 @@ QUnit.module('relational_fields', {
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_field_x2many_list_row_add a').click();
         $('input[name="turtle_int"]').val('5').trigger('input');
-        $('.modal-footer button.btn-primary').first().click();
+        $('footer.modal-footer button.btn-primary').first().click();
         assert.strictEqual(form.$('tbody tr:eq(1) td.o_data_cell').text(), '5',
             'should display 5 in the foo field');
         form.$('tbody tr:eq(1) td.o_data_cell').click();
 
         $('input[name="turtle_int"]').val('3').trigger('input');
-        $('.modal-footer button.btn-primary').first().click();
+        $('footer.modal-footer button.btn-primary').first().click();
         assert.strictEqual(form.$('tbody tr:eq(1) td.o_data_cell').text(), '3',
             'should now display 3 in the foo field');
         form.destroy();
@@ -4358,7 +4358,7 @@ QUnit.module('relational_fields', {
         form.$buttons.find('.o_form_button_cancel').click();
         assert.strictEqual(form.$('.o_field_one2many tbody td').first().text(), 'new value',
             "changes shouldn't have been discarded yet, waiting for user confirmation");
-        $('.modal .modal-footer .btn-primary').click();
+        $('footer.modal-footer .btn-primary').click();
         assert.strictEqual(form.$('.o_field_one2many tbody td').first().text(), 'relational record 1',
             "display name of first record in o2m list should be 'relational record 1'");
 
@@ -4557,15 +4557,15 @@ QUnit.module('relational_fields', {
         // edit existing subrecord
         form.$('.oe_kanban_global_click').click();
 
-        $('.modal .o_form_view input').val('new name').trigger('input');
-        $('.modal .modal-footer .btn-primary').click(); // save
+        $('[role="dialog"] .o_form_view input').val('new name').trigger('input');
+        $('footer.modal-footer .btn-primary').click(); // save
         assert.strictEqual(form.$('.o_kanban_record span:first').text(), 'new name',
             'value of subrecord should have been updated');
 
         // create a new subrecord
         form.$('.o-kanban-button-new').click();
-        $('.modal .o_form_view input').val('new subrecord 1').trigger('input');
-        $('.modal .modal-footer .btn-primary').click(); // save and close
+        $('[role="dialog"] .o_form_view input').val('new subrecord 1').trigger('input');
+        $('footer.modal-footer .btn-primary').click(); // save and close
         assert.strictEqual(form.$('.o_kanban_record:not(.o_kanban_ghost)').length, 2,
             'should contain 2 records');
         assert.strictEqual(form.$('.o_kanban_record:nth(1) span').text(), 'new subrecord 1',
@@ -4573,10 +4573,10 @@ QUnit.module('relational_fields', {
 
         // create two new subrecords
         form.$('.o-kanban-button-new').click();
-        $('.modal .o_form_view input').val('new subrecord 2').trigger('input');
-        $('.modal .modal-footer .btn-primary:nth(1)').click(); // save and new
-        $('.modal .o_form_view input').val('new subrecord 3').trigger('input');
-        $('.modal .modal-footer .btn-primary').click(); // save and close
+        $('[role="dialog"] .o_form_view input').val('new subrecord 2').trigger('input');
+        $('footer.modal-footer .btn-primary:nth(1)').click(); // save and new
+        $('[role="dialog"] .o_form_view input').val('new subrecord 3').trigger('input');
+        $('footer.modal-footer .btn-primary').click(); // save and close
         assert.strictEqual(form.$('.o_kanban_record:not(.o_kanban_ghost)').length, 4,
             'should contain 4 records');
 
@@ -4742,8 +4742,8 @@ QUnit.module('relational_fields', {
         // edit existing subrecord
         form.$('.o_list_view tbody tr:first() td:eq(1)').click();
 
-        $('.modal .o_form_view input').val('new name').trigger('input');
-        $('.modal .modal-footer .btn-primary').click(); // save
+        $('[role="dialog"] .o_form_view input').val('new name').trigger('input');
+        $('footer.modal-footer .btn-primary').click(); // save
         assert.strictEqual(form.$('.o_list_view tbody td:first()').text(), 'new name',
             'value of subrecord should have been updated');
         assert.strictEqual(nbWrite, 0, "should not have write anything in DB");
@@ -4789,9 +4789,9 @@ QUnit.module('relational_fields', {
             '"Add an item" link should not be available in readonly');
 
         form.$('.o_list_view tbody td:first()').click();
-        assert.ok($('.modal .o_form_readonly').length,
+        assert.ok($('[role="dialog"] .o_form_readonly').length,
             'in readonly, clicking on a subrecord should open it in readonly in a dialog');
-        $('.modal .o_form_button_cancel').click(); // close the dialog
+        $('[role="dialog"] .o_form_button_cancel').click(); // close the dialog
 
         form.$buttons.find('.o_form_button_edit').click();
 
@@ -4800,7 +4800,7 @@ QUnit.module('relational_fields', {
 
         // edit existing subrecord
         form.$('.o_list_view tbody td:first()').click();
-        assert.strictEqual($('.modal').length, 0,
+        assert.strictEqual($('[role="dialog"]').length, 0,
             'in edit, clicking on a subrecord should not open a dialog');
         assert.ok(form.$('.o_list_view tbody tr:first()').hasClass('o_selected_row'),
             'first row should be in edition');
@@ -4898,7 +4898,7 @@ QUnit.module('relational_fields', {
 
         // cancel the edition
         form.$buttons.find('.o_form_button_cancel').click();
-        $('.modal-footer button.btn-primary').first().click();
+        $('footer.modal-footer button.btn-primary').first().click();
         assert.strictEqual(form.$('tr.o_data_row').length, 1,
             "should have 1 data rows");
 
@@ -5054,7 +5054,7 @@ QUnit.module('relational_fields', {
         form.$buttons.find('.o_form_button_cancel').click();
 
         // confirm the discard operation
-        $('.modal .modal-footer .btn-primary').click(); // click on confirm
+        $('footer.modal-footer .btn-primary').click(); // click on confirm
 
         assert.strictEqual(form.$('.o_cp_pager').text().trim(), '1-3 / 4',
             "pager should still be visible");
@@ -5129,7 +5129,7 @@ QUnit.module('relational_fields', {
             "pager should still display the correct total");
 
         // click on cancel
-        $('.modal .modal-footer .btn-default').click(); // click on cancel
+        $('footer.modal-footer .btn-default').click(); // click on cancel
 
         assert.strictEqual(form.$('.o_cp_pager').text().trim(), '1-3 / 4',
             "pager should again display the correct total");
@@ -5169,7 +5169,7 @@ QUnit.module('relational_fields', {
 
         // discard
         form.$buttons.find('.o_form_button_cancel').click();
-        $('.modal .modal-footer .btn-primary').click();
+        $('footer.modal-footer .btn-primary').click();
 
         assert.strictEqual(form.$('tr.o_data_row').length, 1,
             "should have 1 data row");
@@ -5216,17 +5216,17 @@ QUnit.module('relational_fields', {
 
         // click elsewhere,
         form.$('label.o_form_label').click();
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             'a confirmation model should be opened');
 
         // click on cancel, the line should still be selected
-        $('.modal .modal-footer button.btn-default').click();
+        $('footer.modal-footer button.btn-default').click();
         assert.strictEqual(form.$('tr.o_data_row.o_selected_row').length, 1,
             "should still have 1 selected data row");
 
         // click elsewhere, and click on ok (on the confirmation dialog)
         form.$('label.o_form_label').click();
-        $('.modal .modal-footer button.btn-primary').click();
+        $('footer.modal-footer button.btn-primary').click();
         assert.strictEqual(form.$('tr.o_data_row').length, 0,
             "should have 0 data rows (invalid line has been discarded");
 
@@ -5427,17 +5427,17 @@ QUnit.module('relational_fields', {
         });
 
         form.$('.o_field_x2many_list_row_add a').click();
-        $('.modal .o_field_x2many_list_row_add a').click();
+        $('[role="dialog"] .o_field_x2many_list_row_add a').click();
 
-        assert.strictEqual($('.modal .o_data_row.o_selected_row').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_data_row.o_selected_row').length, 1,
             "there should be a row in edition in the dialog");
 
         // trigger keydown ESCAPE in the edited row
-        $('.modal .o_data_cell input').trigger({type: 'keydown', which: $.ui.keyCode.ESCAPE});
+        $('[role="dialog"] .o_data_cell input').trigger({type: 'keydown', which: $.ui.keyCode.ESCAPE});
 
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "dialog should still be open");
-        assert.strictEqual($('.modal .o_data_row').length, 0,
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 0,
             "the row should have been removed");
 
         form.destroy();
@@ -6042,8 +6042,8 @@ QUnit.module('relational_fields', {
 
         // click to create a subrecord
         form.$('tbody td.o_field_x2many_list_row_add a').click();
-        $('.modal input').val('new record').trigger('input');
-        $('.modal .modal-footer button:eq(0)').click(); // save and close
+        $('[role="dialog"] input').val('new record').trigger('input');
+        $('footer.modal-footer button:eq(0)').click(); // save and close
 
         assert.ok(!form.$('.o_x2m_control_panel .o_cp_pager div').is(':visible'),
             'o2m pager should be hidden');
@@ -6098,14 +6098,14 @@ QUnit.module('relational_fields', {
 
         form.$('tbody td.o_field_x2many_list_row_add a').click();
 
-        $('.modal .o_field_many2one input').click();
+        $('[role="dialog"] .o_field_many2one input').click();
 
-        var $dropdown = $('.modal .o_field_many2one input').autocomplete('widget');
+        var $dropdown = $('[role="dialog"] .o_field_many2one input').autocomplete('widget');
 
         $dropdown.find('li:eq(1) a').mouseenter();
         $dropdown.find('li:eq(1) a').click();
 
-        $('.modal .modal-footer button:eq(0)').click(); // save and close
+        $('footer.modal-footer button:eq(0)').click(); // save and close
 
         assert.strictEqual(form.$('tbody td:contains(xpad)').length, 1,
             "should display 'xpad' on a td");
@@ -6157,16 +6157,16 @@ QUnit.module('relational_fields', {
         form.$('tbody td.o_field_x2many_list_row_add a').click();
 
         // write in the many2one field, value = 37 (xphone)
-        $('.modal .o_field_many2one input').click();
-        var $dropdown = $('.modal .o_field_many2one input').autocomplete('widget');
+        $('[role="dialog"] .o_field_many2one input').click();
+        var $dropdown = $('[role="dialog"] .o_field_many2one input').autocomplete('widget');
         $dropdown.find('li:eq(0) a').mouseenter();
         $dropdown.find('li:eq(0) a').click();
 
         // write in the integer field
-        $('.modal .modal-body input.o_field_widget').val('123').trigger('input');
+        $('main.modal-body input.o_field_widget').val('123').trigger('input');
 
         // save and close
-        $('.modal .modal-footer button:eq(0)').click();
+        $('footer.modal-footer button:eq(0)').click();
 
         assert.strictEqual(form.$('tbody td:contains(xphone)').length, 1,
             "should display 'xphone' in a td");
@@ -6174,28 +6174,28 @@ QUnit.module('relational_fields', {
         // reopen the record in form view
         form.$('tbody td:contains(xphone)').click();
 
-        assert.strictEqual($('.modal .modal-body input').val(), "xphone",
+        assert.strictEqual($('main.modal-body input').val(), "xphone",
             "should display 'xphone' in an input");
 
-        $('.modal .modal-body input.o_field_widget').val('456').trigger('input');
+        $('main.modal-body input.o_field_widget').val('456').trigger('input');
 
         // discard
-        $('.modal .modal-footer span:contains(Discard)').click();
+        $('footer.modal-footer span:contains(Discard)').click();
 
         // reopen the record in form view
         form.$('tbody td:contains(xphone)').click();
 
-        assert.strictEqual($('.modal .modal-body input.o_field_widget').val(), "123",
+        assert.strictEqual($('main.modal-body input.o_field_widget').val(), "123",
             "should display 123 (previous change has been discarded)");
 
         // write in the many2one field, value = 41 (xpad)
-        $('.modal .o_field_many2one input').click();
-        $dropdown = $('.modal .o_field_many2one input').autocomplete('widget');
+        $('[role="dialog"] .o_field_many2one input').click();
+        $dropdown = $('[role="dialog"] .o_field_many2one input').autocomplete('widget');
         $dropdown.find('li:eq(1) a').mouseenter();
         $dropdown.find('li:eq(1) a').click();
 
         // save and close
-        $('.modal .modal-footer button:eq(0)').click();
+        $('footer.modal-footer button:eq(0)').click();
 
         assert.strictEqual(form.$('tbody td:contains(xpad)').length, 1,
             "should display 'xpad' in a td");
@@ -6245,7 +6245,7 @@ QUnit.module('relational_fields', {
         form.$('tr.o_data_row:eq(0) td:contains(xphone)').click();
 
         // write in the many2one field
-        $('.modal .o_field_many2one input').click();
+        $('[role="dialog"] .o_field_many2one input').click();
 
         form.destroy();
     });
@@ -6513,29 +6513,29 @@ QUnit.module('relational_fields', {
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_field_x2many_list_row_add a').click();
 
-        assert.strictEqual($('.modal .o_data_row').length, 2,
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 2,
             "sould have 2 records in the select view (the last one is not displayed because it is already selected)");
 
-        $('.modal .o_data_row:first .o_list_record_selector input').click();
-        $('.modal .o_select_button').click();
+        $('[role="dialog"] .o_data_row:first .o_list_record_selector input').click();
+        $('[role="dialog"] .o_select_button').click();
         $('.o_form_button_save').click();
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_field_x2many_list_row_add a').click();
 
-        assert.strictEqual($('.modal .o_data_row').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 1,
             "sould have 1 record in the select view");
 
-        $('.modal-footer button:eq(1)').click();
-        $('.modal input.o_field_widget[name="turtle_foo"]').val('tototo').trigger('input');
-        $('.modal input.o_field_widget[name="turtle_int"]').val(50).trigger('input');
-        var $many2one = $('.modal [name="product_id"] input').click();
+        $('footer.modal-footer button:eq(1)').click();
+        $('[role="dialog"] input.o_field_widget[name="turtle_foo"]').val('tototo').trigger('input');
+        $('[role="dialog"] input.o_field_widget[name="turtle_int"]').val(50).trigger('input');
+        var $many2one = $('[role="dialog"] [name="product_id"] input').click();
         var $dropdown = $many2one.autocomplete('widget');
         $dropdown.find('li:first a').mouseenter();
         $dropdown.find('li:first a').click();
 
-        $('.modal-footer button:contains(&):first').click();
+        $('footer.modal-footer button:contains(&):first').click();
 
-        assert.strictEqual($('.modal').length, 0, "sould close the modals");
+        assert.strictEqual($('[role="dialog"]').length, 0, "sould close the modals");
 
         assert.strictEqual(form.$('.o_data_row').length, 3,
             "sould have 3 records in one2many list");
@@ -6593,34 +6593,34 @@ QUnit.module('relational_fields', {
         });
 
         form.$('.o_data_row:first').click();
-        assert.strictEqual($('.modal .modal-title').first().text().trim(), 'Open: one2many turtle field',
+        assert.strictEqual($('[role="dialog"] .modal-title').first().text().trim(), 'Open: one2many turtle field',
             "modal should use the python field string as title");
-        $('.modal .o_form_button_cancel').click();
+        $('[role="dialog"] .o_form_button_cancel').click();
         form.$buttons.find('.o_form_button_edit').click();
 
         // edit the first one2many record
         form.$('.o_data_row:first').click();
-        var $many2one = $('.modal [name="product_id"] input').click();
+        var $many2one = $('[role="dialog"] [name="product_id"] input').click();
         var $dropdown = $many2one.autocomplete('widget');
         $dropdown.find('li:first a').mouseenter();
         $dropdown.find('li:first a').click();
-        $('.modal-footer button:first').click();
+        $('footer.modal-footer button:first').click();
 
         $('.o_form_button_save').click(); // don't save anything because the one2many does not change
 
         // add a one2many record
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_field_x2many_list_row_add a').click();
-        $('.modal .o_data_row:first .o_list_record_selector input').click();
-        $('.modal .o_select_button').click();
+        $('[role="dialog"] .o_data_row:first .o_list_record_selector input').click();
+        $('[role="dialog"] .o_select_button').click();
 
         // edit the second one2many record
         form.$('.o_data_row:eq(1)').click();
-        $many2one = $('.modal [name="product_id"] input').click();
+        $many2one = $('[role="dialog"] [name="product_id"] input').click();
         $dropdown = $many2one.autocomplete('widget');
         $dropdown.find('li:first a').mouseenter();
         $dropdown.find('li:first a').click();
-        $('.modal-footer button:first').click();
+        $('footer.modal-footer button:first').click();
 
         $('.o_form_button_save').click();
 
@@ -6812,10 +6812,10 @@ QUnit.module('relational_fields', {
 
         form.$buttons.find('.o_form_button_edit').click();
         form.$('tbody td.o_field_x2many_list_row_add a').click();
-        $('.modal-footer button.btn-primary').first().click();
+        $('footer.modal-footer button.btn-primary').first().click();
 
-        assert.strictEqual($('.modal').length, 1, "should still have an open modal");
-        assert.strictEqual($('.modal tbody label.o_field_invalid').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1, "should still have an open modal");
+        assert.strictEqual($('[role="dialog"] tbody label.o_field_invalid').length, 1,
             "should have displayed invalid fields");
         form.destroy();
     });
@@ -7011,9 +7011,9 @@ QUnit.module('relational_fields', {
         });
 
         form.$('.o_field_one2many .o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal').length, 1, "form view dialog should be opened");
-        $('.modal-body input[name="model_name"]').val('partner').trigger('input');
-        $('.modal-footer button:first').click();
+        assert.strictEqual($('[role="dialog"]').length, 1, "form view dialog should be opened");
+        $('main.modal-body input[name="model_name"]').val('partner').trigger('input');
+        $('footer.modal-footer button:first').click();
 
         assert.strictEqual(form.$('.o_field_one2many tbody tr:first').text(), "coucouhas changed[]",
             "the onchange should create one new record and remove the existing");
@@ -7112,9 +7112,9 @@ QUnit.module('relational_fields', {
 
         form.$('.o_data_row:first').click();
 
-        assert.strictEqual($('.modal .o_field_widget').text(), "xphone",
+        assert.strictEqual($('[role="dialog"] .o_field_widget').text(), "xphone",
             'should display the form view dialog with the many2one value');
-        $('.modal-footer button').click(); // close the modal
+        $('footer.modal-footer button').click(); // close the modal
 
         form.$buttons.find('.o_form_button_edit').click();
 
@@ -7368,7 +7368,7 @@ QUnit.module('relational_fields', {
 
         form.$('.o_data_row:first').click();
 
-        assert.strictEqual($('.modal .o_field_widget[name="partner_ids"] .o_list_view').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_field_widget[name="partner_ids"] .o_list_view').length, 1,
             'should display many2many list view in the modal');
 
         form.destroy();
@@ -7400,7 +7400,7 @@ QUnit.module('relational_fields', {
 
         form.$('.o_data_row:first').click();
 
-        assert.strictEqual($('.modal .o_field_widget[name="turtle_foo"]').text(), 'blip',
+        assert.strictEqual($('[role="dialog"] .o_field_widget[name="turtle_foo"]').text(), 'blip',
             'should open the modal and display the form field');
 
         form.destroy();
@@ -7449,14 +7449,14 @@ QUnit.module('relational_fields', {
 
         form.$('.o_data_row:first').click(); // edit first record
 
-        var $input = $('.modal .o_field_many2manytags input');
+        var $input = $('[role="dialog"] .o_field_many2manytags input');
         $input.click(); // opens the dropdown
         $input.autocomplete('widget').find('li').click(); // add 'first record'
 
         // add a many2many tag and save
-        $('.modal .o_field_x2many_list_row_add a').click();
-        $('.modal .o_field_widget[name=name]').val('test').trigger('input');
-        $('.modal .modal-footer .btn-primary').click(); // save
+        $('[role="dialog"] .o_field_x2many_list_row_add a').click();
+        $('[role="dialog"] .o_field_widget[name=name]').val('test').trigger('input');
+        $('footer.modal-footer .btn-primary').click(); // save
 
         form.$buttons.find('.o_form_button_save').click();
 
@@ -7510,13 +7510,13 @@ QUnit.module('relational_fields', {
         form.$('.o_external_button').click();
 
         // click on add, to add a new partner in the m2m
-        $('.modal .o_field_x2many_list_row_add a').click();
+        $('[role="dialog"] .o_field_x2many_list_row_add a').click();
 
         // select the partner_type 'gold' (this closes the 2nd modal)
-        $('.modal td:contains(gold)').click();
+        $('[role="dialog"] td:contains(gold)').click();
 
         // confirm the changes in the modal
-        $('.modal .modal-footer .btn-primary').click();
+        $('footer.modal-footer .btn-primary').click();
 
         form.$buttons.find('.o_form_button_save').click();
         form.destroy();
@@ -7585,7 +7585,7 @@ QUnit.module('relational_fields', {
 
         form.$('.o_data_row:first').click();
 
-        assert.strictEqual($('.modal .o_field_widget[name="turtle_foo"]').text(), 'blip',
+        assert.strictEqual($('[role="dialog"] .o_field_widget[name="turtle_foo"]').text(), 'blip',
             'should open the modal and display the form field');
 
         form.destroy();
@@ -8080,7 +8080,7 @@ QUnit.module('relational_fields', {
         // try to add a second line and check that it is correctly waiting
         // for the onchange to return
         form.$('.o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal').length, 0, "no modal should be displayed");
+        assert.strictEqual($('[role="dialog"]').length, 0, "no modal should be displayed");
         assert.strictEqual($('.o_field_invalid').length, 0,
             "no field should be marked as invalid");
         assert.strictEqual(form.$('.o_data_row').length, 1,
@@ -8384,11 +8384,11 @@ QUnit.module('relational_fields', {
 
         form.$('.o_data_row td:first').click(); // open the record
 
-        assert.strictEqual($('.modal .o_field_many2manytags[name="timmy"]').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_field_many2manytags[name="timmy"]').length, 1,
             "timmy should be displayed in the form view");
-        assert.strictEqual($('.modal .o_field_many2manytags[name="timmy"] .badge').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_field_many2manytags[name="timmy"] .badge').length, 1,
             "m2mtags should contain one tag");
-        assert.strictEqual($('.modal .o_field_many2manytags[name="timmy"] .o_badge_text').text(),
+        assert.strictEqual($('[role="dialog"] .o_field_many2manytags[name="timmy"] .o_badge_text').text(),
             'gold', "tag name should have been correctly loaded");
 
         form.destroy();
@@ -8464,10 +8464,10 @@ QUnit.module('relational_fields', {
         });
 
         form.$('.o_field_x2many_list_row_add a').click();
-        $('.modal .o_field_x2many_list_row_add a').click();
-        $('.modal .o_data_cell input').val('new record').trigger('input');
+        $('[role="dialog"] .o_field_x2many_list_row_add a').click();
+        $('[role="dialog"] .o_data_cell input').val('new record').trigger('input');
         checkOnchange = true;
-        $('.modal .modal-footer .btn-primary').click(); // save (should trigger the onchange)
+        $('footer.modal-footer .btn-primary').click(); // save (should trigger the onchange)
 
         form.destroy();
     });
@@ -8788,7 +8788,7 @@ QUnit.module('relational_fields', {
 
         assert.strictEqual(form.$('.o_data_row.o_selected_row').length, 1,
             "line should not have been removed and should still be in edition");
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "a confirmation dialog should be opened");
         assert.ok(form.$('.o_field_widget[name=int_field]').hasClass('o_field_invalid'),
             "should indicate that int_field is invalid");
@@ -8986,9 +8986,9 @@ QUnit.module('relational_fields', {
         // open the new subrecord to check the value of the nested o2m, and to
         // ensure that it will be saved
         form.$('.o_data_cell:first').click();
-        assert.strictEqual($('.modal .o_data_cell').text(), 'test nested',
+        assert.strictEqual($('[role="dialog"] .o_data_cell').text(), 'test nested',
             "should have added the new row to the nested one2many");
-        $('.modal .modal-footer .btn-primary').click();
+        $('footer.modal-footer .btn-primary').click();
 
         form.$buttons.find('.o_form_button_save').click();
 
@@ -9276,26 +9276,26 @@ QUnit.module('relational_fields', {
 
         // add a new record
         form.$('.o_field_x2many_list_row_add a').click();
-        $('.modal .o_field_widget').val('new record').trigger('input');
-        $('.modal .modal-footer .btn-primary:first').click(); // Save & Close
+        $('[role="dialog"] .o_field_widget').val('new record').trigger('input');
+        $('footer.modal-footer .btn-primary:first').click(); // Save & Close
 
         assert.strictEqual(form.$('.o_data_row .o_data_cell').text(), 'new record',
             "should display the new record");
 
         // reopen freshly added record and edit it
         form.$('.o_data_row .o_data_cell').click();
-        $('.modal .o_field_widget').val('new record edited').trigger('input');
+        $('[role="dialog"] .o_field_widget').val('new record edited').trigger('input');
 
         // save it, and choose to directly create another record
-        $('.modal .modal-footer .btn-primary:nth(1)').click(); // Save & New
+        $('footer.modal-footer .btn-primary:nth(1)').click(); // Save & New
 
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "the model should still be open");
-        assert.strictEqual($('.modal .o_field_widget').text(), '',
+        assert.strictEqual($('[role="dialog"] .o_field_widget').text(), '',
             "should have cleared the input");
 
-        $('.modal .o_field_widget').val('another new record').trigger('input');
-        $('.modal .modal-footer .btn-primary:first').click(); // Save & Close
+        $('[role="dialog"] .o_field_widget').val('another new record').trigger('input');
+        $('footer.modal-footer .btn-primary:first').click(); // Save & Close
 
         assert.strictEqual(form.$('.o_data_row .o_data_cell').text(),
             'new record editedanother new record', "should display the two records");
@@ -9461,19 +9461,19 @@ QUnit.module('relational_fields', {
         // edit existing subrecord
         form.$('.oe_kanban_global_click:first()').click();
 
-        $('.modal .o_form_view input').val('new name').trigger('input');
-        $('.modal .modal-footer .btn-primary').click(); // save
+        $('[role="dialog"] .o_form_view input').val('new name').trigger('input');
+        $('footer.modal-footer .btn-primary').click(); // save
         assert.strictEqual(form.$('.o_kanban_record:first() span').text(), 'new name',
             'value of subrecord should have been updated');
 
         // add subrecords
         // -> single select
         form.$('.o_field_many2many .o-kanban-button-new').click();
-        assert.ok($('.modal .o_list_view').length, "should have opened a list view in a modal");
-        assert.strictEqual($('.modal .o_list_view tbody .o_list_record_selector').length, 3,
+        assert.ok($('[role="dialog"] .o_list_view').length, "should have opened a list view in a modal");
+        assert.strictEqual($('[role="dialog"] .o_list_view tbody .o_list_record_selector').length, 3,
             "list view should contain 3 records");
-        $('.modal .o_list_view tbody tr:contains(red)').click(); // select red
-        assert.ok(!$('.modal .o_list_view').length, "should have closed the modal");
+        $('[role="dialog"] .o_list_view tbody tr:contains(red)').click(); // select red
+        assert.ok(!$('[role="dialog"] .o_list_view').length, "should have closed the modal");
         assert.strictEqual(form.$('.o_kanban_record:not(.o_kanban_ghost)').length, 3,
             'kanban should now contain 3 records');
         assert.ok(form.$('.o_kanban_record:contains(red)').length,
@@ -9481,23 +9481,23 @@ QUnit.module('relational_fields', {
 
         // -> multiple select
         form.$('.o_field_many2many .o-kanban-button-new').click();
-        assert.ok($('.modal .o_select_button').prop('disabled'), "select button should be disabled");
-        assert.strictEqual($('.modal .o_list_view tbody .o_list_record_selector').length, 2,
+        assert.ok($('[role="dialog"] .o_select_button').prop('disabled'), "select button should be disabled");
+        assert.strictEqual($('[role="dialog"] .o_list_view tbody .o_list_record_selector').length, 2,
             "list view should contain 2 records");
-        $('.modal .o_list_view thead .o_list_record_selector input').click(); // select all
-        $('.modal .o_select_button').click(); // validate selection
-        assert.ok(!$('.modal .o_select_button').prop('disabled'), "select button should be enabled");
-        assert.ok(!$('.modal .o_list_view').length, "should have closed the modal");
+        $('[role="dialog"] .o_list_view thead .o_list_record_selector input').click(); // select all
+        $('[role="dialog"] .o_select_button').click(); // validate selection
+        assert.ok(!$('[role="dialog"] .o_select_button').prop('disabled'), "select button should be enabled");
+        assert.ok(!$('[role="dialog"] .o_list_view').length, "should have closed the modal");
         assert.strictEqual(form.$('.o_kanban_record:not(.o_kanban_ghost)').length, 5,
             'kanban should now contain 5 records');
         // -> created record
         form.$('.o_field_many2many .o-kanban-button-new').click();
-        $('.modal .modal-footer .btn-primary:nth(1)').click(); // click on 'Create'
-        assert.ok($('.modal .o_form_view.o_form_editable').length,
+        $('footer.modal-footer .btn-primary:nth(1)').click(); // click on 'Create'
+        assert.ok($('[role="dialog"] .o_form_view.o_form_editable').length,
             "should have opened a form view in edit mode, in a modal");
-        $('.modal .o_form_view input').val('A new type').trigger('input');
-        $('.modal:nth(1) .modal-footer .btn-primary:first()').click(); // click on 'Save & Close'
-        assert.ok(!$('.modal').length, "should have closed both modals");
+        $('[role="dialog"] .o_form_view input').val('A new type').trigger('input');
+        $('[role="dialog"]:nth(1) footer .btn-primary:first()').click(); // click on 'Save & Close'
+        assert.ok(!$('[role="dialog"]').length, "should have closed both modals");
         assert.strictEqual(form.$('.o_kanban_record:not(.o_kanban_ghost)').length, 6,
             'kanban should now contain 6 records');
         assert.ok(form.$('.o_kanban_record:contains(A new type)').length,
@@ -9592,7 +9592,7 @@ QUnit.module('relational_fields', {
             'delete icon should be visible in edit');
 
         form.$('.o-kanban-button-new').click(); // click on 'Add'
-        assert.strictEqual($('.modal .modal-footer .btn-primary').length, 1, // only button 'Select'
+        assert.strictEqual($('footer.modal-footer .btn-primary').length, 1, // only button 'Select'
             '"Create" button should not be available in the modal');
 
         form.destroy();
@@ -9655,19 +9655,19 @@ QUnit.module('relational_fields', {
         // edit existing subrecord
         form.$('.o_list_view tbody tr:first()').click();
 
-        $('.modal .o_form_view input').val('new name').trigger('input');
-        $('.modal .modal-footer .btn-primary').click(); // save
+        $('[role="dialog"] .o_form_view input').val('new name').trigger('input');
+        $('footer.modal-footer .btn-primary').click(); // save
         assert.strictEqual(form.$('.o_list_view tbody td:first()').text(), 'new name',
             'value of subrecord should have been updated');
 
         // add new subrecords
         form.$('.o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal .o_list_view').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_list_view').length, 1,
             "a modal should be open");
-        assert.strictEqual($('.modal .o_list_view .o_data_row').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_list_view .o_data_row').length, 1,
             "the list should contain one row");
-        $('.modal .o_list_view .o_data_row').click(); // select a record
-        assert.strictEqual($('.modal .o_list_view').length, 0,
+        $('[role="dialog"] .o_list_view .o_data_row').click(); // select a record
+        assert.strictEqual($('[role="dialog"] .o_list_view').length, 0,
             "the modal should be closed");
         assert.strictEqual(form.$('.o_list_view td.o_list_number').length, 3,
             'should contain 3 subrecords');
@@ -9758,7 +9758,7 @@ QUnit.module('relational_fields', {
 
         // edit existing subrecord
         form.$('.o_list_view tbody td:first()').click();
-        assert.ok(!$('.modal').length,
+        assert.ok(!$('[role="dialog"]').length,
             'in edit, clicking on a subrecord should not open a dialog');
         assert.ok(form.$('.o_list_view tbody tr:first()').hasClass('o_selected_row'),
             'first row should be in edition');
@@ -9776,12 +9776,12 @@ QUnit.module('relational_fields', {
 
         // add new subrecords
         form.$('.o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal .o_list_view').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_list_view').length, 1,
             "a modal should be open");
-        assert.strictEqual($('.modal .o_list_view .o_data_row').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_list_view .o_data_row').length, 1,
             "the list should contain one row");
-        $('.modal .o_list_view .o_data_row').click(); // select a record
-        assert.strictEqual($('.modal .o_list_view').length, 0,
+        $('[role="dialog"] .o_list_view .o_data_row').click(); // select a record
+        assert.strictEqual($('[role="dialog"] .o_list_view').length, 0,
             "the modal should be closed");
         assert.strictEqual(form.$('.o_list_view td.o_list_number').length, 3,
             'should contain 3 subrecords');
@@ -10048,7 +10048,7 @@ QUnit.module('relational_fields', {
         });
 
         form.$('.o_field_x2many_list_row_add a').click();
-        $('.modal .o_data_row:first').click(); // add a first record to the relation
+        $('[role="dialog"] .o_data_row:first').click(); // add a first record to the relation
 
         assert.strictEqual(form.$('.o_data_row').length, 1,
             "the record should have been added to the relation");
@@ -10056,7 +10056,7 @@ QUnit.module('relational_fields', {
             "inner m2m should have been fetched and correctly displayed");
 
         form.$('.o_field_x2many_list_row_add a').click();
-        $('.modal .o_data_row:first').click(); // add a second record to the relation
+        $('[role="dialog"] .o_data_row:first').click(); // add a second record to the relation
 
         assert.strictEqual(form.$('.o_data_row').length, 2,
             "the second record should have been added to the relation");
@@ -10109,13 +10109,13 @@ QUnit.module('relational_fields', {
         });
 
         form.$('.o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal .o_data_row').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 1,
             "should contain only one row (gold)");
 
-        $('.modal .o_searchview_input').trigger({type: 'keypress', which: 115}); // s
-        $('.modal .o_searchview_input').trigger({type: 'keydown', which: 13}); // enter
+        $('[role="dialog"] .o_searchview_input').trigger({type: 'keypress', which: 115}); // s
+        $('[role="dialog"] .o_searchview_input').trigger({type: 'keydown', which: 13}); // enter
 
-        assert.strictEqual($('.modal .o_data_row').length, 0, "should contain no row");
+        assert.strictEqual($('[role="dialog"] .o_data_row').length, 0, "should contain no row");
 
         form.destroy();
     });
@@ -10149,8 +10149,8 @@ QUnit.module('relational_fields', {
         form.$buttons.find('.o_form_button_edit').click();
         form.$('td.o_data_cell:first').click();
 
-        $('.modal-body input[type="checkbox"]').click();
-        $('.modal .modal-footer .btn-primary').first().click();
+        $('main.modal-body input[type="checkbox"]').click();
+        $('footer.modal-footer .btn-primary').first().click();
 
         // there is nothing left to save -> should not do a 'write' RPC
         form.$buttons.find('.o_form_button_save').click();
@@ -10806,9 +10806,9 @@ QUnit.module('relational_fields', {
         assert.strictEqual($input.autocomplete('widget').find('li').length, 3,
             "autocomplete dropdown should have 3 entries (2 values + 'Search and Edit...')");
         $input.autocomplete('widget').find('li:first()').click(); // adds a tag
-        assert.strictEqual(form.$('.o_field_many2manytags[name="timmy"] > span').length, 1,
+        assert.strictEqual(form.$('.o_field_many2manytags[name="timmy"] > button').length, 1,
             "should contain 1 tag");
-        assert.ok(form.$('.o_field_many2manytags[name="timmy"] > span:contains("gold")').length,
+        assert.ok(form.$('.o_field_many2manytags[name="timmy"] > button:contains("gold")').length,
             "should contain newly added tag 'gold'");
 
         form.destroy();
@@ -10841,18 +10841,18 @@ QUnit.module('relational_fields', {
                 return this._super.apply(this, arguments);
             },
         });
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 2,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 2,
             "should contain 2 tags");
-        assert.ok(form.$('span:contains(gold)').length,
+        assert.ok(form.$('button:contains(gold)').length,
             'should have fetched and rendered gold partner tag');
-        assert.ok(form.$('span:contains(silver)').length,
+        assert.ok(form.$('button:contains(silver)').length,
             'should have fetched and rendered silver partner tag');
-        assert.strictEqual(form.$('span:first()').data('color'), 2,
+        assert.strictEqual(form.$('button:first()').data('color'), 2,
             'should have correctly fetched the color');
 
         form.$buttons.find('.o_form_button_edit').click();
 
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 2,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 2,
             "should still contain 2 tags in edit mode");
         assert.ok(form.$('.o_tag_color_2 .o_badge_text:contains(gold)').length,
             'first tag should still contain "gold" and be color 2 in edit mode');
@@ -10867,46 +10867,46 @@ QUnit.module('relational_fields', {
         assert.strictEqual($input.autocomplete('widget').find('li a:contains("red")').length, 1,
             "autocomplete dropdown should contain 'red'");
         $input.autocomplete('widget').find('li').click(); // add 'red'
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 3,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 3,
             "should contain 3 tags");
-        assert.ok(form.$('.o_field_many2manytags > span:contains("red")').length,
+        assert.ok(form.$('.o_field_many2manytags > button:contains("red")').length,
             "should contain newly added tag 'red'");
-        assert.ok(form.$('.o_field_many2manytags > span[data-color=8]:contains("red")').length,
+        assert.ok(form.$('.o_field_many2manytags > button[data-color=8]:contains("red")').length,
             "should have fetched the color of added tag");
 
         // remove tag with id 14
-        form.$('.o_field_many2manytags span[data-id=14] .o_delete').click();
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 2,
+        form.$('.o_field_many2manytags button[data-id=14] .o_delete').click();
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 2,
             "should contain 2 tags");
-        assert.ok(!form.$('.o_field_many2manytags > span:contains("silver")').length,
+        assert.ok(!form.$('.o_field_many2manytags > button:contains("silver")').length,
             "should not contain tag 'silver' anymore");
 
         // save the record (should do the write RPC with the correct commands)
         form.$buttons.find('.o_form_button_save').click();
 
         // checkbox 'Hide in Kanban'
-        $input = form.$('.o_field_many2manytags span[data-id=13]'); // selects 'red' tag
+        $input = form.$('.o_field_many2manytags button[data-id=13]'); // selects 'red' tag
         $input.click(); // opens the colorpicker dropdown
-        assert.ok(form.$('.o_field_many2manytags span[data-id=13] .o_colorpicker .o_checkbox'), "should have a checkbox in the colorpicker dropdown menu");
+        assert.ok(form.$('.o_field_many2manytags button[data-id=13] .o_colorpicker .o_checkbox'), "should have a checkbox in the colorpicker dropdown menu");
 
         $input.click();
-        var $checkBox = form.$('.o_field_many2manytags span[data-id=13] .o_colorpicker .o_checkbox input');
+        var $checkBox = form.$('.o_field_many2manytags button[data-id=13] .o_colorpicker .o_checkbox input');
         assert.notOk($checkBox.is(':checked'), "should have unticked checkbox in colorpicker dropdown menu");
 
         $checkBox.mousedown();
-        $input = form.$('.o_field_many2manytags span[data-id=13]'); // refresh
+        $input = form.$('.o_field_many2manytags button[data-id=13]'); // refresh
         assert.equal($input.data('color'), "0", "should become transparent when toggling on checkbox");
 
         $input.click();
-        $checkBox = form.$('.o_field_many2manytags span[data-id=13] .o_colorpicker .o_checkbox input'); // refresh
+        $checkBox = form.$('.o_field_many2manytags button[data-id=13] .o_colorpicker .o_checkbox input'); // refresh
         assert.ok($checkBox.is(':checked'), "should have a ticked checkbox in colorpicker dropdown menu after mousedown");
 
         $checkBox.mousedown();
-        $input = form.$('.o_field_many2manytags span[data-id=13]'); // refresh
+        $input = form.$('.o_field_many2manytags button[data-id=13]'); // refresh
         assert.equal($input.data('color'), "8", "should revert to old color when toggling off checkbox");
 
         $input.click();
-        $checkBox = form.$('.o_field_many2manytags span[data-id=13] .o_colorpicker .o_checkbox input'); // refresh
+        $checkBox = form.$('.o_field_many2manytags button[data-id=13] .o_colorpicker .o_checkbox input'); // refresh
         assert.notOk($checkBox.is(':checked'), "should have an unticked checkbox in colorpicker dropdown menu after 2nd click");
 
         // TODO: it would be nice to test the behaviors of the autocomplete dropdown
@@ -10939,9 +10939,9 @@ QUnit.module('relational_fields', {
                 return this._super.apply(this, arguments);
             }
         });
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 1,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 1,
             "should contain 1 tag");
-        assert.ok(form.$('span:contains(gold)').length,
+        assert.ok(form.$('button:contains(gold)').length,
             'should have fetched and rendered gold partner tag');
 
         form.$buttons.find('.o_form_button_edit').click();
@@ -10954,9 +10954,9 @@ QUnit.module('relational_fields', {
         assert.strictEqual($input.autocomplete('widget').find('li a:contains("silver")').length, 1,
             "autocomplete dropdown should contain 'silver'");
         $input.autocomplete('widget').find('li').click(); // add 'silver'
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 2,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 2,
             "should contain 2 tags");
-        assert.ok(form.$('.o_field_many2manytags > span:contains("silver")').length,
+        assert.ok(form.$('.o_field_many2manytags > button:contains("silver")').length,
             "should contain newly added tag 'silver'");
 
         form.destroy();
@@ -10989,9 +10989,9 @@ QUnit.module('relational_fields', {
         assert.strictEqual($input.autocomplete('widget').find('li').length, 3,
             "autocomplete dropdown should have 3 entries (2 values + 'Search and Edit...')");
         $input.autocomplete('widget').find('li:first()').click(); // adds a tag
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 1,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 1,
             "should contain 1 tag");
-        assert.ok(form.$('.o_field_many2manytags > span:contains("gold")').length,
+        assert.ok(form.$('.o_field_many2manytags > button:contains("gold")').length,
             "should contain newly added tag 'gold'");
 
         // save the record (should do the write RPC with the correct commands)
@@ -11016,20 +11016,20 @@ QUnit.module('relational_fields', {
         });
 
         // First checks that default color 0 is rendered as 0 color
-        assert.ok(form.$('span:first()').is('.o_tag_color_0'),
+        assert.ok(form.$('button:first()').is('.o_tag_color_0'),
             'first tag color should be 0');
 
         // Update the color in readonly
-        form.$('span:first()').click();
+        form.$('button:first()').click();
         $('.o_colorpicker a[data-color="1"]').trigger('mousedown'); // choose color 1
-        assert.strictEqual(form.$('span:first()').data('color'), 1,
+        assert.strictEqual(form.$('button:first()').data('color'), 1,
             'should have correctly updated the color (in readonly)');
 
         // Update the color in edit
         form.$buttons.find('.o_form_button_edit').click();
-        form.$('span:first()').click();
+        form.$('button:first()').click();
         $('.o_colorpicker a[data-color="6"]').trigger('mousedown'); // choose color 6
-        assert.strictEqual(form.$('span:first()').data('color'), 6,
+        assert.strictEqual(form.$('button:first()').data('color'), 6,
             'should have correctly updated the color (in edit)');
         form.destroy();
     });
@@ -11136,14 +11136,14 @@ QUnit.module('relational_fields', {
         form.$('.o_field_many2one input').click();
         $dropdown.find('.o_m2o_dropdown_option:contains(Search)').mouseenter().click();  // Open Search More
 
-        $('.modal .o_search_options .fa-bars').click();
-        $('.modal .o_search_options .o_group_by_menu a:contains(Bar)').click(); // group by 'Bar'
+        $('[role="dialog"] .o_search_options .fa-bars').click();
+        $('[role="dialog"] .o_search_options .o_group_by_menu a:contains(Bar)').click(); // group by 'Bar'
 
-        $('.modal .o_group_header:first').click();
-        assert.strictEqual($('.modal tbody:nth(1) .o_data_row').length, 7,
+        $('[role="dialog"] .o_group_header:first').click();
+        assert.strictEqual($('[role="dialog"] tbody:nth(1) .o_data_row').length, 7,
             "should display 7 records in the first page");
-        $('.modal .o_group_header:first .o_pager_next').click();
-        assert.strictEqual($('.modal tbody:nth(1) .o_data_row').length, 1,
+        $('[role="dialog"] .o_group_header:first .o_pager_next').click();
+        assert.strictEqual($('[role="dialog"] tbody:nth(1) .o_data_row').length, 1,
             "should display 1 record in the second page");
 
         form.destroy();
@@ -11167,7 +11167,7 @@ QUnit.module('relational_fields', {
                 '</form>',
             res_id: 1,
         });
-        assert.strictEqual(form.$('.o_field_widget[name="partner_ids"] > span').length, 100,
+        assert.strictEqual(form.$('.o_field_widget[name="partner_ids"] > button').length, 100,
             'should have rendered 100 tags');
         form.destroy();
     });
@@ -11192,14 +11192,14 @@ QUnit.module('relational_fields', {
         });
 
         form.$buttons.find('.o_form_button_edit').click();
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 1,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 1,
             "should contain one tag");
 
         // update foo, which will trigger an onchange and update timmy
         // -> m2mtags input should not have taken the focus
         form.$('input:first').focus();
         form.$('input:first').val('trigger onchange').trigger('input');
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 0,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 0,
             "should contain no tags");
         assert.strictEqual(form.$('input:first').get(0), document.activeElement,
             "foo input should have kept the focus");
@@ -11207,14 +11207,14 @@ QUnit.module('relational_fields', {
         // add a tag -> m2mtags input should still have the focus
         form.$('.o_field_many2manytags input').click(); // opens the dropdown
         form.$('.o_field_many2manytags input').autocomplete('widget').find('li:first').click();
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 1,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 1,
             "should contain a tag");
         assert.strictEqual(form.$('.o_field_many2manytags input').get(0), document.activeElement,
             "m2m tags input should have kept the focus");
 
         // remove a tag -> m2mtags input should still have the focus
         form.$('.o_field_many2manytags .o_delete').click();
-        assert.strictEqual(form.$('.o_field_many2manytags > span').length, 0,
+        assert.strictEqual(form.$('.o_field_many2manytags > button').length, 0,
             "should contain no tags");
         assert.strictEqual(form.$('.o_field_many2manytags input').get(0), document.activeElement,
             "m2m tags input should have kept the focus");
@@ -11700,8 +11700,8 @@ QUnit.module('relational_fields', {
 
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_field_x2many_list_row_add a').click();
-        var $dropdown = $('.modal .o_field_many2one input').autocomplete('widget');
-        $('.modal input').val('new record').trigger('keydown');
+        var $dropdown = $('[role="dialog"] .o_field_many2one input').autocomplete('widget');
+        $('[role="dialog"] input').val('new record').trigger('keydown');
         concurrency.delay(0).then(function () {
             $dropdown.find('li:first()').click(); // quick create 'new record'
             assert.verifySteps(['name_create']);
@@ -11747,7 +11747,7 @@ QUnit.module('relational_fields', {
         $cell_o2m.click();
 
         // In modal
-        var $modal = $('.modal-dialog.modal-lg');
+        var $modal = $('.modal-lg');
         assert.equal($modal.length, 1,
             'there should be one modal opened');
 
@@ -11793,7 +11793,7 @@ QUnit.module('relational_fields', {
         form.$('.o_data_cell').click();
 
         // In modal
-        var $modal = $('.modal-dialog.modal-lg');
+        var $modal = $('.modal-lg');
         assert.equal($modal.length, 1,
             'there should be one modal opened');
 
@@ -11881,9 +11881,9 @@ QUnit.module('relational_fields', {
 
         form.$('.o_external_button').click(); // click on the external button (should do an RPC)
 
-        assert.strictEqual($('.modal .modal-title').text().trim(), 'Open: custom label',
+        assert.strictEqual($('[role="dialog"] .modal-title').text().trim(), 'Open: custom label',
                         "dialog title should display the custom string label");
-        $('.modal .o_form_button_cancel').click();
+        $('[role="dialog"] .o_form_button_cancel').click();
 
         form.$('.o_field_widget select').val('partner_type').trigger('change');
         assert.strictEqual(form.$('.o_field_widget input').val(), "",
@@ -12096,7 +12096,7 @@ QUnit.module('relational_fields', {
         // Add a record in the list
         x2mList.find('.o_field_x2many_list_row_add a').click();
 
-        var modal = $('.modal-dialog.modal-lg');
+        var modal = $('.modal-lg');
 
         var nameInput = modal.find('input.o_input[name=display_name]');
         nameInput.val('michelangelo').trigger('input');
diff --git a/addons/web/static/tests/fields/upgrade_fields_tests.js b/addons/web/static/tests/fields/upgrade_fields_tests.js
index 427ec7b54e33090f65884b9dbd0400512c35f49e..14f20bba8adce7222981494d99ae8eb01d42b0d1 100644
--- a/addons/web/static/tests/fields/upgrade_fields_tests.js
+++ b/addons/web/static/tests/fields/upgrade_fields_tests.js
@@ -33,7 +33,7 @@ QUnit.module('upgrade_fields', {
         });
 
         form.$('input:checkbox').click();
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "the 'Upgrade to Enterprise' dialog should be opened");
 
         form.destroy();
diff --git a/addons/web/static/tests/services/notification_service_tests.js b/addons/web/static/tests/services/notification_service_tests.js
index 68227093cea42d5a49badac105143f5d1434ef7c..feb3a60055075aee2d39783eb0d1aeec6bbdbcbf 100644
--- a/addons/web/static/tests/services/notification_service_tests.js
+++ b/addons/web/static/tests/services/notification_service_tests.js
@@ -45,7 +45,7 @@ QUnit.module('Services', {
         });
         var $notification = $('body .o_notification_manager .o_notification');
         assert.strictEqual(_.str.trim($notification.html().replace(/\s+/g, ' ')),
-            "<div class=\"o_notification_title\"> <span class=\"o_icon fa fa-3x fa-lightbulb-o\"></span> a </div> <div class=\"o_notification_content\">b</div>",
+            "<div class=\"o_notification_title\"> <span role=\"img\" aria-label=\"Notification undefined\" class=\"o_icon fa fa-3x fa-lightbulb-o\" title=\"Notification undefined\"></span> a </div> <div class=\"o_notification_content\">b</div>",
             "should display notification");
         assert.strictEqual($notification.find('.o_close').length, 0, "should not display the close button in ");
         setTimeout(function () {
@@ -68,7 +68,7 @@ QUnit.module('Services', {
         });
         var $notification = $('body .o_notification_manager .o_notification');
         assert.strictEqual(_.str.trim($notification.html().replace(/\s+/g, ' ')),
-            "<div class=\"o_notification_title\"> <span class=\"o_icon fa fa-3x fa-exclamation\"></span> a </div> <div class=\"o_notification_content\">b</div>",
+            "<div class=\"o_notification_title\"> <span role=\"img\" aria-label=\"Notification undefined\" class=\"o_icon fa fa-3x fa-exclamation\" title=\"Notification undefined\"></span> a </div> <div class=\"o_notification_content\">b</div>",
             "should display notification");
         view.destroy();
         setTimeout(done);
@@ -184,7 +184,7 @@ QUnit.module('Services', {
         var $notification = $('body .o_notification_manager .o_notification');
         assert.strictEqual($notification.eq(0).find('.o_close').length, 1, "should display the close button in notification");
         assert.strictEqual(_.str.trim($notification.eq(0).html().replace(/\s+/g, ' ')),
-            "<a class=\"fa fa-times o_close\" href=\"#\"></a> <div class=\"o_notification_title\"> <span class=\"o_icon fa fa-3x fa-question-circle-o\"></span> a0 </div> <div class=\"o_notification_content\">b0</div> <div class=\"o_buttons\"> <button type=\"button\" class=\"btn btn-sm btn-primary\"> <span>accept0</span> </button><button type=\"button\" class=\"btn btn-sm btn-default\"> <span>refuse0</span> </button> </div>",
+            "<a aria-label=\"Close\" class=\"fa fa-times o_close\" href=\"#\" title=\"Close\"></a> <div class=\"o_notification_title\"> <span role=\"img\" aria-label=\"Notification undefined\" class=\"o_icon fa fa-3x fa-question-circle-o\" title=\"Notification undefined\"></span> a0 </div> <div class=\"o_notification_content\">b0</div> <div class=\"o_buttons\"> <button type=\"button\" class=\"btn btn-sm btn-primary\"> <span>accept0</span> </button><button type=\"button\" class=\"btn btn-sm btn-default\"> <span>refuse0</span> </button> </div>",
             "should display notification");
 
         $notification.find('.o_buttons button:contains(accept0)').click();
diff --git a/addons/web/static/tests/views/calendar_tests.js b/addons/web/static/tests/views/calendar_tests.js
index 0a7ca319c2f33a03f71e27f175de8e84ed61d740..5a07924413e837f7f47f50ba0185614fb789908c 100644
--- a/addons/web/static/tests/views/calendar_tests.js
+++ b/addons/web/static/tests/views/calendar_tests.js
@@ -213,8 +213,8 @@ QUnit.module('Views', {
         $sidebar.find('input[type="text"]').trigger('click');
         assert.strictEqual($('ul.ui-autocomplete li:not(.o_m2o_dropdown_option)').text(), "partner 4", "should display the last choice in one2many autocomplete"); // TODO: remove :not(.o_m2o_dropdown_option) because can't have "create & edit" choice
         $sidebar.find('.o_calendar_filter_item .o_remove').first().trigger('click');
-        assert.ok($('.modal button.btn:contains(Ok)').length, "should display the confirm message");
-        $('.modal button.btn:contains(Ok)').trigger('click');
+        assert.ok($('footer.modal-footer button.btn:contains(Ok)').length, "should display the confirm message");
+        $('footer.modal-footer button.btn:contains(Ok)').trigger('click');
         assert.strictEqual($sidebar.find('.o_calendar_filter:has(h3:contains(attendees)) .o_calendar_filter_item').length, 3, "click on remove then should display 3 filter items for 'attendees'");
         calendar.destroy();
     });
@@ -295,19 +295,19 @@ QUnit.module('Views', {
 
         calendar.$('.fc-event:contains(event 4) .fc-content').trigger('click');
 
-        assert.ok($('.modal-body').length, "should open the form view in dialog when click on event");
-        assert.ok($('.modal button.btn:contains(Edit)').length, "formViewDialog should be in readonly mode");
-        assert.ok($('.modal button.btn:contains(Delete)').length, "formViewDialog should have a delete button");
+        assert.ok($('main.modal-body').length, "should open the form view in dialog when click on event");
+        assert.ok($('footer.modal-footer button.btn:contains(Edit)').length, "formViewDialog should be in readonly mode");
+        assert.ok($('footer.modal-footer button.btn:contains(Delete)').length, "formViewDialog should have a delete button");
 
-        $('.modal button.btn:contains(Edit)').trigger('click');
+        $('footer.modal-footer button.btn:contains(Edit)').trigger('click');
 
-        assert.ok($('.modal-body').length, "should switch the modal in edit mode");
-        assert.notOk($('.modal button.btn:contains(Delete)').length, "formViewDialog should not have a delete button in edit mode");
+        assert.ok($('main.modal-body').length, "should switch the modal in edit mode");
+        assert.notOk($('footer.modal-footer button.btn:contains(Delete)').length, "formViewDialog should not have a delete button in edit mode");
 
-        $('.modal-body input:first').val('event 4 modified').trigger('input');
-        $('.modal button.btn:contains(Save)').trigger('click');
+        $('main.modal-body input:first').val('event 4 modified').trigger('input');
+        $('footer.modal-footer button.btn:contains(Save)').trigger('click');
 
-        assert.notOk($('.modal-body').length, "save button should close the modal");
+        assert.notOk($('main.modal-body').length, "save button should close the modal");
         assert.ok(calendar.$('.fc-event:contains(event 4 modified)').length, "should display the updated records");
 
         // create a new event, quick create only
@@ -317,12 +317,12 @@ QUnit.module('Views', {
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
 
-        assert.ok($('.modal-dialog.modal-sm').length, "should open the quick create dialog");
+        assert.ok($('.modal-sm').length, "should open the quick create dialog");
 
-        $('.modal-body input:first').val('new event in quick create').trigger('input');
-        $('.modal button.btn:contains(Create)').trigger('click').trigger('click');
+        $('main.modal-body input:first').val('new event in quick create').trigger('input');
+        $('footer.modal-footer button.btn:contains(Create)').trigger('click').trigger('click');
 
-        assert.strictEqual(calendar.$('.fc-event:contains(new event in quick create)').length, 1, "should display the new record");
+        assert.strictEqual(calendar.$('.fc-event:contains(new event in quick create)').length, 1, "should display the new record after quick create");
         assert.strictEqual(calendar.$('td.fc-event-container[colspan]').length, 2, "should the new record have only one day");
 
         // create a new event, quick create only (validated by pressing enter key)
@@ -330,9 +330,9 @@ QUnit.module('Views', {
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
 
-        assert.ok($('.modal-dialog.modal-sm').length, "should open the quick create dialog");
+        assert.ok($('.modal-sm').length, "should open the quick create dialog");
 
-        $('.modal-body input:first')
+        $('main.modal-body input:first')
             .val('new event in quick create validated by pressing enter key.')
             .trigger($.Event('keyup', {keyCode: $.ui.keyCode.ENTER}))
             .trigger($.Event('keyup', {keyCode: $.ui.keyCode.ENTER}));
@@ -347,20 +347,20 @@ QUnit.module('Views', {
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
 
-        assert.strictEqual($('.modal-dialog.modal-sm').length, 1, "should open the quick create dialog");
+        assert.strictEqual($('.modal-sm').length, 1, "should open the quick create dialog");
 
-        $('.modal-body input:first').val('coucou').trigger('input');
-        $('.modal button.btn:contains(Edit)').trigger('click');
+        $('main.modal-body input:first').val('coucou').trigger('input');
+        $('footer.modal-footer button.btn:contains(Edit)').trigger('click');
 
-        assert.strictEqual($('.modal-dialog.modal-lg .o_form_view').length, 1, "should open the slow create dialog");
-        assert.strictEqual($('.modal-dialog.modal-lg .modal-title').text(), "Create: Events",
+        assert.strictEqual($('.modal-lg .o_form_view').length, 1, "should open the slow create dialog");
+        assert.strictEqual($('.modal-lg .modal-title').text(), "Create: Events",
             "should use the string attribute as modal title");
-        assert.strictEqual($('.modal-dialog.modal-lg .o_form_view input[name="name"]').val(), "coucou",
+        assert.strictEqual($('.modal-lg .o_form_view input[name="name"]').val(), "coucou",
             "should have set the name from the quick create dialog");
 
         $('.modal-lg button.btn:contains(Save)').trigger('click');
 
-        assert.strictEqual(calendar.$('.fc-event:contains(coucou)').length, 1, "should display the new record");
+        assert.strictEqual(calendar.$('.fc-event:contains(coucou)').length, 1, "should display the new record with string attribute");
 
         // create a new event with 2 days
 
@@ -370,14 +370,14 @@ QUnit.module('Views', {
         testUtils.triggerMouseEvent($cell.next(), "mousemove");
         testUtils.triggerMouseEvent($cell.next(), "mouseup");
 
-        $('.modal input:first').val('new event in quick create 2').trigger('input');
-        $('.modal button.btn:contains(Edit)').trigger('click');
+        $('.modal-dialog input:first').val('new event in quick create 2').trigger('input');
+        $('footer.modal-footer button.btn:contains(Edit)').trigger('click');
 
         assert.strictEqual($('.modal-lg input:first').val(), 'new event in quick create 2', "should open the formViewDialog with default values");
 
         $('.modal-lg button.btn:contains(Save)').trigger('click');
 
-        assert.notOk($('.modal').length, "should close dialogs");
+        assert.notOk($('[role="dialog"]').length, "should close dialogs");
         var $newevent2 = calendar.$('.fc-event:contains(new event in quick create 2)');
         assert.ok($newevent2.length, "should display the 2 days new record");
         assert.strictEqual($newevent2.closest('.fc-event-container').attr('colspan'), "2", "the new record should have 2 days");
@@ -385,9 +385,9 @@ QUnit.module('Views', {
         // delete the a record
 
         calendar.$('.fc-event:contains(event 4) .fc-content').trigger('click');
-        $('.modal button.btn:contains(Delete)').trigger('click');
-        assert.ok($('.modal button.btn:contains(Ok)').length, "should display the confirm message");
-        $('.modal button.btn:contains(Ok)').trigger('click');
+        $('footer.modal-footer button.btn:contains(Delete)').trigger('click');
+        assert.ok($('footer.modal-footer button.btn:contains(Ok)').length, "should display the confirm message");
+        $('footer.modal-footer button.btn:contains(Ok)').trigger('click');
         assert.notOk(calendar.$('.fc-event:contains(event 4) .fc-content').length, "the record should be deleted");
 
         assert.strictEqual(calendar.$('.fc-event-container .fc-event').length, 10, "should display 10 events");
@@ -439,18 +439,18 @@ QUnit.module('Views', {
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
 
-        assert.strictEqual($('.modal-dialog.modal-sm .modal-title').text(), 'Create: Events',
+        assert.strictEqual($('.modal-sm .modal-title').text(), 'Create: Events',
             "should open the quick create dialog");
 
-        $('.modal-body input:first').val('new event in quick create').trigger('input');
-        $('.modal button.btn:contains(Create)').trigger('click').trigger('click');
+        $('main.modal-body input:first').val('new event in quick create').trigger('input');
+        $('footer.modal-footer button.btn:contains(Create)').trigger('click').trigger('click');
 
         // If the event is not default-prevented, a traceback will be raised, which we do not want
         assert.ok(event.isDefaultPrevented(), "fail deferred event should have been default-prevented");
 
-        assert.strictEqual($('.modal-dialog.modal-lg .modal-title').text(), 'Create: Events',
+        assert.strictEqual($('.modal-lg .modal-title').text(), 'Create: Events',
             "should have switched to a bigger modal for an actual create rather than quickcreate");
-        assert.strictEqual($('.modal-dialog.modal-lg .modal-body .o_form_view.o_form_editable').length, 1,
+        assert.strictEqual($('.modal-lg main .o_form_view.o_form_editable').length, 1,
             "should open the full event form view in a dialog");
 
         calendar.destroy();
@@ -1328,7 +1328,7 @@ QUnit.module('Views', {
         var $cell = calendar.$('.fc-day-grid .fc-row:eq(4) .fc-day:eq(2)');
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
-        $('.modal-body input:first').val('coucou').trigger('input');
+        $('main.modal-body input:first').val('coucou').trigger('input');
 
         testUtils.intercept(calendar, 'do_action', function (event) {
             assert.deepEqual(event.data.action,
@@ -1385,7 +1385,7 @@ QUnit.module('Views', {
         var $cell = calendar.$('.fc-day-grid .fc-row:eq(4) .fc-day:eq(2)');
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
-        $('.modal-body input:first').val('coucou').trigger('input');
+        $('main.modal-body input:first').val('coucou').trigger('input');
 
         testUtils.intercept(calendar, 'do_action', function (event) {
             assert.deepEqual(event.data.action,
@@ -1463,7 +1463,7 @@ QUnit.module('Views', {
         var $cell = calendar.$('.fc-day-grid .fc-row:eq(4) .fc-day:eq(2)');
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
-        $('.modal-body input:first').val('coucou').trigger('input');
+        $('main.modal-body input:first').val('coucou').trigger('input');
 
         testUtils.intercept(calendar, 'do_action', function (event) {
             assert.deepEqual(event.data.action,
@@ -1600,8 +1600,8 @@ QUnit.module('Views', {
         testUtils.triggerPositionalMouseEvent(left, top + 200, "mousemove");
         testUtils.triggerPositionalMouseEvent(left, top + 200, "mouseup");
 
-        $('.modal-body input:first').val('coucou').trigger('input');
-        $('.modal button.btn:contains(Create)').trigger('click');
+        $('main.modal-body input:first').val('coucou').trigger('input');
+        $('footer.modal-footer button.btn:contains(Create)').trigger('click');
 
         assert.strictEqual(calendar.$('.o_calendar_filter_item').length, 6, "should add the missing filter (active)");
         assert.strictEqual(calendar.$('.fc-event').length, 4, "should display the created item");
@@ -1617,8 +1617,8 @@ QUnit.module('Views', {
         testUtils.triggerPositionalMouseEvent(left, top + 200, "mousemove");
         testUtils.triggerPositionalMouseEvent(left, top + 200, "mouseup");
 
-        $('.modal-body input:first').val('coucou 2').trigger('input');
-        $('.modal button.btn:contains(Create)').trigger('click');
+        $('main.modal-body input:first').val('coucou 2').trigger('input');
+        $('footer.modal-footer button.btn:contains(Create)').trigger('click');
 
         assert.strictEqual(calendar.$('.o_calendar_filter_item').length, 6, "should have the same filters");
         assert.strictEqual(calendar.$('.fc-event').length, 4, "should not display the created item");
@@ -1697,10 +1697,10 @@ QUnit.module('Views', {
         testUtils.triggerPositionalMouseEvent(left, top + 200, "mousemove");
         testUtils.triggerPositionalMouseEvent(left, top + 200, "mouseup");
 
-        $('.modal-body input:first').val('coucou').trigger('input');
+        $('main.modal-body input:first').val('coucou').trigger('input');
 
-        $('.modal button.btn:contains(Edit)').trigger('click');
-        $('.modal button.btn:contains(Save)').trigger('click');
+        $('footer.modal-footer button.btn:contains(Edit)').trigger('click');
+        $('footer.modal-footer button.btn:contains(Save)').trigger('click');
 
         assert.strictEqual(calendar.$('.o_calendar_filter_item').length, 6, "should add the missing filter (active)");
         assert.strictEqual(calendar.$('.fc-event').length, 4, "should display the created item");
@@ -1906,10 +1906,10 @@ QUnit.module('Views', {
             "should open the quick create dialog");
 
         // Creating the event
-        $('.modal-body input:first').val('new event in quick create').trigger('input');
-        $('.modal button.btn:contains(Create)').trigger('click').trigger('click');
+        $('main.modal-body input:first').val('new event in quick create').trigger('input');
+        $('footer.modal-footer button.btn:contains(Create)').trigger('click').trigger('click');
         assert.strictEqual(calendar.$('.fc-event:contains(new event in quick create)').length, 1,
-            "should display the new record");
+            "should display the new record after quick create dialog");
 
         calendar.destroy();
         $view.remove();
@@ -1989,14 +1989,14 @@ QUnit.module('Views', {
         var $cell = calendar.$('.fc-day-grid .fc-row:eq(2) .fc-day:eq(2)');
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
-        var $input = $('.modal-body input:first');
+        var $input = $('[role="dialog"] input:first');
         $input.val('new event in quick create').trigger('input');
         // Simulate ENTER pressed on Create button (after a TAB)
         $input.trigger($.Event('keyup', {
             which: $.ui.keyCode.ENTER,
             keyCode: $.ui.keyCode.ENTER,
         }));
-        $('.modal-footer button:first').click();
+        $('footer.modal-footer button:first').click();
         def.resolve();
         assert.strictEqual(createCount, 1,
             "should create only one event");
@@ -2221,7 +2221,7 @@ QUnit.module('Views', {
         var $cell = calendar.$('.fc-day-grid .fc-row:eq(2) .fc-day:eq(2)');
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
-        var $input = $('.modal-body input:first');
+        var $input = $('main.modal-body input:first');
         $input.val("It's just a fleshwound").trigger('input');
         $('.modal button.btn:contains(Create)').trigger('click');
 
@@ -2268,7 +2268,7 @@ QUnit.module('Views', {
         var $cell = calendar.$('.fc-day-grid .fc-row:eq(2) .fc-day:eq(2)');
         testUtils.triggerMouseEvent($cell, "mousedown");
         testUtils.triggerMouseEvent($cell, "mouseup");
-        var $input = $('.modal-body input:first');
+        var $input = $('main.modal-body input:first');
         $input.val("It's just a fleshwound").trigger('input');
         $('.modal button.btn:contains(Create)').trigger('click');
 
diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js
index 18c82adb0a574ef1774158bc891b2b97eefba329..44ac724995bd3602f482230095b0eadf2f1f4ed2 100644
--- a/addons/web/static/tests/views/form_tests.js
+++ b/addons/web/static/tests/views/form_tests.js
@@ -2131,13 +2131,13 @@ QUnit.module('Views', {
             "should display the name of the many2many on the original form");
         form.$('td:contains(gold)').click();
 
-        assert.strictEqual($('.modal-dialog').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             'The partner_type modal should have opened');
-        assert.strictEqual($('.modal-dialog').find('td:contains(first record)').length, 1,
+        assert.strictEqual($('[role="dialog"]').find('td:contains(first record)').length, 1,
             "should display the name of the many2many on the modal form");
 
-        $('.modal-dialog').find('td:contains(first record)').click();
-        assert.strictEqual($('.modal-dialog').length, 2,
+        $('[role="dialog"]').find('td:contains(first record)').click();
+        assert.strictEqual($('[role="dialog"]').length, 2,
             'There should be 2 modals (partner on top of partner_type) opened');
 
         form.destroy();
@@ -2167,7 +2167,7 @@ QUnit.module('Views', {
 
         // click on discard
         form.$buttons.find('.o_form_button_cancel').click();
-        assert.ok(!$('.modal:visible').length, 'no confirm modal should be displayed');
+        assert.ok(!$('[role="dialog"]:visible').length, 'no confirm modal should be displayed');
         assert.strictEqual(form.$('.o_field_widget').text(), 'yop', 'field in readonly should display yop');
 
         assert.strictEqual(nbWrite, 0, 'no write RPC should have been done');
@@ -2200,14 +2200,14 @@ QUnit.module('Views', {
 
         // click on discard and cancel the confirm request
         form.$buttons.find('.o_form_button_cancel').click();
-        assert.ok($('.modal').length, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-default').click(); // click on cancel
+        assert.ok($('[role="dialog"]').length, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-default').click(); // click on cancel
         assert.strictEqual(form.$('input').val(), 'new value', 'input should still contain new value');
 
         // click on discard and confirm
         form.$buttons.find('.o_form_button_cancel').click();
-        assert.ok($('.modal').length, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-primary').click(); // click on confirm
+        assert.ok($('[role="dialog"]').length, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-primary').click(); // click on confirm
         assert.strictEqual(form.$('.o_field_widget').text(), 'yop', 'field in readonly should display yop');
 
         assert.strictEqual(nbWrite, 0, 'no write RPC should have been done');
@@ -2287,7 +2287,7 @@ QUnit.module('Views', {
 
         // click on discard and confirm
         form.$buttons.find('.o_form_button_cancel').click();
-        $('.modal .modal-footer .btn-primary').click(); // click on confirm
+        $('footer.modal-footer .btn-primary').click(); // click on confirm
 
         assert.notOk(form.$el.prop('outerHTML').match('xphone'),
             "the string xphone should not be present after discarding");
@@ -2317,7 +2317,7 @@ QUnit.module('Views', {
 
         form.$buttons.find('.o_form_button_cancel').click();
 
-        assert.strictEqual($('.modal').length, 0,
+        assert.strictEqual($('[role="dialog"]').length, 0,
             'there should not be a confirm modal');
 
         form.destroy();
@@ -2351,17 +2351,17 @@ QUnit.module('Views', {
 
         // discard the changes and check it has properly been discarded
         form.$buttons.find('.o_form_button_cancel').click();
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             'there should be a confirm modal');
         assert.strictEqual(form.$('input').val(), 'DEF', 'input should be DEF');
-        $('.modal .modal-footer .btn-primary').click(); // click on confirm
+        $('footer.modal-footer .btn-primary').click(); // click on confirm
         assert.strictEqual(form.$('input').val(), 'ABC', 'input should now be ABC');
 
         // redirty and discard the field foo (to make sure initial changes haven't been lost)
         form.$('input').val('GHI').trigger('input');
         form.$buttons.find('.o_form_button_cancel').click();
         assert.strictEqual(form.$('input').val(), 'GHI', 'input should be GHI');
-        $('.modal .modal-footer .btn-primary').click(); // click on confirm
+        $('footer.modal-footer .btn-primary').click(); // click on confirm
         assert.strictEqual(form.$('input').val(), 'ABC', 'input should now be ABC');
 
         form.destroy();
@@ -2395,7 +2395,7 @@ QUnit.module('Views', {
 
         form.$buttons.find('.o_form_button_cancel').click();
 
-        assert.strictEqual($('.modal').length, 0,
+        assert.strictEqual($('[role="dialog"]').length, 0,
             'there should not be a confirm modal');
 
         form.destroy();
@@ -2436,15 +2436,15 @@ QUnit.module('Views', {
 
         // click on the pager to switch to the next record and cancel the confirm request
         form.pager.$('.o_pager_next').click(); // click on next
-        assert.ok($('.modal').length, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-default').click(); // click on cancel
+        assert.ok($('[role="dialog"]').length, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-default').click(); // click on cancel
         assert.strictEqual(form.$('input').val(), 'new value', 'input should still contain new value');
         assert.strictEqual(form.pager.$('.o_pager_value').text(), "1", 'pager value should still be 1');
 
         // click on the pager to switch to the next record and confirm
         form.pager.$('.o_pager_next').click(); // click on next
-        assert.ok($('.modal').length, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-primary').click(); // click on confirm
+        assert.ok($('[role="dialog"]').length, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-primary').click(); // click on confirm
         assert.strictEqual(form.$('input').val(), 'blip', 'input should contain blip');
         assert.strictEqual(form.pager.$('.o_pager_value').text(), "2", 'pager value should be 2');
 
@@ -2483,7 +2483,7 @@ QUnit.module('Views', {
 
         // click on the pager to switch to the next record and cancel the confirm request
         form.pager.$('.o_pager_next').click(); // click on next
-        assert.strictEqual($('.modal:visible').length, 0, 'no confirm modal should be displayed');
+        assert.strictEqual($('[role="dialog"]:visible').length, 0, 'no confirm modal should be displayed');
         assert.strictEqual(form.pager.$('.o_pager_value').text(), "2", 'pager value should be 2');
 
         assert.strictEqual(form.$('.o_priority .fa-star-o').length, 2,
@@ -2495,7 +2495,7 @@ QUnit.module('Views', {
             'priority widget should have been updated');
 
         form.pager.$('.o_pager_next').click(); // click on next
-        assert.strictEqual($('.modal:visible').length, 0, 'no confirm modal should be displayed');
+        assert.strictEqual($('[role="dialog"]:visible').length, 0, 'no confirm modal should be displayed');
         assert.strictEqual(form.pager.$('.o_pager_value').text(), "1", 'pager value should be 1');
 
         // switch to edit mode
@@ -2506,8 +2506,8 @@ QUnit.module('Views', {
         form.$('input').val('wrong value').trigger('input');
 
         form.$buttons.find('.o_form_button_cancel').click();
-        assert.strictEqual($('.modal').length, 1, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-primary').click(); // click on confirm
+        assert.strictEqual($('[role="dialog"]').length, 1, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-primary').click(); // click on confirm
         form.pager.$('.o_pager_next').click(); // click on next
         assert.strictEqual(form.pager.$('.o_pager_value').text(), "2", 'pager value should be 2');
         form.destroy();
@@ -2736,16 +2736,16 @@ QUnit.module('Views', {
         assert.strictEqual(form.pager.$('.o_pager_limit').text(), "3", 'pager limit should be 3');
         assert.strictEqual(form.$('span:contains(yop)').length, 1,
             'should have a field with foo value for record 1');
-        assert.ok(!$('.modal:visible').length, 'no confirm modal should be displayed');
+        assert.ok(!$('[role="dialog"]:visible').length, 'no confirm modal should be displayed');
 
         // open sidebar
         form.sidebar.$('button.o_dropdown_toggler_btn').click();
         form.sidebar.$('a:contains(Delete)').click();
 
-        assert.ok($('.modal').length, 'a confirm modal should be displayed');
+        assert.ok($('[role="dialog"]').length, 'a confirm modal should be displayed');
 
         // confirm the delete
-        $('.modal .modal-footer button.btn-primary').click();
+        $('footer.modal-footer button.btn-primary').click();
 
         assert.strictEqual(form.pager.$('.o_pager_value').text(), "1", 'pager value should be 1');
         assert.strictEqual(form.pager.$('.o_pager_limit').text(), "2", 'pager limit should be 2');
@@ -2784,9 +2784,9 @@ QUnit.module('Views', {
         testUtils.intercept(form, 'history_back', function () {
             assert.step('history_back');
         });
-        assert.strictEqual($('.modal').length, 1, 'a confirm modal should be displayed');
-        $('.modal .modal-footer button.btn-primary').click();
-        assert.strictEqual($('.modal').length, 0, 'no confirm modal should be displayed');
+        assert.strictEqual($('[role="dialog"]').length, 1, 'a confirm modal should be displayed');
+        $('footer.modal-footer button.btn-primary').click();
+        assert.strictEqual($('[role="dialog"]').length, 0, 'no confirm modal should be displayed');
 
         assert.verifySteps(['read', 'unlink', 'history_back']);
         form.destroy();
@@ -3354,7 +3354,7 @@ QUnit.module('Views', {
         // open a subrecord and trigger an onchange
         readInModal = true;
         form.$('.o_data_row .o_data_cell:first').click();
-        $('.modal .o_field_widget[name=name]').val("new name").trigger('input');
+        $('[role="dialog"] .o_field_widget[name=name]').val("new name").trigger('input');
 
         form.destroy();
     });
@@ -3582,7 +3582,7 @@ QUnit.module('Views', {
 
         // discard changes
         form.$buttons.find('.o_form_button_cancel').click();
-        $('.modal .modal-footer .btn-primary').click();
+        $('footer.modal-footer .btn-primary').click();
         assert.strictEqual(form.$('span[name="foo"]').text(), "blip",
             "field foo should still be displayed to initial value");
 
@@ -3627,13 +3627,13 @@ QUnit.module('Views', {
 
         assert.strictEqual(form.$('.o_field_widget[name="foo"]').val(), "1234",
             "field foo should still contain new value");
-        assert.strictEqual($('.modal').length, 0,
+        assert.strictEqual($('[role="dialog"]').length, 0,
             "Confirm dialog should not be displayed");
 
         // complete the write
         def.resolve();
 
-        assert.strictEqual($('.modal').length, 0,
+        assert.strictEqual($('[role="dialog"]').length, 0,
             "Confirm dialog should not be displayed");
         assert.strictEqual(form.$('.o_field_widget[name="foo"]').text(), "1234",
             "value should have been saved and rerendered in readonly");
@@ -3804,9 +3804,9 @@ QUnit.module('Views', {
             "onchange should have been correctly applied on field in o2m list");
 
         form.$('.o_data_row').click(); // edit the o2m in the dialog
-        assert.strictEqual($('.modal .modal-title').text().trim(), 'Open: one2many field',
+        assert.strictEqual($('[role="dialog"] .modal-title').text().trim(), 'Open: one2many field',
             "the field string is displayed in the modal title");
-        assert.strictEqual($('.modal .o_field_widget').val(), 'foo changed',
+        assert.strictEqual($('[role="dialog"] .o_field_widget').val(), 'foo changed',
             "the onchange value hasn't been discarded when opening the o2m");
 
         form.destroy();
@@ -3898,20 +3898,20 @@ QUnit.module('Views', {
             "the initial value should be the default one");
 
         form.$('.o_data_row td:first').click(); // edit the o2m in a dialog
-        $('.modal input:nth(1)').val(77).trigger('input');
-        assert.strictEqual($('.modal input:first').val(), '[blip] 77',
+        $('[role="dialog"] input:nth(1)').val(77).trigger('input');
+        assert.strictEqual($('[role="dialog"] input:first').val(), '[blip] 77',
             "onchange should have been correctly applied");
-        $('.modal .modal-footer .btn-primary').click(); // save the dialog
+        $('footer.modal-footer .btn-primary').click(); // save the dialog
         assert.strictEqual(form.$('.o_data_row td:first').text(), '[blip] 77',
             "onchange should have been correctly applied");
 
         // create a new o2m record
         form.$('.o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal .modal-title').text().trim(), 'Create custom label',
+        assert.strictEqual($('[role="dialog"] .modal-title').text().trim(), 'Create custom label',
             "the custom field label is applied in the modal title");
-        assert.strictEqual($('.modal input:first').val(), '[blip] 14',
+        assert.strictEqual($('[role="dialog"] input:first').val(), '[blip] 14',
             "onchange should have been correctly applied after default get");
-        $('.modal .modal-footer .btn-primary').click(); // save the dialog
+        $('footer.modal-footer .btn-primary').click(); // save the dialog
         assert.strictEqual(form.$('.o_data_row:nth(1) td:first').text(), '[blip] 14',
             "onchange should have been correctly applied after default get");
 
@@ -4340,10 +4340,10 @@ QUnit.module('Views', {
 
         // add a o2m subrecord
         form.$('.o_field_x2many_list_row_add a').click();
-        $('.modal-body .o_field_one2many .o_field_x2many_list_row_add a').click();
-        $('.modal-body input').val('xtv').trigger('input');
-        $('.modal-footer button:first').click(); // save & close
-        assert.strictEqual($('.modal').length, 0,
+        $('main.modal-body .o_field_one2many .o_field_x2many_list_row_add a').click();
+        $('main.modal-body input').val('xtv').trigger('input');
+        $('footer.modal-footer button:first').click(); // save & close
+        assert.strictEqual($('[role="dialog"]').length, 0,
             "dialog should be closed");
 
         var row = form.$('.o_field_one2many .o_list_view .o_data_row');
@@ -4639,7 +4639,7 @@ QUnit.module('Views', {
         assert.strictEqual(row.children()[1].textContent, '1 record',
             "the cell should contains the number of record: 1");
         row.click();
-        var modal_row = $('.modal-body .o_form_sheet .o_field_one2many .o_list_view .o_data_row');
+        var modal_row = $('main.modal-body .o_form_sheet .o_field_one2many .o_list_view .o_data_row');
         assert.strictEqual(modal_row.children().length, 2,
             "the row should contains the 2 fields defined in the form view");
         assert.strictEqual($(modal_row).text(), "gold2",
@@ -4986,29 +4986,29 @@ QUnit.module('Views', {
         form.$buttons.find('.o_form_button_edit').click();
         // Open first dialog
         form.$('.o_external_button').click();
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "One FormViewDialog should be opened");
-        var $firstModal = $('.modal');
-        assert.strictEqual($('.modal .modal-title').first().text().trim(), 'Open: Product',
+        var $firstModal = $('[role="dialog"]');
+        assert.strictEqual($('[role="dialog"] .modal-title').first().text().trim(), 'Open: Product',
             "dialog title should display the python field string as label");
         assert.strictEqual($firstModal.find('input').val(), 'xphone',
             "display_name should be correctly displayed");
 
         // Open second dialog
         $firstModal.find('.o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal').length, 2,
+        assert.strictEqual($('[role="dialog"]').length, 2,
             "two FormViewDialogs should be opened");
-        var $secondModal = $('.modal:nth(1)');
+        var $secondModal = $('[role="dialog"]:nth(1)');
         // Add new value
         $secondModal.find('input').val('xtv').trigger('input');
-        $secondModal.find('.modal-footer button:first').click(); // Save & close
-        assert.strictEqual($('.modal').length, 1,
+        $secondModal.find('footer.modal-footer button:first').click(); // Save & close
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "last opened dialog should be closed");
 
         // Check that data in first dialog is correctly updated
         assert.strictEqual($firstModal.find('tr.o_data_row td').text(), 'xtv',
             "should have added a line with xtv as new record");
-        $firstModal.find('.modal-footer button:first').click(); // Save & close
+        $firstModal.find('footer.modal-footer button:first').click(); // Save & close
         form.destroy();
     });
 
@@ -5210,12 +5210,12 @@ QUnit.module('Views', {
             "record 1 should be first");
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "FormViewDialog should be opened");
-        $('.modal input[name="foo"]').val('xop').trigger("input");
-        $('.modal .modal-footer button:eq(1)').click(); // Save & new
-        $('.modal input[name="foo"]').val('zop').trigger("input");
-        $('.modal .modal-footer button:first').click(); // Save & close
+        $('[role="dialog"] input[name="foo"]').val('xop').trigger("input");
+        $('footer.modal-footer button:eq(1)').click(); // Save & new
+        $('[role="dialog"] input[name="foo"]').val('zop').trigger("input");
+        $('footer.modal-footer button:first').click(); // Save & close
 
         // client-side sort
         assert.ok(form.$('.o_field_one2many tbody tr:eq(0) td:contains(zop)').length,
@@ -5237,8 +5237,8 @@ QUnit.module('Views', {
         // client-side sort on edit
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_field_one2many tbody tr:eq(1) td:contains(yop)').click();
-        $('.modal input[name="foo"]').val('zzz').trigger("input");
-        $('.modal .modal-footer button:first').click(); // Save
+        $('[role="dialog"] input[name="foo"]').val('zzz').trigger("input");
+        $('footer.modal-footer button:first').click(); // Save
         assert.ok(form.$('.o_field_one2many tbody tr:eq(0) td:contains(zzz)').length,
             "record zzz should be first");
         assert.ok(form.$('.o_field_one2many tbody tr:eq(1) td:contains(zop)').length,
@@ -5524,7 +5524,7 @@ QUnit.module('Views', {
         });
 
         form.$('.o_data_row:first').click();
-        assert.strictEqual($('.modal .modal-title').first().text().trim(), 'Open: custom label',
+        assert.strictEqual($('[role="dialog"] .modal-title').first().text().trim(), 'Open: custom label',
             "modal should use the python field string as title");
 
         form.destroy();
@@ -5610,10 +5610,10 @@ QUnit.module('Views', {
         form.$buttons.find('.o_form_button_edit').click();
         form.$('[name="product_id"] .o_external_button').click();
 
-        assert.strictEqual($('.modal-body .o_field_translate').length, 1,
+        assert.strictEqual($('main.modal-body .o_field_translate').length, 1,
             "there should be a translate button in the modal");
 
-        $('.modal-body .o_field_translate').click();
+        $('main.modal-body .o_field_translate').click();
 
         assert.strictEqual(nbTranslateCalls, 1, "should call_button translate once");
 
@@ -5780,7 +5780,7 @@ QUnit.module('Views', {
         form.$('.o_statusbar_buttons button').click();
         assert.ok(form.$('.o_statusbar_buttons button').prop('disabled'),
             'button should be disabled');
-        $('.modal .modal-footer button.btn-default').click();
+        $('footer.modal-footer button.btn-default').click();
         assert.ok(!form.$('.o_statusbar_buttons button').prop('disabled'),
             'button should no longer be disabled');
 
@@ -5789,7 +5789,7 @@ QUnit.module('Views', {
         // click on button, and click on ok in confirm dialog
         form.$('.o_statusbar_buttons button').click();
         assert.verifySteps(['default_get']);
-        $('.modal .modal-footer button.btn-primary').click();
+        $('footer.modal-footer button.btn-primary').click();
 
         assert.verifySteps(['default_get', 'create', 'read', 'execute_action']);
 
@@ -5845,17 +5845,17 @@ QUnit.module('Views', {
 
         form.$('.o_external_button').click();
 
-        assert.notOk($('.modal .oe_button_box button').attr('disabled'),
+        assert.notOk($('[role="dialog"] .oe_button_box button').attr('disabled'),
             "stat buttons should be enabled");
 
-        $('.modal .oe_button_box button').click();
+        $('[role="dialog"] .oe_button_box button').click();
 
-        assert.ok($('.modal .oe_button_box button').attr('disabled'),
+        assert.ok($('[role="dialog"] .oe_button_box button').attr('disabled'),
             "stat buttons should be disabled");
 
         def.resolve();
 
-        assert.notOk($('.modal .oe_button_box button').attr('disabled'),
+        assert.notOk($('[role="dialog"] .oe_button_box button').attr('disabled'),
             "stat buttons should be enabled");
 
         form.destroy();
@@ -6034,16 +6034,16 @@ QUnit.module('Views', {
 
         form.$buttons.find('.o_form_button_edit').click();
         form.$('.o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "One FormViewDialog should be opened");
         // set a value on the m2o
         var $dropdown = form.$('.o_field_many2one input').autocomplete('widget');
-        $('.modal .o_field_many2one input').click();
+        $('[role="dialog"] .o_field_many2one input').click();
         $dropdown.find('li:first()').click();
 
-        $('.modal .modal-footer button:eq(1)').click(); // Save & new
-        $('.modal .o_field_many2one input').click();
-        $('.modal .modal-footer button:first').click(); // Save & close
+        $('footer.modal-footer button:eq(1)').click(); // Save & new
+        $('[role="dialog"] .o_field_many2one input').click();
+        $('footer.modal-footer button:first').click(); // Save & close
         form.destroy();
     });
 
@@ -6133,20 +6133,20 @@ QUnit.module('Views', {
         });
 
         form.$('.o_field_x2many_list_row_add a').click();
-        assert.strictEqual($('.modal input.o_field_widget[name=foo]').length, 1,
+        assert.strictEqual($('[role="dialog"] input.o_field_widget[name=foo]').length, 1,
             'foo should be editable');
         checkOnchange = true;
-        $('.modal .o_field_widget[name=foo]').val('foo value').trigger('input');
-        $('.modal .o_field_widget[name=display_name]').val('readonly').trigger('input');
-        assert.strictEqual($('.modal span.o_field_widget[name=foo]').length, 1,
+        $('[role="dialog"] .o_field_widget[name=foo]').val('foo value').trigger('input');
+        $('[role="dialog"] .o_field_widget[name=display_name]').val('readonly').trigger('input');
+        assert.strictEqual($('[role="dialog"] span.o_field_widget[name=foo]').length, 1,
             'foo should be readonly');
-        $('.modal .modal-footer .btn-primary').click(); // close the modal
+        $('footer.modal-footer .btn-primary').click(); // close the modal
         checkOnchange = false;
 
         form.$('.o_data_row').click(); // re-open previous record
-        assert.strictEqual($('.modal .o_field_widget[name=foo]').text(), 'foo value',
+        assert.strictEqual($('[role="dialog"] .o_field_widget[name=foo]').text(), 'foo value',
             "the edited value should have been kept");
-        $('.modal .modal-footer .btn-primary').click(); // close the modal
+        $('footer.modal-footer .btn-primary').click(); // close the modal
 
         form.$buttons.find('.o_form_button_save').click(); // save the record
 
@@ -6219,8 +6219,8 @@ QUnit.module('Views', {
         form.$buttons.find('.o_form_button_save').click(); // save duplicated record
 
         form.sidebar.$('a:contains(Delete)').click(); // delete duplicated record
-        assert.strictEqual($('.modal').length, 1, "should have opened a confirm dialog");
-        $('.modal .modal-footer .btn-primary').click(); // confirm
+        assert.strictEqual($('[role="dialog"]').length, 1, "should have opened a confirm dialog");
+        $('footer.modal-footer .btn-primary').click(); // confirm
 
         assert.strictEqual(form.$('.o_field_widget').text(), 'first record',
             "should have come back to previous record");
@@ -6301,12 +6301,12 @@ QUnit.module('Views', {
         });
 
         form.$('.o_external_button').click(); // open the many2one record in a modal
-        $('.modal .o_external_button').click(); // in the modal, open the many2one record in another modal
+        $('[role="dialog"] .o_external_button').click(); // in the modal, open the many2one record in another modal
 
-        $('.modal:nth(1) .o_field_widget[name=display_name]').val('new name').trigger('input');
-        $('.modal:nth(1) .modal-footer .btn-primary').first().click(); // save changes
+        $('[role="dialog"]:nth(1) .o_field_widget[name=display_name]').val('new name').trigger('input');
+        $('[role="dialog"]:nth(1) footer .btn-primary').first().click(); // save changes
 
-        assert.strictEqual($('.modal .o_field_widget[name=trululu] input').val(), 'new name',
+        assert.strictEqual($('[role="dialog"] .o_field_widget[name=trululu] input').val(), 'new name',
             "record should have been reloaded");
         assert.verifySteps([
             "read", // main record
@@ -6409,11 +6409,11 @@ QUnit.module('Views', {
             viewOptions: {mode: 'edit'},
         });
         form.$('.o_external_button').click();
-        assert.strictEqual($('.modal-body .o_form_view .o_list_view .o_data_cell').text(), "yopblip",
+        assert.strictEqual($('main.modal-body .o_form_view .o_list_view .o_data_cell').text(), "yopblip",
             "table has some initial order");
 
-        $('.modal-body .o_form_view .o_list_view th').click();
-        assert.strictEqual($('.modal-body .o_form_view .o_list_view .o_data_cell').text(), "blipyop",
+        $('main.modal-body .o_form_view .o_list_view th').click();
+        assert.strictEqual($('main.modal-body .o_form_view .o_list_view .o_data_cell').text(), "blipyop",
             "table is now sorted");
         form.destroy();
     });
@@ -6849,7 +6849,7 @@ QUnit.module('Views', {
         core.bus.on('clear_cache', form, assert.step.bind(assert, 'clear_cache'));
 
         form.sidebar.$('a:contains(Delete)').click();
-        $('.modal .modal-footer .btn-primary').click(); // confirm
+        $('footer.modal-footer .btn-primary').click(); // confirm
 
         assert.verifySteps(['unlink', 'clear_cache']);
 
diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js
index 04c1c603118f29866370ec1cb8882ba88b6613d2..2cc7a2431efc22e5a3954a69c0323e9ad0a6f880 100644
--- a/addons/web/static/tests/views/kanban_tests.js
+++ b/addons/web/static/tests/views/kanban_tests.js
@@ -182,12 +182,12 @@ QUnit.module('Views', {
             "last column should contain 3 records");
         envIDs = [4];
         kanban.$('.o_kanban_group:last .o_column_archive_records').click(); // Click on 'Archive All'
-        assert.ok($('.modal').length, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-default').click(); // Click on 'Cancel'
+        assert.ok($('[role="dialog"]').length, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-default').click(); // Click on 'Cancel'
         assert.strictEqual(kanban.$('.o_kanban_group:last .o_kanban_record').length, 3, "still last column should contain 3 records");
         kanban.$('.o_kanban_group:last .o_column_archive_records').click();
-        assert.ok($('.modal').length, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-primary').click(); // Click on 'Ok'
+        assert.ok($('[role="dialog"]').length, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-primary').click(); // Click on 'Ok'
         assert.strictEqual(kanban.$('.o_kanban_group:last .o_kanban_record').length, 0, "last column should not contain any records");
         kanban.destroy();
     });
@@ -1204,16 +1204,16 @@ QUnit.module('Views', {
                 which: $.ui.keyCode.ENTER,
             }));
 
-        assert.strictEqual($('.modal .o_form_view.o_form_editable').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_form_view.o_form_editable').length, 1,
             "a form view dialog should have been opened (in edit)");
-        assert.strictEqual($('.modal .o_field_many2one input').val(), 'hello',
+        assert.strictEqual($('[role="dialog"] .o_field_many2one input').val(), 'hello',
             "the correct product_id should already be set");
 
         // specify a name and save
-        $('.modal input[name=foo]').val('test').trigger('input');
-        $('.modal-footer .btn-primary').click();
+        $('[role="dialog"] input[name=foo]').val('test').trigger('input');
+        $('footer.modal-footer .btn-primary').click();
 
-        assert.strictEqual($('.modal').length, 0, "the modal should be closed");
+        assert.strictEqual($('[role="dialog"]').length, 0, "the modal should be closed");
         assert.strictEqual(kanban.$('.o_kanban_group:first .o_kanban_record').length, 3,
             "there should be 3 records in first column");
         var $firstRecord = kanban.$('.o_kanban_group:first .o_kanban_record:first');
@@ -1793,13 +1793,13 @@ QUnit.module('Views', {
 
         // delete second column (first cancel the confirm request, then confirm)
         kanban.$('.o_kanban_group:last .o_column_delete').click(); // click on delete
-        assert.ok($('.modal').length, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-default').click(); // click on cancel
+        assert.ok($('[role="dialog"]').length, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-default').click(); // click on cancel
         assert.strictEqual(kanban.$('.o_kanban_group:last').data('id'), 5,
             'column [5, "xmo"] should still be there');
         kanban.$('.o_kanban_group:last .o_column_delete').click(); // click on delete
-        assert.ok($('.modal').length, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-primary').click(); // click on confirm
+        assert.ok($('[role="dialog"]').length, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-primary').click(); // click on confirm
         assert.strictEqual(kanban.$('.o_kanban_group:last').data('id'), 3,
             'last column should now be [3, "hello"]');
         assert.strictEqual(kanban.$('.o_kanban_group').length, 2, "should still have two columns");
@@ -1870,7 +1870,7 @@ QUnit.module('Views', {
         assert.strictEqual(kanban.$('.o_kanban_group').length, 3, "should have two columns");
 
         kanban.$('.o_kanban_group:last .o_column_delete').click();
-        $('.modal .modal-footer .btn-primary').click();
+        $('footer.modal-footer .btn-primary').click();
 
         assert.strictEqual(kanban.$('.o_kanban_group').length, 2, "should have twos columns");
 
@@ -1912,33 +1912,33 @@ QUnit.module('Views', {
 
         // edit the title of column [5, 'xmo'] and close without saving
         kanban.$('.o_kanban_group[data-id=5] .o_column_edit').click(); // click on 'Edit'
-        assert.ok($('.modal .o_form_editable').length, 'a form view should be open in a modal');
-        assert.strictEqual($('.modal .o_form_editable input').val(), 'xmo',
+        assert.ok($('[role="dialog"] .o_form_editable').length, 'a form view should be open in a modal');
+        assert.strictEqual($('[role="dialog"] .o_form_editable input').val(), 'xmo',
             'the name should be "xmo"');
-        $('.modal .o_form_editable input').val('ged').trigger('input'); // change the value
+        $('[role="dialog"] .o_form_editable input').val('ged').trigger('input'); // change the value
         nbRPCs = 0;
-        $('.modal .modal-header .close').click(); // click on the cross to close the modal
-        assert.ok(!$('.modal').length, 'the modal should be closed');
+        $('header.modal-header .close').click(); // click on the cross to close the modal
+        assert.ok(!$('[role="dialog"]').length, 'the modal should be closed');
         assert.strictEqual(kanban.$('.o_kanban_group[data-id=5] .o_column_title').text(), 'xmo',
             'title of the column should still be "xmo"');
         assert.strictEqual(nbRPCs, 0, 'no RPC should have been done');
 
         // edit the title of column [5, 'xmo'] and discard
         kanban.$('.o_kanban_group[data-id=5] .o_column_edit').click(); // click on 'Edit'
-        $('.modal .o_form_editable input').val('ged').trigger('input'); // change the value
+        $('[role="dialog"] .o_form_editable input').val('ged').trigger('input'); // change the value
         nbRPCs = 0;
-        $('.modal .modal-footer .btn-default').click(); // click on discard
-        assert.ok(!$('.modal').length, 'the modal should be closed');
+        $('footer.modal-footer .btn-default').click(); // click on discard
+        assert.ok(!$('[role="dialog"]').length, 'the modal should be closed');
         assert.strictEqual(kanban.$('.o_kanban_group[data-id=5] .o_column_title').text(), 'xmo',
             'title of the column should still be "xmo"');
         assert.strictEqual(nbRPCs, 0, 'no RPC should have been done');
 
         // edit the title of column [5, 'xmo'] and save
         kanban.$('.o_kanban_group[data-id=5] .o_column_edit').click(); // click on 'Edit'
-        $('.modal .o_form_editable input').val('ged').trigger('input'); // change the value
+        $('[role="dialog"] .o_form_editable input').val('ged').trigger('input'); // change the value
         nbRPCs = 0;
-        $('.modal .modal-footer .btn-primary').click(); // click on save
-        assert.ok(!$('.modal').length, 'the modal should be closed');
+        $('footer.modal-footer .btn-primary').click(); // click on save
+        assert.ok(!$('[role="dialog"]').length, 'the modal should be closed');
         assert.strictEqual(kanban.$('.o_kanban_group[data-id=5] .o_column_title').text(), 'ged',
             'title of the column should be "ged"');
         assert.strictEqual(nbRPCs, 4, 'should have done 1 write, 1 read_group and 2 search_read');
@@ -2058,16 +2058,16 @@ QUnit.module('Views', {
         // click to see the examples
         kanban.$('.o_column_quick_create .o_kanban_examples').click();
 
-        assert.strictEqual($('.modal .o_kanban_examples_dialog').length, 1,
+        assert.strictEqual($('[role="dialog"] .o_kanban_examples_dialog').length, 1,
             "should have open the examples dialog");
-        assert.strictEqual($('.modal .o_kanban_examples_dialog_nav li').length, 2,
+        assert.strictEqual($('[role="dialog"] .o_kanban_examples_dialog_nav li').length, 2,
             "should have two examples (in the menu)");
-        assert.strictEqual($('.modal .o_kanban_examples_dialog_nav a').text(),
+        assert.strictEqual($('[role="dialog"] .o_kanban_examples_dialog_nav a').text(),
             ' A first example  A second example ', "example names should be correct");
-        assert.strictEqual($('.modal .o_kanban_examples_dialog_content .tab-pane').length, 2,
+        assert.strictEqual($('[role="dialog"] .o_kanban_examples_dialog_content .tab-pane').length, 2,
             "should have two examples");
 
-        var $firstPane = $('.modal .o_kanban_examples_dialog_content .tab-pane:first');
+        var $firstPane = $('[role="dialog"] .o_kanban_examples_dialog_content .tab-pane:first');
         assert.strictEqual($firstPane.find('.o_kanban_examples_group').length, 3,
             "there should be 3 stages in the first example");
         assert.strictEqual($firstPane.find('h6').text(), 'Column 1Column 2Column 3',
@@ -2075,7 +2075,7 @@ QUnit.module('Views', {
         assert.strictEqual($firstPane.find('.o_kanban_examples_description').text().trim(),
             "Some description", "the correct description should be displayed");
 
-        var $secondPane = $('.modal .o_kanban_examples_dialog_content .tab-pane:nth(1)');
+        var $secondPane = $('[role="dialog"] .o_kanban_examples_dialog_content .tab-pane:nth(1)');
         assert.strictEqual($secondPane.find('.o_kanban_examples_group').length, 2,
             "there should be 2 stages in the second example");
         assert.strictEqual($secondPane.find('h6').text(), 'Col 1Col 2',
diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js
index 8aa70c1c0993b90688b3b8ef1f2620f1b36bd85b..ed57c6968ac4d3819a02c79184a2bf973d272345 100644
--- a/addons/web/static/tests/views/list_tests.js
+++ b/addons/web/static/tests/views/list_tests.js
@@ -880,7 +880,7 @@ QUnit.module('Views', {
         list.sidebar.$('a:contains(Delete)').click();
         assert.ok($('body').hasClass('modal-open'), 'body should have modal-open clsss');
 
-        $('body .modal-dialog button span:contains(Ok)').click();
+        $('body [role="dialog"] button span:contains(Ok)').click();
 
         assert.strictEqual(list.$('tbody td.o_list_record_selector').length, 3, "should have 3 records");
         list.destroy();
@@ -916,13 +916,13 @@ QUnit.module('Views', {
 
         assert.verifySteps(['/web/dataset/search_read']);
         list.sidebar.$('a:contains(Archive)').click();
-        assert.strictEqual($('.modal').length, 1, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-default').click(); // Click on 'Cancel'
+        assert.strictEqual($('[role="dialog"]').length, 1, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-default').click(); // Click on 'Cancel'
         assert.strictEqual(list.$('tbody td.o_list_record_selector').length, 4, "still should have 4 records");
 
         list.sidebar.$('a:contains(Archive)').click();
-        assert.strictEqual($('.modal').length, 1, 'a confirm modal should be displayed');
-        $('.modal .modal-footer .btn-primary').click(); // Click on 'Ok'
+        assert.strictEqual($('[role="dialog"]').length, 1, 'a confirm modal should be displayed');
+        $('footer.modal-footer .btn-primary').click(); // Click on 'Ok'
         assert.strictEqual(list.$('tbody td.o_list_record_selector').length, 3, "should have 3 records");
         assert.verifySteps(['/web/dataset/search_read', '/web/dataset/call_kw/foo/write', '/web/dataset/search_read']);
         list.destroy();
@@ -2759,10 +2759,10 @@ QUnit.module('Views', {
         list.$('.o_data_cell:first').click();
         list.$('input[name="foo"]').val("hello").trigger('input');
         list.$buttons.find('.o_list_button_discard').click();
-        assert.strictEqual($('.modal:visible').length, 1,
+        assert.strictEqual($('[role="dialog"]:visible').length, 1,
             "a modal to ask for discard should be visible");
 
-        $('.modal:visible .btn-primary').click();
+        $('[role="dialog"]:visible .btn-primary').click();
         assert.strictEqual(list.$('.o_data_cell:first').text(), "yop",
             "first cell should still contain 'yop'");
 
@@ -3555,7 +3555,7 @@ QUnit.module('Views', {
         // delete a record
         list.$('.o_data_row:first .o_list_record_selector input').click();
         list.sidebar.$('a:contains(Delete)').click();
-        $('.modal .modal-footer .btn-primary').click(); // confirm
+        $('footer.modal-footer .btn-primary').click(); // confirm
 
         assert.verifySteps([
             'create',
diff --git a/addons/web/static/tests/views/view_dialogs_tests.js b/addons/web/static/tests/views/view_dialogs_tests.js
index 39484795f5a46c79281fc32168cf3d824268bec7..2d6af1b5e1408d23843aed049e1fb9c2e80bdf40 100644
--- a/addons/web/static/tests/views/view_dialogs_tests.js
+++ b/addons/web/static/tests/views/view_dialogs_tests.js
@@ -90,9 +90,9 @@ QUnit.module('Views', {
             res_id: 1,
         }).open();
 
-        assert.notOk($('div.modal .modal-body button').length,
+        assert.notOk($('main.modal-body button').length,
             "should not have any button in body");
-        assert.strictEqual($('div.modal .modal-footer button').length, 1,
+        assert.strictEqual($('footer.modal-footer button').length, 1,
             "should have only one button in footer");
         parent.destroy();
     });
@@ -118,7 +118,7 @@ QUnit.module('Views', {
             res_id: 1,
         }).open();
 
-        assert.strictEqual($('div.modal button.btn-primary').length, 1,
+        assert.strictEqual($('[role="dialog"] button.btn-primary').length, 1,
             "should have 1 buttons in modal");
 
         $('.o_field_x2many_list_row_add a').click();
@@ -127,7 +127,7 @@ QUnit.module('Views', {
             keyCode: $.ui.keyCode.ESCAPE,
         }));
 
-        assert.strictEqual($('div.modal button.btn-primary').length, 1,
+        assert.strictEqual($('[role="dialog"] button.btn-primary').length, 1,
             "should still have 1 buttons in modal");
         parent.destroy();
     });
@@ -334,14 +334,14 @@ QUnit.module('Views', {
         form.$('.o_field_widget .o_field_many2one[name=instrument] input').click();
         $('ul.ui-autocomplete.ui-front.ui-menu.ui-widget.ui-widget-content li.o_m2o_dropdown_option').first().click();
 
-        var $modal = $('.modal-dialog.modal-lg');
+        var $modal = $('.modal-lg');
 
         assert.equal($modal.length, 1,
             'There should be one modal');
 
         $modal.find('.o_field_x2many_list_row_add a').click();
 
-        var $modals = $('.modal-dialog.modal-lg');
+        var $modals = $('.modal-lg');
 
         assert.equal($modals.length, 2,
             'There should be two modals');
@@ -351,7 +351,7 @@ QUnit.module('Views', {
 
         $second_modal.find('.o_select_button').click();
 
-        $modal = $('.modal-dialog.modal-lg');
+        $modal = $('.modal-lg');
 
         assert.equal($modal.length, 1,
             'There should be one modal');
diff --git a/addons/web/static/tests/widgets/data_export_tests.js b/addons/web/static/tests/widgets/data_export_tests.js
index 4569a5a6290d6af8450a5d7471b8f67d966f7667..4948db0747443e4029c8737849de40bd5e5233dc 100644
--- a/addons/web/static/tests/widgets/data_export_tests.js
+++ b/addons/web/static/tests/widgets/data_export_tests.js
@@ -107,15 +107,15 @@ QUnit.module('widgets', {
         list.$('thead th.o_list_record_selector input').click();
         list.sidebar.$('a:contains(Export)').click();
 
-        assert.strictEqual($('.modal').length, 1, "a modal dialog should be open");
+        assert.strictEqual($('[role="dialog"]').length, 1, "a modal dialog should be open");
         assert.strictEqual($('span.o_tree_column:contains(Activities)').length, 1,
             "the Activities field should be in the list of exportable fields");
 
         // select the field Description, click on add, then export and close
-        $('.modal span:contains(Description)').click();
-        $('.modal .o_add_field').click();
-        $('.modal span:contains(Export To File)').click();
-        $('.modal span:contains(Close)').click();
+        $('[role="dialog"] span:contains(Description)').click();
+        $('[role="dialog"] .o_add_field').click();
+        $('[role="dialog"] span:contains(Export To File)').click();
+        $('[role="dialog"] span:contains(Close)').click();
 
         list.destroy();
         framework.blockUI = blockUI;
@@ -185,26 +185,26 @@ QUnit.module('widgets', {
         // Open the export modal
         list.$('thead th.o_list_record_selector input').click();
         list.sidebar.$('a:contains(Export)').click();
-        assert.strictEqual($('.modal').length, 1,
+        assert.strictEqual($('[role="dialog"]').length, 1,
             "a modal dialog should be open");
 
         // Select 'Activities' in fields to export
-        assert.strictEqual($('.modal select.o_fields_list option').length, 0,
+        assert.strictEqual($('[role="dialog"] select.o_fields_list option').length, 0,
             "the fields list should be empty");
-        $('.modal .o_export_tree_item:contains(Activities)').click();
-        $('.modal button:contains(Add)').click();
-        assert.strictEqual($('.modal select.o_fields_list option').length, 1,
+        $('[role="dialog"] .o_export_tree_item:contains(Activities)').click();
+        $('[role="dialog"] button:contains(Add)').click();
+        assert.strictEqual($('[role="dialog"] select.o_fields_list option').length, 1,
             "there should be one item in the fields list");
 
         // Save fields list
-        $('.modal a:contains(Save fields list)').click();
-        $('.modal .o_save_list > input').val('fields list').trigger('input');
-        $('.modal .o_save_list > button').click();
+        $('[role="dialog"] a:contains(Save fields list)').click();
+        $('[role="dialog"] .o_save_list > input').val('fields list').trigger('input');
+        $('[role="dialog"] .o_save_list > button').click();
         assert.verifySteps(['build_search_data', 'create'],
             "create should have been called");
 
         // Close the modal and destroy list
-        $('.modal button span:contains(Close)').click();
+        $('[role="dialog"] button span:contains(Close)').click();
         list.destroy();
 
         // restore create function
diff --git a/addons/web/views/database_manager.html b/addons/web/views/database_manager.html
index 11037f13d2585bdc06502974af1bce48feb7ec68..789105fc9a8f9187a218d4d789f0a4b958c0aac5 100644
--- a/addons/web/views/database_manager.html
+++ b/addons/web/views/database_manager.html
@@ -5,6 +5,7 @@
   <title>Odoo</title>
   <link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon">
   <link rel="stylesheet" href="/web/static/lib/fontawesome/css/font-awesome.css">
+  <link rel="stylesheet" href="/web/static/lib/fontawesome/css/font-awesome-suffix.css">
   <link rel="stylesheet" href="/web/static/lib/bootstrap/css/bootstrap.css">
   <script src="/web/static/lib/jquery/jquery.js" type="text/javascript"></script>
   <script src="/web/static/lib/bootstrap/js/modal.js"></script>
diff --git a/addons/web/views/report_templates.xml b/addons/web/views/report_templates.xml
index 5c08be5df9fef83ae1d4e1ec3afcb7f92d34a01b..10d79c49c3f98e34b174eb9702c79a7973797d55 100644
--- a/addons/web/views/report_templates.xml
+++ b/addons/web/views/report_templates.xml
@@ -18,6 +18,7 @@
         <link href="https://fonts.googleapis.com/css?family=Work+Sans:thin,light,regular,medium,bold,semi-bold" rel="stylesheet"/>
 
         <link href="/web/static/lib/fontawesome/css/font-awesome.css" rel="stylesheet" type="text/css"/>
+        <link href="/web/static/lib/fontawesome/css/font-awesome-suffix.css" rel="stylesheet" type="text/css"/>
 
 
         <link rel="stylesheet" type="text/scss" href="/web/static/src/scss/report.scss"/>
@@ -152,7 +153,7 @@
             <div class="pull-right">
                 <h3 class="mt0 text-right" t-field="company.report_header"/>
             </div>
-            <img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % to_text(company.logo)" class="pull-left"/>
+            <img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % to_text(company.logo)" class="pull-left" alt="Logo"/>
             <div class="pull-left company_address">
                 <div>
                     <strong t-field="company.partner_id.name"/>
@@ -170,10 +171,10 @@
         <div class="footer o_background_footer">
             <div class="text-center">
                 <ul class="list-inline">
-                    <li t-if="company.phone"><i class="fa fa-phone"/> <span t-field="company.phone"/></li>
-                    <li t-if="company.email"><i class="fa fa-at"/> <span t-field="company.email"/></li>
-                    <li t-if="company.website"><i class="fa fa-globe"/> <span t-field="company.website"/></li>
-                    <li t-if="company.vat"><i class="fa fa-building-o"/><t t-esc="company.country_id.vat_label or 'TIN'"/>: <span t-field="company.vat"/></li>
+                    <li t-if="company.phone"><i class="fa fa-phone" role="img" aria-label="Phone" title="Phone"/> <span t-field="company.phone"/></li>
+                    <li t-if="company.email"><i class="fa fa-at" role="img" aria-label="Email" title="Email"/> <span t-field="company.email"/></li>
+                    <li t-if="company.website"><i class="fa fa-globe" role="img" aria-label="Website" title="Website"/> <span t-field="company.website"/></li>
+                    <li t-if="company.vat"><i class="fa fa-building-o" role="img" aria-label="Fiscal number"/><t t-esc="company.country_id.vat_label or 'TIN'"/>: <span t-field="company.vat"/></li>
                 </ul>
                 <div t-field="company.report_footer"/>
                 <div t-if="not type_html" class="text-muted">
@@ -190,7 +191,7 @@
         <div class="header o_boxed_header">
             <div class="row mb8">
                 <div class="col-xs-6">
-                    <img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % to_text(company.logo)"/>
+                    <img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % to_text(company.logo)" alt="Logo"/>
                 </div>
                 <div class="col-xs-6 text-right mb4">
                     <h4 class="mt0" t-field="company.report_header"/>
@@ -226,7 +227,7 @@
         <div class="header o_clean_header">
             <div class="row">
                 <div class="col-xs-6">
-                    <img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % to_text(company.logo)"/>
+                    <img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % to_text(company.logo)" alt="Logo"/>
                 </div>
                 <div class="col-xs-5 col-xs-offset-1" name="company_address">
                     <ul class="list-unstyled">
@@ -269,7 +270,7 @@
         <div class="header">
             <div class="row">
                 <div class="col-xs-3 mb4">
-                    <img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % to_text(company.logo)" style="max-height: 45px;"/>
+                    <img t-if="company.logo" t-att-src="'data:image/png;base64,%s' % to_text(company.logo)" style="max-height: 45px;" alt="Logo"/>
                 </div>
                 <div class="col-xs-9 text-right" style="margin-top:22px;" t-field="company.report_header" name="moto"/>
             </div>
diff --git a/addons/web/views/webclient_templates.xml b/addons/web/views/webclient_templates.xml
index ea0fb57a38d74cfabb1d83212af9c27b76fd12e4..de81593b37a815f5864f1513f9d071e4d70aad31 100644
--- a/addons/web/views/webclient_templates.xml
+++ b/addons/web/views/webclient_templates.xml
@@ -39,6 +39,7 @@
 
         <link rel="stylesheet" type="text/css" href="/web/static/lib/jquery.ui/jquery-ui.css"/>
         <link rel="stylesheet" type="text/css" href="/web/static/lib/fontawesome/css/font-awesome.css"/>
+        <link rel="stylesheet" type="text/css" href="/web/static/lib/fontawesome/css/font-awesome-suffix.css"/>
         <link rel="stylesheet" type="text/scss" href="/web/static/lib/bootstrap-datetimepicker/src/scss/_bootstrap-datetimepicker.scss"/>
         <link rel="stylesheet" type="text/css" href="/web/static/lib/select2/select2.css"/>
         <link rel="stylesheet" type="text/css" href="/web/static/lib/select2-bootstrap-css/select2-bootstrap.css"/>
@@ -331,7 +332,7 @@
             <div class="row">
                 <div class="col-md-6 col-md-offset-3 o_database_list">
                     <div class="text-center">
-                        <img t-attf-src="/web/binary/company_logo{{ '?dbname='+db if db else '' }}"/>
+                        <img t-attf-src="/web/binary/company_logo{{ '?dbname='+db if db else '' }}" alt="Logo"/>
                     </div>
                     <t t-raw="0"/>
                     <div class="text-center" t-if="not disable_footer">
@@ -355,7 +356,7 @@
                     <div class="input-group">
                         <input type="text" name="db" t-att-value="request.db" id="db" class="form-control" required="required" readonly="readonly"/>
                         <span class="input-group-btn">
-                          <a href="/web/database/selector" class="btn btn-default">Select <i class="fa fa-database"></i></a>
+                          <a role="button" href="/web/database/selector" class="btn btn-default">Select <i class="fa fa-database" role="img" aria-label="Database" title="Database"></i></a>
                         </span>
                     </div>
                 </div>
@@ -370,10 +371,10 @@
                     <input type="password" name="password" id="password" class="form-control" required="required" autocomplete="current-password" t-att-autofocus="'autofocus' if login else None" maxlength="4096"/>
                 </div>
 
-                <p class="alert alert-danger" t-if="error">
+                <p class="alert alert-danger" t-if="error" role="alert">
                     <t t-esc="error"/>
                 </p>
-                <p class="alert alert-success" t-if="message">
+                <p class="alert alert-success" t-if="message" role="status">
                     <t t-esc="message"/>
                 </p>
 
@@ -386,13 +387,13 @@
     </template>
 
     <template id="web.menu">
-        <ul class="nav navbar-nav navbar-left oe_application_menu_placeholder" style="display: none;">
+        <ul class="nav navbar-nav navbar-left oe_application_menu_placeholder" style="display: none;" role="menu">
             <li t-foreach="menu_data['children']" t-as="menu">
                 <t t-call="web.menu_link"/>
             </li>
             <li id="menu_more_container" class="dropdown" style="display: none;">
-                <a href="#" class="dropdown-toggle" data-toggle="dropdown">More <b class="caret"></b></a>
-                <ul id="menu_more" class="dropdown-menu"></ul>
+                <a role="menuitem" aria-haspopup="true" href="#" class="dropdown-toggle" data-toggle="dropdown" id="more_menu_button">More <b class="caret"></b></a>
+                <ul id="menu_more" class="dropdown-menu" role="menu"></ul>
             </li>
         </ul>
 
@@ -402,7 +403,7 @@
     <template id="web.menu_secondary">
         <a class="o_sub_menu_logo" t-att-href="'/web/?debug' if debug else '/web'">
             <span class="oe_logo_edit">Edit Company data</span>
-            <img src='/web/binary/company_logo'/>
+            <img src='/web/binary/company_logo' alt="Logo"/>
         </a>
         <div class="o_sub_menu_content">
             <t t-foreach="menu_data['children']" t-as="menu">
@@ -432,6 +433,7 @@
     <template id="web.menu_link">
         <t t-set="debug_param" t-value="'?&amp;debug=' if debug else ''"/>
         <a t-att-href="'/web%s#menu_id=%s&amp;action=%s' % (debug_param, menu['id'], menu['action'] and menu['action'].split(',')[1] or '')"
+            role="menuitem"
             t-att-class="'oe_menu_toggler' if menu.get('children') else 'oe_menu_leaf'"
             t-att-data-menu="menu['id']"
             t-att-data-menu-xmlid="menu.get('xmlid')"
@@ -690,23 +692,25 @@
             <t t-set="head" t-value="head_web + (head or '')"/>
             <t t-set="body_classname" t-value="'o_web_client'"/>
 
-            <nav id="oe_main_menu_navbar" class="navbar navbar-inverse" groups="base.group_user,base.group_portal">
-                <div class="navbar-header">
-                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
-                        <span class="icon-bar"></span>
-                        <span class="icon-bar"></span>
-                        <span class="icon-bar"></span>
-                    </button>
-                </div>
-                <div class="navbar-collapse collapse">
-                    <t t-call="web.menu"/>
-                </div>
-            </nav>
+            <header id="oe_main_menu_navbar">
+                <nav class="navbar navbar-inverse" groups="base.group_user,base.group_portal">
+                    <div class="navbar-header">
+                        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+                            <span class="icon-bar"></span>
+                            <span class="icon-bar"></span>
+                            <span class="icon-bar"></span>
+                        </button>
+                    </div>
+                    <div class="navbar-collapse collapse">
+                        <t t-call="web.menu"/>
+                    </div>
+                </nav>
+            </header>
             <div class="o_main">
-                <div class="o_sub_menu" groups="base.group_user,base.group_portal">
+                <aside class="o_sub_menu" groups="base.group_user,base.group_portal" aria-label="Submenu">
                     <t t-call="web.menu_secondary"/>
-                </div>
-                <div class="o_main_content"/>
+                </aside>
+                <main class="o_main_content"/>
             </div>
         </t>
     </template>
diff --git a/addons/web_diagram/static/tests/diagram_tests.js b/addons/web_diagram/static/tests/diagram_tests.js
index 8d453f8be1ad360416d1c8ebbe19a357e608db33..41c0ed4d32c315dea97fde3bb6f9f15040762980 100644
--- a/addons/web_diagram/static/tests/diagram_tests.js
+++ b/addons/web_diagram/static/tests/diagram_tests.js
@@ -152,9 +152,9 @@ QUnit.module('Views', {
                 "diagram should only have the default nodes at start");
 
             diagram.$buttons.find('.o_diagram_new_button').click();
-            $('.modal .modal-body input:first').val('a new node').trigger('input');
-            $('.modal .modal-body input:last').val(1).trigger('input');
-            $('.modal .modal-footer button.btn-primary').click();  // save
+            $('main.modal-body input:first').val('a new node').trigger('input');
+            $('main.modal-body input:last').val(1).trigger('input');
+            $('footer.modal-footer button.btn-primary').click();  // save
 
             assert.strictEqual(diagram.$('.o_diagram ellipse').length, 3,
                 "diagram should contain 3 'ellipse' nodes now (nodes 2, 3 and the new one)");
@@ -184,8 +184,8 @@ QUnit.module('Views', {
                 "diagram first node should have default name at first");
 
             CuteNode.double_click_callback({id: 1});
-            $('.modal .modal-body input:first').val('An edited node').trigger('input');
-            $('.modal .modal-footer button.btn-primary').click();  // save
+            $('main.modal-body input:first').val('An edited node').trigger('input');
+            $('footer.modal-footer button.btn-primary').click();  // save
 
             assert.strictEqual(diagram.$('text').first().text(), 'An edited node',
                 "diagram first node should now have new name");
@@ -212,7 +212,7 @@ QUnit.module('Views', {
                 "diagram should contain 2 'ellipse' nodes (nodes 2 and 3)");
 
             CuteNode.destruction_callback({id: 2});
-            $('.modal .modal-footer button.btn-primary').click();  // Confirm
+            $('footer.modal-footer button.btn-primary').click();  // Confirm
 
             assert.strictEqual(diagram.$('.o_diagram ellipse').length, 1,
                 "diagram should contain 1 'ellipse' nodes (node 2)");
@@ -245,8 +245,8 @@ QUnit.module('Views', {
                 get_start: function () {return {id: 1};},
                 get_end: function () {return {id: 3};},
             });
-            $('.modal .modal-body input:first').val('a transition from 1 to 3').trigger('input');
-            $('.modal .modal-footer button.btn-primary').click();  // Confirm
+            $('main.modal-body input:first').val('a transition from 1 to 3').trigger('input');
+            $('footer.modal-footer button.btn-primary').click();  // Confirm
 
             assert.strictEqual(diagram.$('.o_diagram path').length, 5,
                 "diagram should contain 4 'path' nodes (#raphael-marker-block, transitions 1, 2, 3, and the new one)");
@@ -278,8 +278,8 @@ QUnit.module('Views', {
                 "diagram should only have the default edges at start");
 
             CuteEdge.double_click_callback({id: 1});
-            $('.modal .modal-body input:first').val('An edited edge').trigger('input');
-            $('.modal .modal-footer button.btn-primary').click();  // save
+            $('main.modal-body input:first').val('An edited edge').trigger('input');
+            $('footer.modal-footer button.btn-primary').click();  // save
 
             assert.strictEqual(diagram.$('text:contains(a transition from 1 to 2)').length, 0,
                 "diagram edge should not have default name anymore");
@@ -310,7 +310,7 @@ QUnit.module('Views', {
                 "diagram edge should have default name at start");
 
             CuteEdge.destruction_callback({id: 3});
-            $('.modal .modal-footer button.btn-primary').click();  // Confirm
+            $('footer.modal-footer button.btn-primary').click();  // Confirm
 
             assert.strictEqual(diagram.$('.o_diagram path').length, 3,
                 "diagram should contain 3 'path' nodes (#raphael-marker-block, and transitions 1 and 2)");
diff --git a/addons/web_editor/static/lib/summernote/src/js/Renderer.js b/addons/web_editor/static/lib/summernote/src/js/Renderer.js
index 2c2c8f4ac00beaa2cc5141d7054bb04f1a1d55a9..c6142333d30befebdf4742feca3c0e14069971b8 100644
--- a/addons/web_editor/static/lib/summernote/src/js/Renderer.js
+++ b/addons/web_editor/static/lib/summernote/src/js/Renderer.js
@@ -94,18 +94,18 @@ define([
      * @param {String} [footer='']
      */
     var tplDialog = function (className, title, body, footer) {
-      return '<div class="' + className + ' modal" aria-hidden="false">' +
+      return '<div class="' + className + ' modal" role="dialog" aria-hidden="false">' +
                '<div class="modal-dialog">' +
                  '<div class="modal-content">' +
                    (title ?
-                   '<div class="modal-header">' +
+                   '<header class="modal-header">' +
                      '<button type="button" class="close" aria-hidden="true" tabindex="-1">&times;</button>' +
                      '<h4 class="modal-title">' + title + '</h4>' +
-                   '</div>' : ''
+                   '</header>' : ''
                    ) +
-                   '<div class="modal-body">' + body + '</div>' +
+                   '<main class="modal-body">' + body + '</main>' +
                    (footer ?
-                   '<div class="modal-footer">' + footer + '</div>' : ''
+                   '<header class="modal-footer">' + footer + '</header>' : ''
                    ) +
                  '</div>' +
                '</div>' +
@@ -817,7 +817,7 @@ define([
       $dialog.addClass('note-air-layout');
       $dialog.attr('id', 'note-dialog-' + id);
       $dialog.find('button.close, a.modal-close').click(function () {
-        $(this).closest('.modal').modal('hide');
+        $(this).closest('[role="dialog"]').modal('hide');
       });
       $dialog.appendTo($container);
     };
@@ -905,7 +905,7 @@ define([
       var $dialogContainer = options.dialogsInBody ? $(document.body) : $editor;
       var $dialog = $(tplDialogs(langInfo, options)).prependTo($dialogContainer);
       $dialog.find('button.close, a.modal-close').click(function () {
-        $(this).closest('.modal').modal('hide');
+        $(this).closest('[role="dialog"]').modal('hide');
       });
 
       //09. Editor/Holder switch
diff --git a/addons/web_editor/static/src/js/backend/fields.js b/addons/web_editor/static/src/js/backend/fields.js
index a636b7e5be3bb783c14a190992d3d0ca2519a5bc..00c84c5fe92130d123f81ce678faae238b188505 100644
--- a/addons/web_editor/static/src/js/backend/fields.js
+++ b/addons/web_editor/static/src/js/backend/fields.js
@@ -400,7 +400,7 @@ var FieldTextHtml = AbstractField.extend({
         return src;
     },
     old_initialize_content: function () {
-        this.$el.closest('.modal-body').css('max-height', 'none');
+        this.$el.closest('main.modal-body').css('max-height', 'none');
         this.$iframe = this.$el.find('iframe');
         this.document = null;
         this.$body = $();
diff --git a/addons/web_editor/static/src/js/tours/rte.js b/addons/web_editor/static/src/js/tours/rte.js
index 6d865116ec2524fca130eb01dff8645b3382fec5..6d686353cfb0ff47418ab38e0768e23fe97819b5 100644
--- a/addons/web_editor/static/src/js/tours/rte.js
+++ b/addons/web_editor/static/src/js/tours/rte.js
@@ -157,7 +157,7 @@ tour.register('rte', {
     trigger: '#editor-media-icon.active span.fa:first',
 }, {
     content: "save pictogram",
-    trigger: '.modal-footer > .btn-primary',
+    trigger: 'footer.modal-footer .btn-primary',
     extra_trigger: '#editor-media-icon.active span.o_selected',
 }, {
     content: "select a size for the pictogram",
@@ -180,8 +180,8 @@ tour.register('rte', {
     extra_trigger: 'a#link-preview:containsRegex(/^<span [^>]+><\\/span>$/) > span.fa.fa-3x.pull-right',
 }, {
     content: "save link",
-    trigger: '.modal-footer > .btn-primary',
-    extra_trigger: 'a#link-preview.btn.btn-success:containsRegex(/^<span [^>]+><\\/span>$/) > span.fa.fa-3x.pull-right',
+    trigger: 'footer.modal-footer .btn-primary',
+    extra_trigger: 'a#link-preview.btn.btn-success span.fa.fa-3x.pull-right',
 }, {
     content: "click on other picture",
     trigger: '#editable_area > section .row > div:last img',
@@ -200,7 +200,7 @@ tour.register('rte', {
     extra_trigger: 'a#link-preview:containsRegex(/^<img [^>]+>$/) img',
 }, {
     content: "save link",
-    trigger: '.modal-footer > .btn-primary',
+    trigger: 'footer.modal-footer .btn-primary',
     extra_trigger: 'a#link-preview.btn.btn-success[href="mailto:test@test.test"]:containsRegex(/^<img [^>]+>$/) img',
 }, {
     content: "select for triple enter then double backspace",
diff --git a/addons/web_editor/static/src/js/widgets/widgets.js b/addons/web_editor/static/src/js/widgets/widgets.js
index d0df042fa827a63d3b67d96c610a4258a610054e..8ff47ba2c5ab5bed08b12f2f561056a0be22ea0a 100644
--- a/addons/web_editor/static/src/js/widgets/widgets.js
+++ b/addons/web_editor/static/src/js/widgets/widgets.js
@@ -1166,7 +1166,7 @@ var MediaDialog = Dialog.extend({
         var self = this;
         var defs = [this._super.apply(this, arguments)];
         this.$modal.addClass('note-image-dialog');
-        this.$modal.find('.modal-dialog').addClass('o_select_media_dialog');
+        this.$modal.find('[role="dialog"]').addClass('o_select_media_dialog');
 
         if (this.imageDialog) {
             defs.push(this.imageDialog.appendTo(this.$("#editor-media-image")));
diff --git a/addons/web_editor/static/src/xml/ace.xml b/addons/web_editor/static/src/xml/ace.xml
index 6687d65645d736731e3ca158435d61649696eb45..a9cd23cbaaff3641414e301c256cb2b41bb2c962 100644
--- a/addons/web_editor/static/src/xml/ace.xml
+++ b/addons/web_editor/static/src/xml/ace.xml
@@ -7,8 +7,8 @@
             <div class="btn-group o_ace_type_switcher">
                 <button type="button" class="btn btn-sm btn-info dropdown-toggle" data-toggle="dropdown">XML (HTML)</button>
                 <ul class="dropdown-menu" role="menu">
-                    <li><a href="#" class="o_ace_type_switcher_choice" data-type="xml">XML (HTML)</a></li>
-                    <li><a href="#" class="o_ace_type_switcher_choice" data-type="scss">SCSS (CSS)</a></li>
+                    <li><a role="menuitem" href="#" class="o_ace_type_switcher_choice" data-type="xml">XML (HTML)</a></li>
+                    <li><a role="menuitem" href="#" class="o_ace_type_switcher_choice" data-type="scss">SCSS (CSS)</a></li>
                 </ul>
             </div>
             <select id="ace-view-list" class="o_res_list"/>
@@ -33,7 +33,7 @@
         <div id="ace-view-id">
             <span/>
             <div class="pull-right">
-                <button data-action="reset" type="button" class="btn btn-xs btn-danger"><i class="fa fa-undo"/> Reset</button>
+                <button data-action="reset" type="button" class="btn btn-xs btn-danger" icon="fa-undo" string="Reset"></button>
                 <button data-action="format" type="button" class="btn btn-xs btn-link">Format</button>
             </div>
         </div>
diff --git a/addons/web_editor/static/src/xml/backend.xml b/addons/web_editor/static/src/xml/backend.xml
index 082efdbc5a02d5591b0d19e6a38aaf297245200e..40be4f05d07ceb3bf2b24a8d839b470c283b6352 100644
--- a/addons/web_editor/static/src/xml/backend.xml
+++ b/addons/web_editor/static/src/xml/backend.xml
@@ -9,7 +9,7 @@
 
     <t t-name="web_editor.FieldTextHtml.button.translate">
         <div class="btn-group pull-right">
-            <button t-if="widget.field.translate" class="o_field_translate btn btn-default btn-sm btn-small" style="height: 24px; padding: 1px 17px 0px 5px">
+            <button t-if="widget.field.translate" class="o_field_translate btn btn-default btn-sm btn-small" style="height: 24px; padding: 1px 17px 0px 5px" aria-label="Translate" title="Translate">
                 <span class="fa fa-language fa-lg oe_input_icon"/>
             </button>
         </div>
@@ -18,7 +18,7 @@
     <t t-name="web_editor.FieldTextHtml.fullscreen">
         <span style="margin: 5px; position: fixed; top: 0; right: 0; z-index: 2000;">
             <button class="o_fullscreen btn btn-primary" style="width: 24px; height: 24px; background-color: #337ab7; border: 1px solid #2e6da4; border-radius: 4px; padding: 0; position: relative;">
-                <img src="/web_editor/font_to_img/61541/rgb(255,255,255)/16" style="position: absolute; top: 3px; left: 4px;"/>
+                <img src="/web_editor/font_to_img/61541/rgb(255,255,255)/16" style="position: absolute; top: 3px; left: 4px;" alt="Fullscreen"/>
             </button>
         </span>
     </t>
diff --git a/addons/web_editor/static/src/xml/editor.xml b/addons/web_editor/static/src/xml/editor.xml
index 9821ceb38bdd56ddd2b1aefdd82dab40ee6b6fbd..e0626801e683acda8074d282cfb755895dc579bc 100644
--- a/addons/web_editor/static/src/xml/editor.xml
+++ b/addons/web_editor/static/src/xml/editor.xml
@@ -9,8 +9,8 @@
         <div id="web_editor-top-edit">
             <div id="web_editor-toolbars"/>
             <form class="navbar-form text-muted">
-                <button type="button" class="btn btn-sm btn-default" data-action="cancel"><i class="fa fa-times"/> Discard</button>
-                <button type="button" class="btn btn-sm btn-primary" data-action="save"><i class="fa fa-floppy-o"/> Save</button>
+                <button type="button" class="btn btn-sm btn-default fa fa-times" data-action="cancel">Discard</button>
+                <button type="button" class="btn btn-sm btn-primary fa fa-floppy-o" data-action="save">Save</button>
             </form>
         </div>
     </t>
@@ -46,34 +46,34 @@
 
     <!-- Media Dialog (allows to choose an img/pictogram/video) -->
     <div t-name="web_editor.dialog.media">
-        <ul class="nav nav-tabs">
-            <li class="active"><a href="#editor-media-image" data-toggle="tab" t-att-class="widget.noImages ? 'hidden' : ''">Image</a></li>
-            <li><a href="#editor-media-document" data-toggle="tab" t-att-class="widget.noDocuments ? 'hidden' : ''">Document</a></li>
-            <li><a href="#editor-media-icon" data-toggle="tab" t-att-class="widget.noIcons ? 'hidden' : ''">Pictogram</a></li>
-            <li><a href="#editor-media-video" data-toggle="tab" t-att-class="widget.noVideos ? 'hidden' : ''">Video</a></li>
+        <ul class="nav nav-tabs" role="tablist">
+            <li class="active"><a role="tab" href="#editor-media-image" aria-controls="editor-media-image" data-toggle="tab" t-att-class="widget.noImages ? 'hidden' : ''">Image</a></li>
+            <li><a role="tab" href="#editor-media-document" aria-controls="editor-media-document" data-toggle="tab" t-att-class="widget.noDocuments ? 'hidden' : ''">Document</a></li>
+            <li><a role="tab" href="#editor-media-icon" aria-controls="editor-media-icon" data-toggle="tab" t-att-class="widget.noIcons ? 'hidden' : ''">Pictogram</a></li>
+            <li><a role="tab" href="#editor-media-video" aria-controls="editor-media-video" data-toggle="tab" t-att-class="widget.noVideos ? 'hidden' : ''">Video</a></li>
             <li class="search pull-right">
                 <ul class="pager mb0 mt0">
                     <li class="previous">
-                        <a class="btn btn-default disabled" href="#"><i class="fa fa-angle-left"/>&#32;Previous</a>
+                        <a role="button" class="btn btn-default disabled" href="#"><span class="fa fa-angle-left">&#32;Previous</span></a>
                     </li>
                     <li class="next">
-                        <a class="btn btn-default disabled" href="#">Next&#32;<i class="fa fa-angle-right"/></a>
+                        <a role="button" class="btn btn-default disabled" href="#"><span class="fa fa-suffix-angle-right">Next&#32;</span></a>
                     </li>
                 </ul>
             </li>
             <li class="search pull-right">
                 <div class="form-group">
                     <input class="form-control" id="icon-search" type="search"/>
-                    <span class="fa fa-search"/>
+                    <span class="fa fa-search" title="Search" role="img" aria-label="Search"/>
                 </div>
             </li>
         </ul>
         <!-- Tab panes -->
         <div class="tab-content">
-            <div class="tab-pane fade in active" id="editor-media-image"/>
-            <div class="tab-pane fade" id="editor-media-document"/>
-            <div class="tab-pane fade" id="editor-media-icon"/>
-            <div class="tab-pane fade" id="editor-media-video"/>
+            <div role="tabpanel" class="tab-pane fade in active" id="editor-media-image"/>
+            <div role="tabpanel" class="tab-pane fade" id="editor-media-document"/>
+            <div role="tabpanel" class="tab-pane fade" id="editor-media-icon"/>
+            <div role="tabpanel" class="tab-pane fade" id="editor-media-video"/>
         </div>
     </div>
 
@@ -100,7 +100,7 @@
                         </button>
                         <ul class="dropdown-menu" role="menu">
                             <li>
-                                <a class="o_upload_image_button_no_optimization">Upload image without optimization</a>
+                                <a role="menuitem" class="o_upload_image_button_no_optimization">Upload image without optimization</a>
                             </li>
                         </ul>
                     </div>
@@ -122,20 +122,20 @@
         </form>
     </t>
     <t t-name="web_editor.dialog.image.existing">
-        <div class="modal" tabindex="-1" role="dialog" aria-hidden="true">
+        <div role="dialog" class="modal" tabindex="-1">
             <div class="modal-dialog select-image">
                 <div class="modal-content">
-                    <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+                    <header class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
                         <h3 class="modal-title">Select a Picture</h3>
-                    </div>
-                    <div class="modal-body has-error">
+                    </header>
+                    <main class="modal-body has-error">
                         <div class="existing-attachments"/>
                         <div class="help-block"/>
-                    </div>
-                    <div class="modal-footer">
-                        <a data-dismiss="modal" href="#" aria-hidden="true">Discard</a>
-                    </div>
+                    </main>
+                    <footer class="modal-footer">
+                        <a data-dismiss="modal" href="#" aria-label="Discard">Discard</a>
+                    </footer>
                 </div>
             </div>
         </div>
@@ -144,9 +144,9 @@
         <div class="existing-attachments">
             <div class="row mt16" t-as="row" t-foreach="rows">
                 <div class="col-sm-2 o_existing_attachment_cell" t-as="attachment" t-foreach="row">
-                    <i t-if="attachment.res_model === 'ir.ui.view'" class="fa fa-times o_existing_attachment_remove" title="This file is a public view attachment" t-att-data-id="attachment.id"/>
-                    <i t-else="" class="fa fa-times o_existing_attachment_remove" title="This file is attached to the current record" t-att-data-id="attachment.id"/>
-                    <div class="o_attachment_border" t-att-style="attachment.res_model === 'ir.ui.view' ? null : 'border: 1px solid #5cb85c;'"><div t-att-data-src="attachment.src" t-att-data-url="attachment.url" t-att-alt="attachment.name" t-att-title="attachment.name" t-att-data-id="attachment.id" t-att-data-mimetype="attachment.mimetype" class="o_image o_image_loading"/></div>
+                    <i t-if="attachment.res_model === 'ir.ui.view'" class="fa fa-times o_existing_attachment_remove" title="This file is a public view attachment" role="img" aria-label="This file is a public view attachment" t-att-data-id="attachment.id"/>
+                    <i t-else="" class="fa fa-times o_existing_attachment_remove" title="This file is attached to the current record" role="img" aria-label="This file is attached to the current record" t-att-data-id="attachment.id"/>
+                    <div class="o_attachment_border" t-att-style="attachment.res_model === 'ir.ui.view' ? null : 'border: 1px solid #5cb85c;'"><div t-att-data-src="attachment.src" t-att-data-url="attachment.url" role="img" t-att-aria-label="attachment.name" t-att-title="attachment.name" t-att-data-id="attachment.id" t-att-data-mimetype="attachment.mimetype" class="o_image o_image_loading"/></div>
                 </div>
             </div>
         </div>
@@ -180,6 +180,7 @@
             <span t-foreach="data.cssData" t-as="cssData"
                 t-att-data-id="cssData.names[0]"
                 t-att-title="cssData.names[0]"
+                t-att-aria-label="cssData.names[0]" role="img"
                 t-attf-class="font-icons-icon #{data.base} #{cssData.names[0]}"
                 t-att-data-alias="cssData.names.join(',')"/>
         </t>
@@ -192,7 +193,7 @@
                 <div class="form-group" id="o_video_form_group">
                     <label class="mt8" for="o_video_text">Video code <small class="text-muted">(URL or Embed)</small></label>
                     <textarea class="form-control url" id="o_video_text" placeholder="Copy-paste your URL or embed code here"/>
-                    <label class="control-label o_validate_feedback" for="o_video_text"><i class="fa fa-check"/><i class="fa fa-exclamation-triangle"/></label>
+                    <label class="control-label o_validate_feedback" for="o_video_text"><i class="fa fa-check" role="img" aria-label="Checked" title="Checked"/><i class="fa fa-exclamation-triangle" role="img" aria-label="Attention" title="Attention"/></label>
                 </div>
                 <div class="text-right">
                     <small class="text-muted">Accepts <b><i>Youtube</i></b>, <b><i>Instagram</i></b>, <b><i>Vine.co</i></b>, <b><i>Vimeo</i></b>, <b><i>Dailymotion</i></b> and <b><i>Youku</i></b> videos</small>
@@ -265,13 +266,13 @@
                     <label class="control-label col-sm-3">Color</label>
                     <div class="col-sm-9">
                         <div class="o_link_dialog_color">
-                            <label t-attf-class="o_link_dialog_color_item o_btn_preview btn btn-link text-center" data-color="">
+                            <label role="button" t-attf-class="o_link_dialog_color_item o_btn_preview btn btn-link text-center" data-color="">
                                 <span>L</span>
                                 <input class="hidden link-style" name="link_style_color" type="radio" value=""/>
                                 <i class="fa"/>
                             </label>
                             <t t-foreach="['primary', 'default', 'success', 'info', 'warning', 'danger', 'alpha', 'beta', 'gamma', 'delta', 'epsilon']" t-as="color">
-                                <label t-attf-class="o_link_dialog_color_item o_btn_preview btn btn-#{color}">
+                                <label role="button" t-attf-class="o_link_dialog_color_item o_btn_preview btn btn-#{color}" t-attf-aria-label="Color for #{color}" t-attf-title="Color for #{color}">
                                     <input type="radio" name="link_style_color" class="hidden link-style" t-att-value="color"/>
                                     <i class="fa"/>
                                 </label>
@@ -293,7 +294,7 @@
                 <div class="form-group text-center">
                     <label>Preview</label>
                     <div style="overflow: auto; max-width: 100%; max-height: 200px;">
-                        <a href="#" id="link-preview"/>
+                        <a href="#" id="link-preview" aria-label="Preview" title="Preview"/>
                     </div>
                 </div>
             </div>
@@ -302,7 +303,7 @@
 
     <!-- Crop Image Dialog (allows to crop image on the page) -->
     <div t-name="web_editor.dialog.crop_image" class="o_crop_image_dialog">
-        <div t-if="widget.imageData.isExternalImage" class="alert alert-warning text-center">
+        <div t-if="widget.imageData.isExternalImage" class="alert alert-warning text-center" role="alert">
             <i class="fa fa-exclamation-triangle fa-2x"/>
             <h4>This image is an external image</h4>
             <p>
diff --git a/addons/web_editor/static/src/xml/snippets.xml b/addons/web_editor/static/src/xml/snippets.xml
index 594a761595137c57bf787be248610af36b32be22..3eecae059ad3228ad6aeda6394268554f07ea907 100644
--- a/addons/web_editor/static/src/xml/snippets.xml
+++ b/addons/web_editor/static/src/xml/snippets.xml
@@ -10,14 +10,14 @@
             </div>
             <div class="oe_overlay_options" contentEditable="false">
                 <div class="btn-group">
-                    <a href="#" class="btn btn-default btn-sm oe_snippet_parent" title="Select Parent Container"><i class="fa fa-lg fa-level-up"/></a>
+                    <a role="button" href="#" class="btn btn-default btn-sm oe_snippet_parent" title="Select Parent Container" aria-label="Select Parent Container"><i class="fa fa-lg fa-level-up"/></a>
                     <div class="dropdown oe_options hidden btn-group">
-                        <a href="#" data-toggle="dropdown" class="btn btn-primary btn-sm" title="Customize">Customize</a>
+                        <a role="button" href="#" data-toggle="dropdown" class="btn btn-primary btn-sm" title="Customize">Customize</a>
                         <ul class="dropdown-menu" role="menu"/>
                     </div>
-                    <a href="#" class="btn btn-default btn-sm oe_snippet_move" title="Drag to Move"><i class="fa fa-arrows ml4 mr4"></i></a>
-                    <a href="#" class="btn btn-default btn-sm oe_snippet_clone" title="Duplicate Container"><i class="fa fa-files-o ml4 mr4"></i></a>
-                    <a href="#" class="btn btn-default btn-sm oe_snippet_remove" title="Remove Block"><i class="fa fa-trash-o ml4 mr4"></i></a>
+                    <a role="button" href="#" class="btn btn-default btn-sm oe_snippet_move" title="Drag to Move" aria-label="Drag to Move"><i class="fa fa-arrows ml4 mr4"></i></a>
+                    <a role="button" href="#" class="btn btn-default btn-sm oe_snippet_clone" title="Duplicate Container" aria-label="Duplicate Container"><i class="fa fa-files-o ml4 mr4"></i></a>
+                    <a role="button" href="#" class="btn btn-default btn-sm oe_snippet_remove" title="Remove Block" aria-label="Remove Block"><i class="fa fa-trash-o ml4 mr4"></i></a>
                 </div>
             </div>
         </div>
@@ -27,7 +27,7 @@
     <div t-name="web_editor.snippet.option.colorpicker" class="colorpicker">
         <div class="note-palette-title">Background Color</div>
         <div class="btn-group palette-reset">
-            <div class="note-color-reset" data-event="foreColor" data-value="inherit" title="None">
+            <div class="note-color-reset" data-event="foreColor" data-value="inherit" title="None" role="img" aria-label="No color">
                 <i class="fa fa-ban"/>
             </div>
         </div>
@@ -40,16 +40,16 @@
     <!-- t-field options -->
     <t t-name="web_editor.many2one.button">
         <div class="btn-group">
-            <a href="#" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" title="Search Contact"><i class="fa fa-search"></i></a>
+            <a role="button" href="#" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" title="Search Contact" aria-label="Search Contact">><i class="fa fa-search"></i></a>
             <ul class="dropdown-menu contact_menu" role="menu">
-                <li><a><input href="#" type="email" placeholder="Search"/></a></li>
+                <li><a role="menuitem"><input href="#" type="email" placeholder="Search"/></a></li>
             </ul>
         </div>
     </t>
 
     <t t-name="web_editor.many2one.search">
         <t t-foreach="contacts" t-as="item">
-            <li><a href="#" t-att-data-id="item.id" t-att-data-name="item.display_name"><t t-esc="item.display_name"/> <t t-if="item.city or item.country_id"><small class="text-muted">(<t t-esc="item.city"/> <t t-esc="item.country_id and item.country_id[1]"/>)</small></t></a></li>
+            <li><a role="menuitem" href="#" t-att-data-id="item.id" t-att-data-name="item.display_name"><t t-esc="item.display_name"/> <t t-if="item.city or item.country_id"><small class="text-muted">(<t t-esc="item.city"/> <t t-esc="item.country_id and item.country_id[1]"/>)</small></t></a></li>
         </t>
     </t>
 </templates>
diff --git a/addons/web_editor/views/snippets.xml b/addons/web_editor/views/snippets.xml
index 096ea58a2ce1f3e99e74e1e4926ed250c42c3c26..6dbd57764ab7106df6d3b4099cf07e23232e6e6f 100644
--- a/addons/web_editor/views/snippets.xml
+++ b/addons/web_editor/views/snippets.xml
@@ -6,7 +6,7 @@
     <div id="o_scroll">
         <div id="snippet_structure" class="o_panel">
             <div class="o_panel_header">
-                <i class="fa fa-th-large"/> First Panel
+                <span class="fa fa-th-large"> First Panel</span>
             </div>
             <div class="o_panel_body"/>
         </div>
diff --git a/addons/web_settings_dashboard/static/src/xml/dashboard.xml b/addons/web_settings_dashboard/static/src/xml/dashboard.xml
index f7ccf053e8d71bf10c7a83347a09ee9332e1eb77..34c564a6af57f7f5c23f29b53e21b549b26fb9d0 100644
--- a/addons/web_settings_dashboard/static/src/xml/dashboard.xml
+++ b/addons/web_settings_dashboard/static/src/xml/dashboard.xml
@@ -24,7 +24,7 @@
 
     <t t-name="DashboardApps">
         <div class="text-center o_web_settings_dashboard_apps">
-            <i class="fa fa-cog fa-4x text-muted o_browse_apps" style="cursor: pointer;"></i>
+            <i class="fa fa-cog fa-4x text-muted o_browse_apps" style="cursor: pointer;" role="img" aria-label="Browse Apps" title="Browse Apps"></i>
             <div class="o_web_settings_dashboard_header">
                 <t t-set="installed_apps" t-value="widget.data.installed_apps"/>
                 <t t-if="installed_apps">
@@ -40,8 +40,8 @@
                 <a class="btn btn-primary btn-block o_browse_apps" role="button"><strong>Browse Apps</strong></a>
             </div>
             <div class="o_web_settings_dashboard_pills">
-                <a href="https://www.odoo.com/apps/modules" target="_blank" class="pull-left"><i class="fa fa-rocket fa-2x text-muted"/> App store</a>
-                <a href="https://www.odoo.com/apps/themes" target="_blank" class="pull-right"><i class="fa fa-picture-o fa-2x text-muted"/> Theme store</a>
+                <a href="https://www.odoo.com/apps/modules" target="_blank" class="pull-left"><span class="fa fa-rocket fa-2x text-muted"> App store</span></a>
+                <a href="https://www.odoo.com/apps/themes" target="_blank" class="pull-right"><span class="fa fa-picture-o fa-2x text-muted"> Theme store</span></a>
             </div>
             <div class="clearfix"/>
         </div>
@@ -52,13 +52,13 @@
             <span class="o_badge_text">
                 <t t-esc='email'/>
             </span>
-            <span class="fa fa-times o_badge_remove" title="Remove Email" role="button"/>
+            <a href="#" class="fa fa-times o_badge_remove" title="Remove Email" aria-label="Remove Email" role="button"/>
         </span>
     </t>
 
     <t t-name="DashboardInvitations">
         <div class="text-center o_web_settings_dashboard_invitations">
-            <i class="fa fa-users fa-4x text-muted o_web_settings_dashboard_access_rights" style="cursor: pointer;"></i>
+            <i class="fa fa-users fa-4x text-muted o_web_settings_dashboard_access_rights" style="cursor: pointer;" role="img" aria-label="Access rights" title="Access rights"></i>
             <div class="o_web_settings_dashboard_header">
                 <t t-set="active_users" t-value="widget.data.active_users"></t>
                 <t t-set="pending_users" t-value="widget.data.pending_users"></t>
@@ -75,7 +75,7 @@
             <div class="o_web_settings_dashboard_invitation_form">
                 <p><strong>Invite new users:</strong></p>
                 <input class="o_user_emails o_input mt8" type="text" placeholder="Enter e-mail addresses"/>
-                <button class="btn btn-primary btn-block o_web_settings_dashboard_invite mt16" role="button" data-loading-text="Inviting..."><strong>Invite</strong></button>
+                <button class="btn btn-primary btn-block o_web_settings_dashboard_invite mt16" data-loading-text="Inviting..."><strong>Invite</strong></button>
             </div>
             <div class="o_web_settings_dashboard_pending_users mt8">
                 <t t-if="pending_users.length">
@@ -94,7 +94,7 @@
 
     <t t-name="DashboardShare">
         <div class="text-center o_web_settings_dashboard_share">
-            <i class="fa fa-share-alt fa-4x text-muted"/>
+            <i class="fa fa-share-alt fa-4x text-muted" role="img" aria-label="Share" title="Share"/>
             <div class="o_web_settings_dashboard_header">Share the Love</div>
             <div>
                 <small class="text-muted text-center o_web_settings_dashboard_compact_subtitle">
@@ -102,9 +102,9 @@
                 </small>
             </div>
             <div class="row mt16">
-                <div class="col-xs-4"><a href="#"><i class="fa fa-twitter-square fa-4x tw_share"/></a></div>
-                <div class="col-xs-4"><a href="#"><i class="fa fa-facebook-square fa-4x fb_share"/></a></div>
-                <div class="col-xs-4"><a href="#"><i class="fa fa-linkedin-square fa-4x li_share"/></a></div>
+                <div class="col-xs-4"><a href="#" aria-label="Twitter" title="Twitter"><i class="fa fa-twitter-square fa-4x tw_share"/></a></div>
+                <div class="col-xs-4"><a href="#" aria-label="Facebook" title="Facebook"><i class="fa fa-facebook-square fa-4x fb_share"/></a></div>
+                <div class="col-xs-4"><a href="#" aria-label="LinkedIn" title="LinkedIn"><i class="fa fa-linkedin-square fa-4x li_share"/></a></div>
             </div>
             <hr/>
             <t t-set="server_version" t-value="widget.data.server_version"/>
@@ -119,7 +119,7 @@
                     </div>
                     <div>
                         <div class="tab-content">
-                            <div id="settings" class="tab-pane active text-muted text-center o_web_settings_dashboard_compact_subtitle">
+                            <div role="tabpanel" id="settings" class="tab-pane active text-muted text-center o_web_settings_dashboard_compact_subtitle">
                                 <small>Copyright © 2004-2016 <a target="_blank" href="https://www.odoo.com" style="text-decoration: underline;">Odoo S.A.</a> <a target="_blank" href="http://www.gnu.org/licenses/lgpl.html" style="text-decoration: underline;">GNU LGPL Licensed</a></small>
                             </div>
                         </div>
@@ -145,7 +145,7 @@
             <div class="text-center o_web_settings_dashboard_enterprise">
                 <div class="text-center o_web_settings_dashboard_header">Odoo Enterprise</div>
                 <div class="mb16"><a href="http://www.odoo.com/editions" target="_blank">Get more features with the Enterprise Edition!</a></div>
-                <div><img class="img img-responsive" t-att-src='_s + "/web/static/src/img/enterprise_upgrade.jpg"'/></div>
+                <div><img class="img img-responsive" t-att-src='_s + "/web/static/src/img/enterprise_upgrade.jpg"' alt="Upgrade to enterprise"/></div>
                 <div>
                     <a class="btn btn-primary btn-block o_confirm_upgrade" role="button"><strong>Upgrade Now</strong></a>
                 </div>
@@ -155,7 +155,7 @@
 
     <t t-name="DashboardTranslations">
         <div class="text-center o_web_settings_dashboard_translations mt8">
-            <i class="fa fa-globe fa-4x text-muted"></i>
+            <i class="fa fa-globe fa-4x text-muted" role="img" aria-label="Translations" title="Translations"></i>
             <div class="o_web_settings_dashboard_header">
                 Translations
             </div>
@@ -165,14 +165,14 @@
                 </small>
             </div>
             <div class="mt16">
-                <a class="btn btn-primary btn-block o_load_translations"><strong>Load a Translation</strong></a>
+                <a role="button" class="btn btn-primary btn-block o_load_translations"><strong>Load a Translation</strong></a>
             </div>
         </div>
     </t>
 
     <t t-name="DashboardCompany">
         <div class="text-center o_web_settings_dashboard_company mt8">
-            <i class="fa fa-suitcase fa-4x text-muted"></i>
+            <i class="fa fa-suitcase fa-4x text-muted" role="img" aria-label="Company" title="Company"></i>
             <div class="o_web_settings_dashboard_header">
                 <t t-esc="widget.data.company_name"></t>
             </div>
@@ -182,7 +182,7 @@
                 </small>
             </div>
             <div class="mt16">
-                <a class="btn btn-primary btn-block o_setup_company"><strong>Set Up</strong></a>
+                <a role="button" class="btn btn-primary btn-block o_setup_company"><strong>Set Up</strong></a>
             </div>
         </div>
     </t>
diff --git a/addons/web_tour/static/src/js/tour_manager.js b/addons/web_tour/static/src/js/tour_manager.js
index 628493a6cb28f96ae997795826f654f4a86f6a52..c9206d06ec2a57b6b71de9fd6577a93c48dadfa3 100644
--- a/addons/web_tour/static/src/js/tour_manager.js
+++ b/addons/web_tour/static/src/js/tour_manager.js
@@ -160,7 +160,7 @@ return core.Class.extend(mixins.EventDispatcherMixin, ServicesMixin, {
     update: function (tour_name) {
         if (this.paused) return;
 
-        this.$modal_displayed = $('.modal:visible').last();
+        this.$modal_displayed = $('[role="dialog"]:visible').last();
 
         tour_name = this.running_tour || tour_name;
         if (tour_name) {
@@ -325,7 +325,14 @@ return core.Class.extend(mixins.EventDispatcherMixin, ServicesMixin, {
     _set_running_tour_timeout: function (tour_name, step) {
         this._stop_running_tour_timeout();
         this.running_tour_timeout = setTimeout((function() {
-            this._consume_tour(tour_name, _.str.sprintf("Tour %s failed at step %s", tour_name, step.trigger));
+            var message;
+            if (step.extra_trigger) {
+                message = _.str.sprintf('Tour %s failed at step "%s" with trigger "%s" and extra trigger "%s"',
+                    tour_name, step.content, step.trigger, step.extra_trigger);
+            } else {
+                message = _.str.sprintf('Tour %s failed at step "%s" with trigger "%s"', tour_name, step.content, step.trigger);
+            }
+            this._consume_tour(tour_name, message);
         }).bind(this), (step.timeout || RUNNING_TOUR_TIMEOUT) + this.running_step_delay);
     },
     _stop_running_tour_timeout: function () {
@@ -357,11 +364,12 @@ return core.Class.extend(mixins.EventDispatcherMixin, ServicesMixin, {
     STEPS: {
         MENU_MORE: {
             edition: "community",
-            trigger: "body > nav",
+            trigger: "body > header > nav",
+            content: _t('Click on the <i>More icon</i> to show hidden apps.'),
             position: "bottom",
             auto: true,
             run: function (actions) {
-                actions.auto("#menu_more_container > a");
+                actions.auto("#more_menu_button");
             },
         },
 
diff --git a/addons/web_tour/static/src/xml/debug_manager.xml b/addons/web_tour/static/src/xml/debug_manager.xml
index 5ec3aa9e7482741f54cb090d86bef849678afb72..11c259e9944b4b009a3170b8fc7dffca0c7bbcf9 100644
--- a/addons/web_tour/static/src/xml/debug_manager.xml
+++ b/addons/web_tour/static/src/xml/debug_manager.xml
@@ -26,7 +26,7 @@
             <tr t-foreach="tours" t-as="tour">
                 <td><t t-esc="tour"/></td>
                 <td><t t-esc="tours[tour].url"/></td>
-                <td><button type="button" class="btn btn-sm btn-primary fa fa-play o_start_tour" t-att-data-name="tour"/></td>
+                <td><button type="button" class="btn btn-sm btn-primary fa fa-play o_start_tour" t-att-data-name="tour" aria-label="Tour" title="Tour"/></td>
             </tr>
         </table>
     </div>
diff --git a/addons/website/data/website_data.xml b/addons/website/data/website_data.xml
index 9ba425ed7e7907270f71125cc33df548ac18342e..b8e493c150547f6479d917a195260f9bba7b5874 100644
--- a/addons/website/data/website_data.xml
+++ b/addons/website/data/website_data.xml
@@ -73,7 +73,7 @@
                                       </div>
                                   </div>
                                   <div class="text-center mt64" name="mail_button">
-                                      <a t-attf-href="mailto:{{ res_company.email }}" class="btn btn-primary" id="o_contact_mail">Send us an email</a>
+                                      <a role="button" t-attf-href="mailto:{{ res_company.email }}" class="btn btn-primary" id="o_contact_mail">Send us an email</a>
                                   </div>
                               </div>
                               <div class="col-md-4 mb32">
diff --git a/addons/website/data/website_demo.xml b/addons/website/data/website_demo.xml
index cf4f94537556113fbd993a3d826bc7103762fbac..dda6c96a3f6db6677bb127828978aa368fcb7448 100644
--- a/addons/website/data/website_demo.xml
+++ b/addons/website/data/website_demo.xml
@@ -97,8 +97,8 @@ response = request.website.render("website.template_partner_post", {'partner': p
                     </div>
                     <div class="form-group">
                         <div class="col-sm-offset-2 col-sm-10">
-                            <button type="submit" class="btn btn-primary">
-                                Send <span class="fa fa-long-arrow-right"/>
+                            <button type="submit" class="btn btn-primary" aria-label="Send">
+                                <span class="fa fa-suffix-long-arrow-right">Send </span>
                             </button>
                         </div>
                     </div>
@@ -151,7 +151,7 @@ response = request.render("website.template_partner_comment", {
                                   <h2>Homepage 0.0.0.0</h2>
                                   <h3>Click to customize this text</h3>
                                   <p>
-                                    <a class="btn btn-success btn-large" href="/contactus">Contact us</a>
+                                    <a role="button" class="btn btn-success btn-large" href="/contactus">Contact us</a>
                                   </p>
                                 </div>
                                 <span class="carousel-img col-md-6 hidden-sm hidden-xs"> </span>
@@ -159,10 +159,10 @@ response = request.render("website.template_partner_comment", {
                             </div>
                           </div>
                         </div>
-                        <div class="carousel-control left hidden" data-slide="prev" data-target="#myCarousel0" href="#myCarousel0" style="width: 10%">
+                        <div class="carousel-control left hidden" data-slide="prev" data-target="#myCarousel0" href="#myCarousel0" style="width: 10%" role="img" aria-label="Previous" title="Previous">
                           <i class="fa fa-chevron-left"/>
                         </div>
-                        <div class="carousel-control right hidden" data-slide="next" data-target="#myCarousel0" href="#myCarousel0" style="width: 10%">
+                        <div class="carousel-control right hidden" data-slide="next" data-target="#myCarousel0" href="#myCarousel0" style="width: 10%" role="img" aria-label="Next" title="Next">
                           <i class="fa fa-chevron-right"/>
                         </div>
                       </div>
@@ -198,7 +198,7 @@ response = request.render("website.template_partner_comment", {
                                       </div>
                                   </div>
                                   <div class="text-center mt64" name="mail_button">
-                                      <a t-attf-href="mailto:{{ res_company.email }}" class="btn btn-primary" id="o_contact_mail">Send us an email</a>
+                                      <a role="button" t-attf-href="mailto:{{ res_company.email }}" class="btn btn-primary" id="o_contact_mail">Send us an email</a>
                                   </div>
                               </div>
                               <div class="col-md-4 mb32">
diff --git a/addons/website/static/src/js/content/snippets.animation.js b/addons/website/static/src/js/content/snippets.animation.js
index 602556c03cc0856202c600a94a4d1fa0aa3dd46f..7221ee40e6c1d99bf0b27d59c9f6687bb259f444 100644
--- a/addons/website/static/src/js/content/snippets.animation.js
+++ b/addons/website/static/src/js/content/snippets.animation.js
@@ -740,7 +740,7 @@ registry.gallery = Animation.extend({
             $(this).siblings().filter('.modal-backdrop').remove(); // bootstrap leaves a modal-backdrop
             $(this).remove();
         });
-        $modal.find('.modal-content, .modal-body.o_slideshow').css('height', '100%');
+        $modal.find('[role="dialog"] .modal-content, main.modal-body.o_slideshow').css('height', '100%');
         $modal.appendTo(document.body);
 
         this.carousel = new registry.gallery_slider($modal.find('.carousel').carousel());
diff --git a/addons/website/static/src/js/menu/mobile_view.js b/addons/website/static/src/js/menu/mobile_view.js
index acfd28042c9eac23d0ee3a54e424e31c3ea41dd6..0969efda7a1abdc134df2f8801ff52780d825c93 100644
--- a/addons/website/static/src/js/menu/mobile_view.js
+++ b/addons/website/static/src/js/menu/mobile_view.js
@@ -17,7 +17,7 @@ var MobilePreviewDialog = Dialog.extend({
     start: function () {
         var self = this;
         this.$modal.addClass('oe_mobile_preview');
-        this.$modal.on('click', '.modal-header', function () {
+        this.$modal.on('click', 'header.modal-header', function () {
             self.$el.toggleClass('o_invert_orientation');
         });
         this.$iframe = $('<iframe/>', {
diff --git a/addons/website/static/src/js/tours/rte.js b/addons/website/static/src/js/tours/rte.js
index fb2a0cacea1542d5066d173ddd9a6a460c76dfbd..cc828154722c95712b9ff216183bd9ac29218952 100644
--- a/addons/website/static/src/js/tours/rte.js
+++ b/addons/website/static/src/js/tours/rte.js
@@ -9,15 +9,15 @@ tour.register('rte_translator', {
     wait_for: base.ready(),
 }, [{
     content: "click on Add a language",
-    trigger: '.js_language_selector a:has(i.fa)',
+    trigger: '.js_language_selector a:has(span.fa)',
 }, {
     content: "select french",
     trigger: 'select[name="lang"]',
     run: 'text "fr_BE"',
 }, {
     content: "load french",
-    trigger: '.modal-footer button:first',
-    extra_trigger: '.modal select[name="lang"]:propValueContains(fr_BE)',
+    trigger: 'footer.modal-footer button:first',
+    extra_trigger: '[role="dialog"] select[name="lang"]:propValueContains(fr_BE)',
 }, {
     content : "click language dropdown",
     trigger : '.js_language_selector .dropdown-toggle',
@@ -72,7 +72,7 @@ tour.register('rte_translator', {
     trigger: 'html:not(:has(#wrap p span)) .o_menu_systray a[data-action="translate"]',
 }, {
     content: "close modal",
-    trigger: '.modal-footer .btn-default',
+    trigger: 'footer.modal-footer .btn-default',
 }, {
     content: "check if translation is activate",
     trigger: '[data-oe-translation-id]',
@@ -101,8 +101,8 @@ tour.register('rte_translator', {
     run: 'text test french placeholder',
 }, {
     content: "close modal",
-    trigger: '.modal-footer > .btn-primary',
-    extra_trigger: '.modal input:propValue(test french placeholder)',
+    trigger: 'footer.modal-footer .btn-primary',
+    extra_trigger: '[role="dialog"] input:propValue(test french placeholder)',
 }, {
     content: "save translation",
     trigger: 'button[data-action=save]',
diff --git a/addons/website/static/src/xml/website.backend.xml b/addons/website/static/src/xml/website.backend.xml
index 347402caf57681bdf757956f18b9e22a7c17a753..a5e14c2c0bcee54c001f6dec7f15f7bfbc4a94b8 100644
--- a/addons/website/static/src/xml/website.backend.xml
+++ b/addons/website/static/src/xml/website.backend.xml
@@ -90,7 +90,7 @@
     </t>
 
     <t t-name="website.GoToButtons">
-        <a href="/" class="btn btn-primary" title="Go to Website">
+        <a role="button" href="/" class="btn btn-primary" title="Go to Website">
             Go to Website
         </a>
     </t>
diff --git a/addons/website/static/src/xml/website.contentMenu.xml b/addons/website/static/src/xml/website.contentMenu.xml
index 57448d290823b1386961630a4c13650790fe2130..2b98b0d0be7debc36db321c42f37391c0b1ad9c4 100644
--- a/addons/website/static/src/xml/website.contentMenu.xml
+++ b/addons/website/static/src/xml/website.contentMenu.xml
@@ -3,16 +3,16 @@
 <t t-name="website.contentMenu.dialog.submenu">
     <li t-att-data-menu-id="submenu.id">
         <div class="input-group">
-            <span class="input-group-addon fa fa-bars"/>
+            <span class="input-group-addon fa fa-bars" role="img" aria-label="Dropdown menu" title="Dropdown menu"/>
             <span class="form-control">
                 <span class="js_menu_label">
                     <t t-esc="submenu.name"/>
                 </span>
-                <i t-if="submenu.is_homepage" class="pull-right fa fa-home" style="margin-top: 3px"/>
+                <i t-if="submenu.is_homepage" class="pull-right fa fa-home" style="margin-top: 3px" role="img" aria-label="Home" title="Home"/>
             </span>
             <span class="input-group-btn">
-                <button type="button" class="btn btn-primary js_edit_menu fa fa-pencil-square-o"/>
-                <button type="button" class="btn btn-danger js_delete_menu fa fa-trash-o"/>
+                <button type="button" class="btn btn-primary js_edit_menu fa fa-pencil-square-o" aria-label="Edit menu" title="Edit menu"/>
+                <button type="button" class="btn btn-danger js_delete_menu fa fa-trash-o" aria-label="Delete menu" title="Delete menu"/>
             </span>
         </div>
         <t t-set="children" t-value="submenu.children"/>
@@ -46,7 +46,7 @@
             Drag a menu to the right to create a sub-menu
         </small>
         <a href="#" class="js_add_menu">
-            <i class="fa fa-plus-circle"/> Add Menu Entry
+            <span class="fa fa-plus-circle"> Add Menu Entry</span>
         </a>
     </div>
 </div>
diff --git a/addons/website/static/src/xml/website.facebook_page.xml b/addons/website/static/src/xml/website.facebook_page.xml
index cdc0267d69bbd831f778c55c366cb0352d0a356c..4d362582a7b03fcc50fad7339e03a27d1bac39fc 100644
--- a/addons/website/static/src/xml/website.facebook_page.xml
+++ b/addons/website/static/src/xml/website.facebook_page.xml
@@ -50,9 +50,9 @@
         <div class="col-md-6" style="border-left: 1px solid #eeeeee;">
             <div class="form-group text-center">
                 <label>Preview</label>
-                <div class="alert alert-warning hidden facebook_page_warning text-center">
+                <div class="alert alert-warning hidden facebook_page_warning text-center" role="alert">
                     <div>
-                        <i class="fa fa-exclamation-triangle fa-3x" aria-hidden="true"></i>
+                        <i class="fa fa-exclamation-triangle fa-3x" role="img" aria-label="Warning" title="Warning"></i>
                     </div>
                     <h4 class="mb0">Invalid Facebook Page Url</h4>
                     <div>Please enter valid facebook page URL for preview</div>
diff --git a/addons/website/static/src/xml/website.gallery.xml b/addons/website/static/src/xml/website.gallery.xml
index 76bf650e76d709f627306fa245fc5f03eedee3b2..08226cb911b5871cfdb23f23c73180fdca2e0796 100644
--- a/addons/website/static/src/xml/website.gallery.xml
+++ b/addons/website/static/src/xml/website.gallery.xml
@@ -14,21 +14,21 @@
             <div class="carousel-inner container" style="padding: 0;">
                  <t t-foreach="srcs" t-as="src">
                     <div t-attf-class="item #{src_index == index and 'active' or ''}">
-                        <img t-attf-class="img img-responsive #{userStyle}" t-att-src="src"/>
+                        <img t-attf-class="img img-responsive #{userStyle}" t-att-src="src" alt="Slide image"/>
                     </div>
                  </t>
             </div>
 
             <ul class="carousel-indicators">
-                <li class="fa fa-chevron-left o_indicators_left" style="overflow: hidden; padding: 12px; border: 0;"></li>
+                <li class="fa fa-chevron-left o_indicators_left" style="overflow: hidden; padding: 12px; border: 0;" aria-label="Previous" title="Previous"></li>
                 <t t-foreach="srcs" t-as="src">
                     <li t-attf-data-target="##{id}" t-att-data-slide-to="src_index" t-att-class="src_index == index and 'active'" t-attf-style="background-image: url(#{src})"></li>
                 </t>
-                <li class="fa fa-chevron-right o_indicators_right" style="overflow: hidden; padding: 12px; border: 0;"></li>
+                <li class="fa fa-chevron-right o_indicators_right" style="overflow: hidden; padding: 12px; border: 0;" aria-label="Next" title="Next"></li>
             </ul>
 
-            <a class="carousel-control left" t-attf-href="##{id}" data-slide="prev"><span class="fa fa-chevron-left" /></a>
-            <a class="carousel-control right" t-attf-href="##{id}" data-slide="next"><span class="fa fa-chevron-right" /></a>
+            <a class="carousel-control left" t-attf-href="##{id}" data-slide="prev" aria-label="Previous" title="Previous"><span class="fa fa-chevron-left"/></a>
+            <a class="carousel-control right" t-attf-href="##{id}" data-slide="next" aria-label="Next" title="Next"><span class="fa fa-chevron-right"/></a>
         </div>
     </t>
 
@@ -43,14 +43,14 @@
         ========================================================================
     -->
     <t t-name="website.gallery.slideshow.lightbox">
-        <div class="modal o_technical_modal fade" aria-labbelledby="Image Gallery Dialog" aria-hidden="true">
+        <div role="dialog" class="modal o_technical_modal fade" aria-labbelledby="Image Gallery Dialog">
             <div class="modal-dialog modal-lg" role="Picture Gallery"
                 t-attf-style="min-width: #{dim.min_width}px ; min-height: #{dim.min_height}px ; max-width: #{dim.max_width}px ; max-height: #{dim.max_height}px ; height: #{dim.height}px ;">
                 <div class="modal-content">
-                    <div class="modal-body o_slideshow">
-                        <button type="button" class="close" data-dismiss="modal" style="position: absolute; right: 12px; top: 10px;"><span aria-hidden="true">&amp;times;</span><span class="sr-only">Close</span></button>
+                    <main class="modal-body o_slideshow">
+                        <button type="button" class="close" data-dismiss="modal" style="position: absolute; right: 12px; top: 10px;"><span role="img" aria-label="Close">&amp;times;</span><span class="sr-only">Close</span></button>
                         <t t-call="website.gallery.slideshow"></t>
-                    </div>
+                    </main>
 
                 </div>
             </div>
diff --git a/addons/website/static/src/xml/website.pageProperties.xml b/addons/website/static/src/xml/website.pageProperties.xml
index 098bb5533b50b0c055c60de04632ce17c3570abb..7ee6b1fb4853381005cb82b63b233a5d5524c332 100644
--- a/addons/website/static/src/xml/website.pageProperties.xml
+++ b/addons/website/static/src/xml/website.pageProperties.xml
@@ -40,12 +40,12 @@
 
 <div t-name="website.pagesMenu.page_info" class="o_page_management_info">
     <form class="form-horizontal">
-        <ul class="nav nav-tabs">
-            <li class="active"><a data-toggle="tab" href="#basic_page_info">Name</a></li>
-            <li><a data-toggle="tab" href="#advances_page_info">Publish</a></li>
+        <ul class="nav nav-tabs" role="tablist">
+            <li class="active"><a aria-controls="basic_page_info" data-toggle="tab" href="#basic_page_info" role="tab">Name</a></li>
+            <li><a aria-controls="advances_page_info" data-toggle="tab" href="#advances_page_info" role="tab">Publish</a></li>
         </ul>
         <div class="tab-content mt16">
-            <div id="basic_page_info" class="tab-pane fade in active">
+            <div role="tabpanel" id="basic_page_info" class="tab-pane fade in active">
                 <div class="form-group">
                     <label class="control-label col-sm-3" for="page_name">Page Name</label>
                     <div class="col-sm-9">
@@ -85,7 +85,7 @@
                     </div>
                 </div>
             </div>
-            <div id="advances_page_info" class="tab-pane fade">
+            <div role="tabpanel" id="advances_page_info" class="tab-pane fade">
                 <div class="form-group">
                     <label class="control-label col-sm-3" for="is_menu">Show in Top Menu</label>
                     <div class="col-sm-2">
@@ -111,7 +111,7 @@
                 <div class="form-group">
                     <label class="control-label col-sm-3" for="is_indexed">
                         Indexed
-                        <i class="fa fa-question-circle-o" title="Hide this page from search results" aria-hidden="true"></i>
+                        <i class="fa fa-question-circle-o" title="Hide this page from search results" role="img" aria-label="Info"></i>
                     </label>
                     <div class="col-sm-2">
                         <a>
@@ -126,10 +126,10 @@
                     <label class="control-label col-sm-3" for="is_published">Publish</label>
                     <div class="col-sm-2">
                         <a>
-                            <label class="o_switch js_publish_btn" for="is_published" >
+                            <button class="o_switch js_publish_btn">
                                 <input type="checkbox" t-att-checked="widget.page.website_published ? true : undefined" id="is_published"/>
                                 <span/>
-                            </label>
+                            </button>
                         </a>
                     </div>
                 </div>
@@ -139,7 +139,7 @@
                         <div class='input-group date' id='date_publish_container'>
                             <input type='text' class="form-control" name="date_publish" id="date_publish" />
                             <span class="input-group-addon">
-                                <span class="fa fa-calendar"></span>
+                                <span class="fa fa-calendar" role="img" aria-label="Publish date" title="Publish date"></span>
                             </span>
                         </div>
                     </div>
diff --git a/addons/website/static/src/xml/website.seo.xml b/addons/website/static/src/xml/website.seo.xml
index 7afd4ad32e90943c54ab46fb076e2d8d1f5cc95a..081378725961f2a08b9ba06119df20646de338d5 100644
--- a/addons/website/static/src/xml/website.seo.xml
+++ b/addons/website/static/src/xml/website.seo.xml
@@ -87,7 +87,7 @@
     </t>
 
     <t t-name="website.seo_tip">
-        <div t-attf-class="alert alert-#{ widget.type }">
+        <div t-attf-class="alert alert-#{ widget.type }" role="alert">
             <t t-raw="widget.message"/>
         </div>
     </t>
diff --git a/addons/website/static/src/xml/website.share.xml b/addons/website/static/src/xml/website.share.xml
index 832dc9698a8935b4c15eb64ec250375cc5618478..b534f6e9cc7ab240cbe335c07a42bc271fefbfe2 100644
--- a/addons/website/static/src/xml/website.share.xml
+++ b/addons/website/static/src/xml/website.share.xml
@@ -4,7 +4,7 @@
         <div class="row clearfix" style='font-size:16px'>
             <div class="col-xs-12 css_editable_mode_hidden">
                 <t t-foreach="medias" t-as="media">
-                    <a style="cursor: pointer" t-attf-class="fa-stack fa-lg share #{media}">
+                    <a style="cursor: pointer" t-attf-class="fa-stack fa-lg share #{media}" t-att-aria-label="media" t-att-title="media">
                         <span class="fa fa-square fa-stack-2x"></span>
                         <span t-attf-class="oe_social_#{media} fa fa-#{media} fa-stack-1x fa-inverse"></span>
                     </a>
diff --git a/addons/website/static/src/xml/website.xml b/addons/website/static/src/xml/website.xml
index bc0425471763a259f7f5d5028acb490ffd082f03..bdd5aa4294193ab0372983bb29244945bebcf53c 100644
--- a/addons/website/static/src/xml/website.xml
+++ b/addons/website/static/src/xml/website.xml
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <templates id="template" xml:space="preserve">
     <t t-name="website.prompt">
-        <div class="modal o_technical_modal" tabindex="-1" role="dialog" aria-hidden="true">
+        <div role="dialog" class="modal o_technical_modal" tabindex="-1">
                 <div class="modal-dialog">
                 <div class="modal-content">
-                    <div class="modal-header" t-if="window_title">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+                    <header class="modal-header" t-if="window_title">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
                         <h3 class="modal-title"><t t-esc="window_title"/></h3>
-                    </div>
-                    <div class="modal-body">
+                    </header>
+                    <main class="modal-body">
                         <form class="form-horizontal" role="form" t-att-id="id">
                             <div class="form-group mb0">
                                 <label for="page-name" class="col-sm-3 control-label">
@@ -21,11 +21,11 @@
                                 </div>
                             </div>
                         </form>
-                    </div>
-                    <div class="modal-footer">
+                    </main>
+                    <footer class="modal-footer">
                         <button type="button" class="btn btn-sm btn-primary btn-continue">Continue</button>
-                        <button type="button" class="btn btn-sm btn-default" data-dismiss="modal" aria-hidden="true">Cancel</button>
-                    </div>
+                        <button type="button" class="btn btn-sm btn-default" data-dismiss="modal" aria-label="Cancel">Cancel</button>
+                    </footer>
                 </div>
             </div>
         </div>
diff --git a/addons/website/views/res_config_settings_views.xml b/addons/website/views/res_config_settings_views.xml
index b2d1e0598c7de6a185fd692111239e3d1006761d..b25ba33a4b8f97849e10af102cf2014adb07f344 100644
--- a/addons/website/views/res_config_settings_views.xml
+++ b/addons/website/views/res_config_settings_views.xml
@@ -15,13 +15,13 @@
                             <div class="row mt16 o_settings_container" id="webmaster_settings">
                                 <div class="col-xs-12 col-md-6 o_setting_box" id="domain_setting">
                                     <div class="o_setting_right_pane">
-                                        <label string="Website Title"/>
+                                        <span class="o_form_label">Website Title</span>
                                         <div class="text-muted">
                                             Name and favicon of your website
                                         </div>
                                         <div class="content-group">
                                             <div class="row mt16">
-                                                <label class="col-md-3 o_light_label" string="Name"/>
+                                                <label class="col-md-3 o_light_label" string="Name" for="website_name"/>
                                                 <field name="website_name"/>
                                             </div>
                                             <div class="row">
@@ -119,7 +119,7 @@
                                             </div>
                                         </div>
                                         <div attrs="{'invisible': [('has_google_maps', '=', False)]}">
-                                            <a class="btn-link fa fa-arrow-right" target="_blank"
+                                            <a role="button" class="btn-link fa fa-arrow-right" target="_blank"
                                                href="https://console.developers.google.com/flows/enableapi?apiid=maps_backend,static_maps_backend&amp;keyType=CLIENT_SIDE&amp;reusekey=true">
                                                 Create a Google Project and Get a Key
                                             </a>
diff --git a/addons/website/views/snippets.xml b/addons/website/views/snippets.xml
index f720fc8e40e67a239ca721013c1ab55076224ad4..c65c753ca445b88c9e70bdad6de3d410fb021bad 100644
--- a/addons/website/views/snippets.xml
+++ b/addons/website/views/snippets.xml
@@ -27,7 +27,7 @@
                         <div class="carousel-content col-md-4 col-md-offset-1 mt64">
                             <h2>Your Slide Title</h2>
                             <h4>Click to customize this text</h4>
-                            <p><a href="/contactus" class="btn btn-warning btn-large">Contact us</a></p>
+                            <p><a role="button" href="/contactus" class="btn btn-warning btn-large">Contact us</a></p>
                         </div>
                         <div class="carousel-img col-md-6 col-md-offset-1 hidden-sm hidden-xs">
                             <img class="img-responsive" src="/web/image/website.s_banner_default_image" alt="Slider Odoo Image"/>
@@ -36,8 +36,8 @@
                 </div>
             </div>
         </div>
-        <div class="carousel-control left hidden" data-target="#myCarousel" data-slide="prev" style="width: 10%"><i class="fa fa-chevron-left"></i></div>
-        <div class="carousel-control right hidden" data-target="#myCarousel" data-slide="next" style="width: 10%"><i class="fa fa-chevron-right"></i></div>
+        <div class="carousel-control left hidden" data-target="#myCarousel" data-slide="prev" style="width: 10%" role="img" aria-label="Previous" title="Previous"><i class="fa fa-chevron-left"></i></div>
+        <div class="carousel-control right hidden" data-target="#myCarousel" data-slide="next" style="width: 10%" role="img" aria-label="Next" title="Next"><i class="fa fa-chevron-right"></i></div>
     </div>
 </template>
 
@@ -94,7 +94,7 @@
                 <div class="col-md-offset-1 col-md-8">
                     <h1>Sell Online. Easily.</h1>
                     <p>Write one sentence to convince visitor about your message.</p>
-                    <a class="btn btn-warning btn-lg" href="/contactus">Contact us</a>
+                    <a role="button" class="btn btn-warning btn-lg" href="/contactus">Contact us</a>
                 </div>
             </div>
         </div>
@@ -148,21 +148,21 @@
         <div class="container">
             <div class="row">
                 <div class="col-md-4 text-center">
-                    <span class="fa fa-suitcase fa-5x"></span>
+                    <span class="fa fa-suitcase fa-5x" role="img" aria-label="Suitcase" title="Suitcase"></span>
                     <div>
                         <h3 class="mt8 mb0">First Feature</h3>
                         <p class="text-muted">Tell what's the value for the<br/>customer for this feature.</p>
                     </div>
                 </div>
                 <div class="col-md-4 text-center">
-                    <span class="fa fa-lock fa-5x"></span>
+                    <span class="fa fa-lock fa-5x" role="img" aria-label="Lock" title="Lock"></span>
                     <div>
                         <h3 class="mt8 mb0">Second Feature</h3>
                         <p class="text-muted">Write what the customer would like to know,<br/>not what you want to show.</p>
                     </div>
                 </div>
                 <div class="col-md-4 text-center">
-                    <span class="fa fa-heart fa-5x"></span>
+                    <span class="fa fa-heart fa-5x" role="img" aria-label="Heart" title="Heart"></span>
                     <div>
                         <h3 class="mt8 mb0">Third Feature</h3>
                         <p class="text-muted">A small explanation of this great<br/>feature, in clear words.</p>
@@ -274,20 +274,20 @@
     <div class="oe_share s_share">
         <h3>
             <span>Share</span>
-            <a target="_Blank" class="oe_share_facebook" href="https://www.facebook.com/sharer/sharer.php?u={url}"><i class="fa fa-facebook-square"></i></a>
-            <a target="_Blank" class="oe_share_twitter" href="https://twitter.com/intent/tweet?text={title}&amp;url={url}"><i class="fa fa-twitter"></i></a>
-            <a target="_Blank" class="oe_share_linkedin" href="http://www.linkedin.com/shareArticle?mini=true&amp;url={url}&amp;title={title}&amp;"><i class="fa fa-linkedin"></i></a>
-            <a target="_Blank" class="oe_share_google" href="https://plus.google.com/share?url={url}"><i class="fa fa-google-plus-square"></i></a>
-            <a href="mailto:?body={url}&amp;subject={title}"><i class="fa fa-envelope-o"></i></a>
+            <a target="_Blank" class="oe_share_facebook" href="https://www.facebook.com/sharer/sharer.php?u={url}" aria-label="Facebook" title="Facebook"><i class="fa fa-facebook-square"></i></a>
+            <a target="_Blank" class="oe_share_twitter" href="https://twitter.com/intent/tweet?text={title}&amp;url={url}" aria-label="Twitter" title="Twitter"><i class="fa fa-twitter"></i></a>
+            <a target="_Blank" class="oe_share_linkedin" href="http://www.linkedin.com/shareArticle?mini=true&amp;url={url}&amp;title={title}&amp;" aria-label="LinkedIn" title="LinkedIn"><i class="fa fa-linkedin"></i></a>
+            <a target="_Blank" class="oe_share_google" href="https://plus.google.com/share?url={url}" aria-label="Google Plus" title="Google Plus"><i class="fa fa-google-plus-square"></i></a>
+            <a href="mailto:?body={url}&amp;subject={title}" aria-label="Email" title="Email"><i class="fa fa-envelope-o"></i></a>
         </h3>
     </div>
 </template>
 
 <template id="s_facebook_page" name="Facebook Page">
     <div class="o_facebook_page">
-        <div class="o_facebook_alert alert alert-info">
+        <div class="o_facebook_alert alert alert-info" role="status">
             <span class="o_add_facebook_page">
-                <i class="fa fa-plus-circle"/> Add Facebook Page
+                <span class="fa fa-plus-circle"> Add Facebook Page</span>
             </span>
         </div>
     </div>
@@ -296,7 +296,7 @@
 <template id="s_image_gallery" name="Image Gallery">
     <section class="o_gallery o_spc-medium o_slideshow s_image_gallery" data-columns="3" style="height: 500px; overflow: hidden;">
         <div class="container">
-            <div class="alert alert-info css_editable_mode_display text-center" ><span class="o_add_images" style="cursor: pointer;"><i class="fa fa-plus-circle"/> Add Images</span></div>
+            <div class="alert alert-info css_editable_mode_display text-center" role="status"><span class="o_add_images" style="cursor: pointer;"><span class="fa fa-plus-circle"> Add Images</span></span></div>
         </div>
     </section>
 </template>
@@ -328,7 +328,7 @@
                             <p class="text-muted">
                                 <i>Instant setup, satisfied or reimbursed.</i>
                             </p>
-                            <a href="/contactus" class="btn btn-primary btn-lg">Order now</a>
+                            <a role="button" href="/contactus" class="btn btn-primary btn-lg">Order now</a>
                         </div>
                     </div>
                 </div>
@@ -350,7 +350,7 @@
                         </ul>
                         <div class="panel-footer text-center">
                             <p class="text-muted"><i>Instant setup, satisfied or reimbursed.</i></p>
-                            <a href="/contactus" class="btn btn-primary btn-lg">Order now</a>
+                            <a role="button" href="/contactus" class="btn btn-primary btn-lg">Order now</a>
                         </div>
                     </div>
                 </div>
@@ -372,7 +372,7 @@
                         </ul>
                         <div class="panel-footer text-center">
                             <p class="text-muted"><i>Instant setup, satisfied or reimbursed.</i></p>
-                            <a href="/contactus" class="btn btn-primary btn-lg">Contact us</a>
+                            <a role="button" href="/contactus" class="btn btn-primary btn-lg">Contact us</a>
                         </div>
                     </div>
                 </div>
@@ -391,7 +391,7 @@
                 <div class="col-md-6 pt16 pb16">
                     <div class="row s_no_resize_cols">
                         <div class="col-md-4">
-                            <img src="/web/image/website.s_company_team_image_1" class="img-responsive img-circle center-block shadow"/>
+                            <img alt="Company team" src="/web/image/website.s_company_team_image_1" class="img-responsive img-circle center-block shadow"/>
                         </div>
                         <div class="col-md-8">
                             <h4>Tony Fred, CEO</h4>
@@ -406,7 +406,7 @@
                 <div class="col-md-6 pt16 pb16">
                     <div class="row s_no_resize_cols">
                         <div class="col-md-4">
-                            <img src="/web/image/website.s_company_team_image_2" class="img-responsive img-circle center-block shadow"/>
+                            <img alt="Company team" src="/web/image/website.s_company_team_image_2" class="img-responsive img-circle center-block shadow"/>
                         </div>
                         <div class="col-md-8">
                             <h4>Mich Stark, COO</h4>
@@ -421,7 +421,7 @@
                 <div class="col-md-6 pt16 pb16">
                     <div class="row s_no_resize_cols">
                         <div class="col-md-4">
-                            <img src="/web/image/website.s_company_team_image_3" class="img-responsive img-circle center-block shadow"/>
+                            <img alt="Company team" src="/web/image/website.s_company_team_image_3" class="img-responsive img-circle center-block shadow"/>
                         </div>
                         <div class="col-md-8">
                             <h4>Aline Turner, CTO</h4>
@@ -436,7 +436,7 @@
                 <div class="col-md-6 pt16 pb16">
                     <div class="row s_no_resize_cols">
                         <div class="col-md-4">
-                            <img src="/web/image/website.s_company_team_image_4" class="img-responsive img-circle center-block shadow"/>
+                            <img alt="Company team" src="/web/image/website.s_company_team_image_4" class="img-responsive img-circle center-block shadow"/>
                         </div>
                         <div class="col-md-8">
                             <h4>Iris Joe, CFO</h4>
@@ -465,7 +465,7 @@
                     </p>
                 </div>
                 <div class="col-md-3">
-                    <a href="/contactus" class="btn btn-primary btn-lg pull-right mt8">
+                    <a role="button" href="/contactus" class="btn btn-primary btn-lg pull-right mt8" aria-label="Contact Us Now" title="">
                         <span>Contact Us Now</span>
                         <i class="fa fa-chevron-right"></i>
                     </a>
@@ -577,17 +577,17 @@
                             <h5 class="text-muted">Add a great slogan</h5>
                         </div>
                         <div class="col-md-12">
-                            <span style="min-width: 45px" class="fa fa-2x fa-comment pull-left mb16"></span>
+                            <span style="min-width: 45px" class="fa fa-2x fa-comment pull-left mb16" role="img" aria-label="Change icons" title="Change icons"></span>
                             <h4 class="mt0 mb0">Change Icons</h4>
                             <p>Click on the icon to adapt it to your feature</p><br/>
                         </div>
                         <div class="col-md-12">
-                            <span style="min-width: 45px" class="fa fa-2x fa-columns pull-left mb16"></span>
+                            <span style="min-width: 45px" class="fa fa-2x fa-columns pull-left mb16" role="img" aria-label="Duplicate" title="Duplicate"></span>
                             <h4 class="mt0 mb0">Duplicate</h4>
                             <p>Duplicate blocks to add more features.</p><br/>
                         </div>
                         <div class="col-md-12">
-                            <span style="min-width: 45px" class="fa fa-2x fa-user pull-left mb16"></span>
+                            <span style="min-width: 45px" class="fa fa-2x fa-user pull-left mb16" role="img" aria-label="Delete blocks" title="Delete blocks"></span>
                             <h4 class="mt0 mb0">Delete Blocks</h4>
                             <p>Select and delete blocks to remove some features.</p><br/>
                         </div>
@@ -600,17 +600,17 @@
                             <h5 class="text-muted">Add a great slogan</h5>
                         </div>
                         <div class="col-md-12">
-                            <span style="min-width: 45px" class="fa fa-2x fa-magic pull-left mb16"></span>
+                            <span style="min-width: 45px" class="fa fa-2x fa-magic pull-left mb16" role="img" aria-label="Great value" title="Great value"></span>
                             <h4 class="mt0 mb0">Great Value</h4>
                             <p>Tell features the visitor would like to know, not what you'd like to say.</p>
                         </div>
                         <div class="col-md-12">
-                            <span style="min-width: 45px" class="fa fa-2x fa-bolt pull-left mb16"></span>
+                            <span style="min-width: 45px" class="fa fa-2x fa-bolt pull-left mb16" role="img" aria-label="Change background" title="Change background"></span>
                             <h4 class="mt0 mb0">Change Background</h4>
                             <p>From the main container, you can change the background to highlight features.</p>
                         </div>
                         <div class="col-md-12">
-                            <span style="min-width: 45px" class="fa fa-2x fa-picture-o pull-left mb16"></span>
+                            <span style="min-width: 45px" class="fa fa-2x fa-picture-o pull-left mb16" role="img" aria-label="Sample images" title="Change background"></span>
                             <h4 class="mt0 mb0">Sample images</h4>
                             <p>All these icons are licensed under creative commons so that you can use them.</p>
                         </div>
@@ -688,7 +688,7 @@
         <div id="o_scroll">
             <div id="snippet_structure" class="o_panel">
                 <div class="o_panel_header">
-                    <i class="fa fa-th-large"/> Structure
+                    <span class="fa fa-th-large"> Structure</span>
                 </div>
                 <div class="o_panel_body">
                     <t t-snippet="website.s_title" t-thumbnail="/website/static/src/img/blocks/block_title.png"/>
@@ -706,7 +706,7 @@
 
             <div id="snippet_feature" class="o_panel">
                 <div class="o_panel_header">
-                    <i class="fa fa-diamond"/> Feature
+                    <span class="fa fa-diamond"> Feature</span>
                 </div>
                 <div class="o_panel_body">
                     <t t-snippet="website.s_image_gallery" t-thumbnail="/website/static/src/img/blocks/block_image_gallery.png"/>
@@ -721,7 +721,7 @@
 
             <div id="snippet_effect" class="o_panel">
                 <div class="o_panel_header">
-                    <i class="fa fa-magic icon-fix"/> Effect
+                    <span class="fa fa-magic icon-fix"> Effect</span>
                 </div>
                 <div class="o_panel_body">
                     <t t-snippet="website.s_parallax" t-thumbnail="/website/static/src/img/blocks/block_parallax.png"/>
@@ -731,7 +731,7 @@
 
             <div id="snippet_content" class="o_panel">
                 <div class="o_panel_header">
-                    <i class="fa fa-indent"/> Inner content
+                    <span class="fa fa-indent"> Inner content</span>
                 </div>
                 <div class="o_panel_body">
                     <t t-snippet="website.s_well" t-thumbnail="/website/static/src/img/blocks/block_well.png"/>
@@ -764,58 +764,58 @@
     <t t-call="web_editor.snippet_options"/>
 
     <div data-js='gallery' data-selector=".o_gallery">
-        <li data-add-images="true" data-no-preview="true"><a href="#"><i class="fa fa-plus-circle"/>Add images</a></li>
-        <li data-remove-all-images="true" data-no-preview="true"><a href="#"><i class="fa fa-trash"/>Remove all images</a></li>
+        <li data-add-images="true" data-no-preview="true"><a href="#"><span class="fa fa-plus-circle">Add images</span></a></li>
+        <li data-remove-all-images="true" data-no-preview="true"><a href="#"><span class="fa fa-trash">Remove all images</span></a></li>
         <li class="separator"/>
         <li class="dropdown-submenu">
-            <a tabindex="-2" href="#"><i class="fa fa-magic"/>Mode</a>
-            <ul class="dropdown-menu">
-                <li data-mode="nomode"><a href="#">Float</a></li>
-                <li data-mode="masonry"><a href="#">Masonry</a></li>
-                <li data-mode="grid"><a href="#">Grid</a></li>
-                <li data-mode="slideshow"><a href="#">Slideshow</a></li>
+            <a tabindex="-2" href="#"><span class="fa fa-magic">Mode</span></a>
+            <ul class="dropdown-menu" role="menu">
+                <li data-mode="nomode"><a role="menuitem" href="#">Float</a></li>
+                <li data-mode="masonry"><a role="menuitem" href="#">Masonry</a></li>
+                <li data-mode="grid"><a role="menuitem" href="#">Grid</a></li>
+                <li data-mode="slideshow"><a role="menuitem" href="#">Slideshow</a></li>
             </ul>
         </li>
         <li class="dropdown-submenu">
-            <a tabindex="-2" href="#"><i class="fa fa-clock-o"/>Slideshow speed</a>
-            <ul class="dropdown-menu">
-                 <li data-interval="1000"><a href="#">1s</a></li>
-                 <li data-interval="2000"><a href="#">2s</a></li>
-                 <li data-interval="3000"><a href="#">3s</a></li>
-                 <li data-interval="5000"><a href="#">5s</a></li>
-                 <li data-interval="10000"><a href="#">10s</a></li>
-                 <li data-interval="0"><a href="#">Disable autoplay</a></li>
+            <a tabindex="-2" href="#"><span class="fa fa-clock-o">Slideshow speed</span></a>
+            <ul class="dropdown-menu" role="menu">
+                 <li data-interval="1000"><a role="menuitem" href="#">1s</a></li>
+                 <li data-interval="2000"><a role="menuitem" href="#">2s</a></li>
+                 <li data-interval="3000"><a role="menuitem" href="#">3s</a></li>
+                 <li data-interval="5000"><a role="menuitem" href="#">5s</a></li>
+                 <li data-interval="10000"><a role="menuitem" href="#">10s</a></li>
+                 <li data-interval="0"><a role="menuitem" href="#">Disable autoplay</a></li>
             </ul>
         </li>
         <li class="dropdown-submenu">
-            <a tabindex="-2" href="#"><i class="fa fa-th"/>Columns</a>
-            <ul class="dropdown-menu">
-                <li data-columns="1"><a href="#">1</a></li>
-                <li data-columns="2"><a href="#">2</a></li>
-                <li data-columns="3"><a href="#">3</a></li>
-                <li data-columns="4"><a href="#">4</a></li>
-                <li data-columns="6"><a href="#">6</a></li>
-                <li data-columns="12"><a href="#">12</a></li>
+            <a tabindex="-2" href="#"><span class="fa fa-th">Columns</span></a>
+            <ul class="dropdown-menu" role="menu">
+                <li data-columns="1"><a role="menuitem" href="#">1</a></li>
+                <li data-columns="2"><a role="menuitem" href="#">2</a></li>
+                <li data-columns="3"><a role="menuitem" href="#">3</a></li>
+                <li data-columns="4"><a role="menuitem" href="#">4</a></li>
+                <li data-columns="6"><a role="menuitem" href="#">6</a></li>
+                <li data-columns="12"><a role="menuitem" href="#">12</a></li>
             </ul>
         </li>
         <li class="dropdown-submenu">
-            <a tabindex="-2" href="#"><i class="fa fa-arrows-h"/>Images spacing</a>
+            <a tabindex="-2" href="#"><span class="fa fa-arrows-h">Images spacing</span></a>
 
-            <ul class="dropdown-menu">
-                <li data-select-class="o_spc-none"><a href="#">None</a></li>
-                <li data-select-class="o_spc-small"><a href="#">Small</a></li>
-                <li data-select-class="o_spc-medium"><a href="#">Medium</a></li>
-                <li data-select-class="o_spc-big"><a href="#">Big</a></li>
+            <ul class="dropdown-menu" role="menu">
+                <li data-select-class="o_spc-none"><a role="menuitem" href="#">None</a></li>
+                <li data-select-class="o_spc-small"><a role="menuitem" href="#">Small</a></li>
+                <li data-select-class="o_spc-medium"><a role="menuitem" href="#">Medium</a></li>
+                <li data-select-class="o_spc-big"><a role="menuitem" href="#">Big</a></li>
             </ul>
         </li>
         <li class="dropdown-submenu">
-           <a tabindex="-2" href="#"><i class="fa fa-paint-brush"/>Styling</a>
-           <ul class="dropdown-menu">
-               <li data-styling=""><a href="#">Square</a></li>
-               <li data-styling="img-rounded"><a href="#">Rounded corners</a></li>
-               <li data-styling="img-thumbnail"><a href="#">Thumbnails</a></li>
-               <li data-styling="img-circle"><a href="#">Circle</a></li>
-               <li data-styling="shadow"><a href="#">Shadows</a></li>
+           <a tabindex="-2" href="#"><span class="fa fa-paint-brush">Styling</span></a>
+           <ul class="dropdown-menu" role="menu">
+               <li data-styling=""><a role="menuitem" href="#">Square</a></li>
+               <li data-styling="img-rounded"><a role="menuitem" href="#">Rounded corners</a></li>
+               <li data-styling="img-thumbnail"><a role="menuitem" href="#">Thumbnails</a></li>
+               <li data-styling="img-circle"><a role="menuitem" href="#">Circle</a></li>
+               <li data-styling="shadow"><a role="menuitem" href="#">Shadows</a></li>
            </ul>
         </li>
         <li class="separator"/>
@@ -824,14 +824,14 @@
     <div data-js="background"
         data-selector="section, :not(.o_gallery > .container) > .carousel, .parallax, .s_banner .carousel-content">
         <li data-choose-image="true" data-no-preview="true">
-            <a tabindex="-1" href="#"><i class="fa fa-picture-o"/>Choose Background Image</a>
+            <a tabindex="-1" href="#"><span class="fa fa-picture-o">Choose Background Image</span></a>
         </li>
     </div>
 
     <div data-js="background_position"
         data-selector="section, :not(.o_gallery > .container) > .carousel, .s_banner .carousel-content">
         <li class="background_position_li" data-background-position="true" data-no-preview="true">
-            <a tabindex="-1" href="#"><i class="fa fa-arrows"/>Background Image Sizing</a>
+            <a tabindex="-1" href="#"><span class="fa fa-arrows">Background Image Sizing</span></a>
         </li>
     </div>
 
@@ -839,8 +839,8 @@
         data-selector="section, :not(.o_gallery > .container) > .carousel"
         data-exclude=".parallax">
         <li class="dropdown-submenu">
-            <a tabindex="-1" href="#"><i class="fa fa-eyedropper"/>Background Color</a>
-            <ul class="dropdown-menu">
+            <a tabindex="-1" href="#"><span class="fa fa-eyedropper">Background Color</span></a>
+            <ul class="dropdown-menu" role="menu">
                 <li></li>
             </ul>
         </li>
@@ -851,8 +851,8 @@
         data-palette-default="transparent_grayscale"
         data-palette-title="Overlay Color">
         <li class="dropdown-submenu">
-            <a tabindex="-1" href="#"><i class="fa fa-eyedropper"/>Overlay color</a>
-            <ul class="dropdown-menu">
+            <a tabindex="-1" href="#"><span class="fa fa-eyedropper">Overlay color</span></a>
+            <ul class="dropdown-menu" role="menu">
                 <li></li>
             </ul>
         </li>
@@ -860,12 +860,12 @@
 
     <div data-js='gallery_img' data-selector=".o_gallery img">
         <li class="dropdown-submenu">
-            <a tabindex="-2" href="#"><i class="fa fa-refresh"/>Re-order</a>
-            <ul class="dropdown-menu" data-no-preview="true">
-                <li data-position="first"><a href="#">Move to first</a></li>
-                <li data-position="prev"><a href="#">Move to previous</a></li>
-                <li data-position="next"><a href="#">Move to next</a></li>
-                <li data-position="last"><a href="#">Move to last</a></li>
+            <a tabindex="-2" href="#"><span class="fa fa-refresh">Re-order</span></a>
+            <ul class="dropdown-menu" role="menu" data-no-preview="true">
+                <li data-position="first"><a role="menuitem" href="#">Move to first</a></li>
+                <li data-position="prev"><a role="menuitem" href="#">Move to previous</a></li>
+                <li data-position="next"><a role="menuitem" href="#">Move to next</a></li>
+                <li data-position="last"><a role="menuitem" href="#">Move to last</a></li>
             </ul>
         </li>
     </div>
@@ -874,18 +874,18 @@
         data-selector=":not(.o_gallery > .container) > .carousel">
         <li class="divider"></li>
         <li class="dropdown-submenu">
-            <a tabindex="-2" href="#"><i class="fa fa-clock-o"/>Slideshow speed</a>
-            <ul class="dropdown-menu">
-                 <li data-interval="1000"><a href="#">1s</a></li>
-                 <li data-interval="2000"><a href="#">2s</a></li>
-                 <li data-interval="3000"><a href="#">3s</a></li>
-                 <li data-interval="5000"><a href="#">5s</a></li>
-                 <li data-interval="10000"><a href="#">10s</a></li>
-                 <li data-interval="0"><a href="#">Disable autoplay</a></li>
+            <a tabindex="-2" href="#"><span class="fa fa-clock-o">Slideshow speed</span></a>
+            <ul class="dropdown-menu" role="menu">
+                 <li data-interval="1000"><a role="menuitem" href="#">1s</a></li>
+                 <li data-interval="2000"><a role="menuitem" href="#">2s</a></li>
+                 <li data-interval="3000"><a role="menuitem" href="#">3s</a></li>
+                 <li data-interval="5000"><a role="menuitem" href="#">5s</a></li>
+                 <li data-interval="10000"><a role="menuitem" href="#">10s</a></li>
+                 <li data-interval="0"><a role="menuitem" href="#">Disable autoplay</a></li>
             </ul>
         </li>
-        <li data-add-slide="true" data-no-preview="true"><a href="#"><i class="fa fa-plus-circle"/>Add Slide</a></li>
-        <li data-remove-slide="true" data-no-preview="true"><a href="#" ><i class="fa fa-trash-o"/>Remove Slide</a></li>
+        <li data-add-slide="true" data-no-preview="true"><a href="#"><span class="fa fa-plus-circle">Add Slide</span></a></li>
+        <li data-remove-slide="true" data-no-preview="true"><a href="#" ><span class="fa fa-trash-o">Remove Slide</span></a></li>
     </div>
 
     <div data-selector="section, :not(.o_gallery > .container) > .carousel, .parallax"
@@ -900,14 +900,14 @@
         data-target="> * > .row"
         data-exclude=".s_text_block_image_fw, .s_company_team, .s_big_picture">
         <li class="dropdown-submenu">
-            <a tabindex="-2" href="#"><i class="fa fa-columns"/>Number of columns</a>
-            <ul class="dropdown-menu" data-no-preview="true">
-                <li data-select-count="1"><a href="#">1</a></li>
-                <li data-select-count="2"><a href="#">2</a></li>
-                <li data-select-count="3"><a href="#">3</a></li>
-                <li data-select-count="4"><a href="#">4</a></li>
-                <li data-select-count="5"><a href="#">5</a></li>
-                <li data-select-count="6"><a href="#">6</a></li>
+            <a tabindex="-2" href="#"><span class="fa fa-columns">Number of columns</span></a>
+            <ul class="dropdown-menu" role="menu" data-no-preview="true">
+                <li data-select-count="1"><a role="menuitem" href="#">1</a></li>
+                <li data-select-count="2"><a role="menuitem" href="#">2</a></li>
+                <li data-select-count="3"><a role="menuitem" href="#">3</a></li>
+                <li data-select-count="4"><a role="menuitem" href="#">4</a></li>
+                <li data-select-count="5"><a role="menuitem" href="#">5</a></li>
+                <li data-select-count="6"><a role="menuitem" href="#">6</a></li>
             </ul>
         </li>
     </div>
@@ -930,39 +930,39 @@
 
     <div data-selector=".o_image_floating">
         <li class="dropdown-submenu">
-            <a tabindex="-2" href="#"><i class="fa fa-expand"/>Margin</a>
-            <ul class="dropdown-menu">
-                <li data-select-class="o_margin_xl"><a href="#">Extra-Large</a></li>
-                <li data-select-class="o_margin_l"><a href="#">Large</a></li>
-                <li data-select-class="o_margin_m"><a href="#">Medium</a></li>
-                <li data-select-class="o_margin_s"><a href="#">Small</a></li>
-                <li data-select-class=""><a href="#">None</a></li>
+            <a tabindex="-2" href="#"><span class="fa fa-expand">Margin</span></a>
+            <ul class="dropdown-menu" role="menu">
+                <li data-select-class="o_margin_xl"><a role="menuitem" href="#">Extra-Large</a></li>
+                <li data-select-class="o_margin_l"><a role="menuitem" href="#">Large</a></li>
+                <li data-select-class="o_margin_m"><a role="menuitem" href="#">Medium</a></li>
+                <li data-select-class="o_margin_s"><a role="menuitem" href="#">Small</a></li>
+                <li data-select-class=""><a role="menuitem" href="#">None</a></li>
             </ul>
         </li>
     </div>
 
     <div data-selector=".o_image_floating">
         <li class="dropdown-submenu">
-            <a tabindex="-2" href="#"><i class="fa fa-magnet"/>Float</a>
-            <ul class="dropdown-menu" data-no-preview="true">
-                <li data-select-class="pull-left"><a href="#">Left</a></li>
-                <li data-select-class="pull-right"><a href="#">Right</a></li>
+            <a tabindex="-2" href="#"><span class="fa fa-magnet">Float</span></a>
+            <ul class="dropdown-menu" role="menu" data-no-preview="true">
+                <li data-select-class="pull-left"><a role="menuitem" href="#">Left</a></li>
+                <li data-select-class="pull-right"><a role="menuitem" href="#">Right</a></li>
             </ul>
         </li>
     </div>
 
     <div data-js="parallax" data-selector=".parallax">
         <li class="dropdown-submenu">
-            <a tabindex="-1" href="#"><i class="fa fa-clock-o"/>Scroll Speed</a>
-            <ul class="dropdown-menu" name="parallax-scroll">
-                <li data-scroll="0"><a href="#">No-scroll</a></li>
-                <li class="separator"/>
-                <li data-scroll="1"><a href="#">Fixed</a></li>
-                <li class="separator"/>
-                <li data-scroll="0.6"><a href="#">Very Slow</a></li>
-                <li data-scroll="1.2"><a href="#">Slow</a></li>
-                <li data-scroll="1.6"><a href="#">Fast</a></li>
-                <li data-scroll="2"><a href="#">Very Fast</a></li>
+            <a tabindex="-1" href="#"><span class="fa fa-clock-o">Scroll Speed</span></a>
+            <ul class="dropdown-menu" role="menu" name="parallax-scroll">
+                <li data-scroll="0"><a role="menuitem" href="#">No-scroll</a></li>
+                <li class="separator" role="separator"/>
+                <li data-scroll="1"><a role="menuitem" href="#">Fixed</a></li>
+                <li class="separator" role="separator"/>
+                <li data-scroll="0.6"><a role="menuitem" href="#">Very Slow</a></li>
+                <li data-scroll="1.2"><a role="menuitem" href="#">Slow</a></li>
+                <li data-scroll="1.6"><a role="menuitem" href="#">Fast</a></li>
+                <li data-scroll="2"><a role="menuitem" href="#">Very Fast</a></li>
             </ul>
         </li>
     </div>
@@ -974,7 +974,7 @@
 
     <div data-js="facebookPage" data-selector=".o_facebook_page">
         <li data-fb-page-options="true" data-no-preview="true">
-            <a href="#"><i class="fa fa-facebook"/>Options</a>
+            <a href="#"><span class="fa fa-facebook">Options</span></a>
         </li>
     </div>
 
diff --git a/addons/website/views/website_navbar_templates.xml b/addons/website/views/website_navbar_templates.xml
index 9c5c213acbea0ca2bde1ad493beaed28ff741c20..48d0246465542b99ce20fe49549b694570aa1b6d 100644
--- a/addons/website/views/website_navbar_templates.xml
+++ b/addons/website/views/website_navbar_templates.xml
@@ -10,13 +10,13 @@
                 <ul id="oe_applications">
                     <li class="dropdown active">
                         <a class="dropdown full" data-toggle="dropdown" href="#">
-                            <i class="fa fa-th-large"/> WEBSITE <b class="caret"/>
+                            <span class="fa fa-th-large"> WEBSITE </span><b class="caret"/>
                         </a>
-                        <ul class="dropdown-menu">
+                        <ul class="dropdown-menu" role="menu">
                             <li t-as="menu" t-foreach="menu_data['children']">
                                 <t t-set="debug_param" t-value="'?&amp;debug=' if debug else ''"/>
-                                <a t-att-class="'oe_menu_toggler' if menu.get('children') else 'oe_menu_leaf'" t-att-data-action-id="menu['action'] and menu['action'].split(',')[1] or None" t-att-data-action-model="menu['action'] and menu['action'].split(',')[0] or None" t-att-data-menu="menu['id']" t-att-data-menu-xmlid="menu.get('xmlid')" t-att-href="'/web%s#menu_id=%s&amp;action=%s' % (debug_param, menu['id'], menu['action'] and menu['action'].split(',')[1] or '')">
-                                    <i t-attf-class="fa #{menu.get('icon')} fa-lg fa-fw" t-if="menu.get('icon')"/>
+                                <a role="menuitem" t-att-class="'oe_menu_toggler' if menu.get('children') else 'oe_menu_leaf'" t-att-data-action-id="menu['action'] and menu['action'].split(',')[1] or None" t-att-data-action-model="menu['action'] and menu['action'].split(',')[0] or None" t-att-data-menu="menu['id']" t-att-data-menu-xmlid="menu.get('xmlid')" t-att-href="'/web%s#menu_id=%s&amp;action=%s' % (debug_param, menu['id'], menu['action'] and menu['action'].split(',')[1] or '')">
+                                    <i t-attf-class="fa #{menu.get('icon')} fa-lg fa-fw" t-if="menu.get('icon')" role="img" aria-label="Menu" title="Menu"/>
                                     <span class="oe_menu_text">
                                         <t t-esc="menu['name']"/>
                                     </span>
@@ -26,34 +26,34 @@
                     </li>
                 </ul>
 
-                <button type="button" class="fa fa-bars pull-right visible-xs-block o_mobile_menu_toggle"/>
+                <button type="button" class="fa fa-bars pull-right visible-xs-block o_mobile_menu_toggle" aria-label="Menu" title="Menu"/>
 
                 <ul class="o_menu_sections" groups="website.group_website_designer">
                     <!-- Content -->
                     <li t-if="editable" class="dropdown" id="content-menu">
                         <a id="content-menu-button" class="dropdown-toggle waves" data-toggle="dropdown" href="#">Content</a>
                         <ul class="dropdown-menu" role="menu">
-                            <li><a data-action="edit_menu" href="#" title="Edit Top Menu">Edit Menu</a></li>
-                            <li><a href="/website/pages" title="Manage Your Website Pages">Manage Pages</a></li>
+                            <li><a role="menuitem" data-action="edit_menu" href="#" title="Edit Top Menu">Edit Menu</a></li>
+                            <li><a role="menuitem" href="/website/pages" title="Manage Your Website Pages">Manage Pages</a></li>
                             <li t-if="deletable" role="separator" class="divider"></li>
-                            <li t-if="deletable"><a href="#" data-action="page_properties">Page Properties</a></li>
+                            <li t-if="deletable"><a role="menuitem" href="#" data-action="page_properties">Page Properties</a></li>
                         </ul>
                     </li>
                     <!-- Customize -->
                     <li class="dropdown" id="customize-menu">
                         <a class="dropdown-toggle waves" data-toggle="dropdown" href="#">Customize</a>
                         <ul class="dropdown-menu" role="menu">
-                            <li id="theme_customize"><a href="#" data-action="customize_theme">Customize Theme</a></li>
-                            <li id="html_editor"><a href="#" data-action="ace">HTML/CSS Editor</a></li>
-                            <li id="install_apps"><a href="/web#action=website.action_website_configuration">Settings</a></li>
-                            <li class="divider"/>
+                            <li id="theme_customize"><a role="menuitem" href="#" data-action="customize_theme">Customize Theme</a></li>
+                            <li id="html_editor"><a role="menuitem" href="#" data-action="ace">HTML/CSS Editor</a></li>
+                            <li id="install_apps"><a role="menuitem" href="/web#action=website.action_website_configuration">Settings</a></li>
+                            <li class="divider" role="separator"/>
                         </ul>
                     </li>
                     <!-- Promote -->
                     <li class="dropdown" id="promote-menu">
                         <a class="dropdown-toggle waves" data-toggle="dropdown" href="#">Promote</a>
                         <ul class="dropdown-menu oe_promote_menu" role="menu">
-                            <li><a data-action="promote-current-page" href="#" title="Promote page on the web">Optimize SEO</a></li>
+                            <li><a role="menuitem" data-action="promote-current-page" href="#" title="Promote page on the web">Optimize SEO</a></li>
                         </ul>
                     </li>
                 </ul>
@@ -61,38 +61,38 @@
                 <ul class="o_menu_systray hidden-xs" groups="website.group_website_publisher">
                     <li t-if="'website_published' in main_object.fields_get()" t-attf-class="js_publish_management #{main_object.website_published and 'css_published' or 'css_unpublished'}" t-att-data-id="main_object.id" t-att-data-object="main_object._name" t-att-data-controller="publish_controller">
                         <a>
-                            <label class="o_switch o_switch_danger js_publish_btn" for="id" >
+                            <button class="o_switch o_switch_danger js_publish_btn">
                                 <input type="checkbox" t-att-checked="main_object.website_published" id="id"/>
                                 <span/>
                                 <span class="css_publish">Unpublished</span>
                                 <span class="css_unpublish">Published</span>
-                            </label>
+                            </button>
                         </a>
                     </li>
                     <!-- Mobile preview -->
                     <li class="o_mobile_preview" id="mobile-menu">
-                        <a data-action="show-mobile-preview" href="#"><span title="Mobile preview" class="fa fa-mobile"/></a>
+                        <a data-action="show-mobile-preview" href="#"><span title="Mobile preview" role="img" aria-label="Mobile preview" class="fa fa-mobile"/></a>
                     </li>
                     <!-- Page Edition -->
                     <li class="o_new_content_menu" id="new-content-menu">
-                        <a href="#"><span class="fa fa-plus"/>New</a>
+                        <a href="#"><span class="fa fa-plus">New</span></a>
                         <div id="o_new_content_menu_choices" class="o_hidden">
                             <ul>
-                                <li groups="website.group_website_designer"><a href="#" data-action="new_page"><i class="fa fa-file-o"/><p>New Page</p></a></li>
+                                <li groups="website.group_website_designer"><a href="#" data-action="new_page" aria-label="New page" title="New page"><i class="fa fa-file-o"/><p>New Page</p></a></li>
                             </ul>
                         </div>
                     </li>
                     <li t-if="not translatable" id="edit-page-menu">
-                        <a data-action="edit" href="#"><span class="fa fa-pencil"/>Edit</a>
+                        <a data-action="edit" href="#"><span class="fa fa-pencil">Edit</span></a>
                     </li>
                     <li t-if="'website_published' in main_object.fields_get() and main_object._name != 'website.page'">
-                        <a class="btn btn-primary btn-xs dropdown-toggle css_edit_dynamic" data-toggle="dropdown">
+                        <a role="button" class="btn btn-primary btn-xs dropdown-toggle css_edit_dynamic" data-toggle="dropdown">
                             <span class="caret"></span>
                             <span class="sr-only">Toggle Dropdown</span>
                         </a>
                         <ul class="dropdown-menu" role="menu">
                             <li id="edit-in-backend">
-                                <a style="text-align: left;" t-attf-href="/web#return_label=Website&amp;view_type=form&amp;model=#{main_object._name}&amp;id=#{main_object.id}&amp;action=#{action}"
+                                <a role="menuitem" style="text-align: left;" t-attf-href="/web#return_label=Website&amp;view_type=form&amp;model=#{main_object._name}&amp;id=#{main_object.id}&amp;action=#{action}"
                                    class="btn btn-link btn-xs" title='Edit in backend'>Edit in backend</a>
                             </li>
                         </ul>
diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml
index 6d84577b4d5b215336c9dcb6ae7ed43a4296cc20..7f8efab47046c8af6082fbf00ee210022635b927 100644
--- a/addons/website/views/website_templates.xml
+++ b/addons/website/views/website_templates.xml
@@ -70,7 +70,7 @@
     <li t-if="submenu.is_visible and not submenu.child_id.filtered(lambda menu: menu.is_visible)" t-att-class="
         'active' if submenu.clean_url() and unslug_url(request.httprequest.path) == unslug_url(submenu.clean_url()) else None
         ">
-        <a t-att-href="submenu.clean_url()" t-ignore="true" t-att-target="'_blank' if submenu.new_window else None">
+        <a role="menuitem" t-att-href="submenu.clean_url()" t-ignore="true" t-att-target="'_blank' if submenu.new_window else None">
             <span t-field="submenu.name"/>
         </a>
     </li>
@@ -234,7 +234,7 @@
 <template id="layout_logo_show" inherit_id="website.layout" customize_show="True" name="Show Logo">
     <xpath expr="//header//a[hasclass('navbar-brand')]" position="replace">
         <a href="/" class="navbar-brand logo">
-            <span t-field="res_company.logo" t-options="{'widget': 'image'}" t-att-alt="'Logo of %s' % res_company.name" t-att-title="res_company.name" />
+            <span t-field="res_company.logo" t-options="{'widget': 'image'}" role="img" t-att-aria-label="'Logo of %s' % res_company.name" t-att-title="res_company.name" />
         </a>
     </xpath>
 </template>
@@ -336,8 +336,8 @@
         <li groups="website.group_website_publisher">
             <t t-set="url_return" t-value="url_for('', '[lang]') + '?' + keep_query()"/>
             <a t-attf-href="/web#action=base.action_view_base_language_install&amp;website_id=#{website.id if website else ''}&amp;url_return=#{url_return}">
-                <i class="fa fa-plus-circle"/>
-                Add a language...
+                <span class="fa fa-plus-circle">
+                    Add a language...</span>
             </a>
         </li>
     </ul>
@@ -355,7 +355,7 @@
             <ul class="dropdown-menu" role="menu" t-att-aria-labelledby="'dopprod-%s' % object.id">
                 <t t-raw="0"/>
                 <li t-if="publish_edit">
-                    <a t-attf-href="/web#return_label=Website&amp;view_type=form&amp;model=#{object._name}&amp;id=#{object.id}&amp;action=#{action}"
+                    <a role="menuitem" t-attf-href="/web#return_label=Website&amp;view_type=form&amp;model=#{object._name}&amp;id=#{object.id}&amp;action=#{action}"
                     title='Edit in backend'>Edit</a>
                 </li>
             </ul>
@@ -402,12 +402,12 @@
     - 'loading': on the container/modal when the new css is loading
 -->
 <template id="website.theme_customize" name="Theme Modal for Customization">
-  <div id="theme_customize_modal" class="modal fade">
+  <div role="dialog" id="theme_customize_modal" class="modal fade">
       <div class="modal-dialog">
           <div class="modal-content">
-            <div class="modal-header text-center">
+            <header class="modal-header text-center">
                 <h4 class="modal-title">Please install a theme in order to customize your website.</h4>
-            </div>
+            </header>
           </div>
       </div>
   </div>
@@ -486,8 +486,8 @@
                     Information about the <t t-esc="res_company.name"/> instance of Odoo, the <a target="_blank" href="https://www.odoo.com">Open Source ERP</a>.
                 </p>
 
-                <div class="alert alert-warning alert-dismissable mt16" groups="website.group_website_publisher">
-                   <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                <div class="alert alert-warning alert-dismissable mt16" groups="website.group_website_publisher" role="status">
+                   <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                    <p>
                      Note: To hide this page, uncheck it from the top Customize menu.
                    </p>
@@ -578,7 +578,7 @@
         <div class="container">
             <div class="well mt32">
                 <p>This page does not exist, but you can create it as you are administrator of this site.</p>
-                <a class="btn btn-primary js_disable_on_click" t-attf-href="/website/add/#{ path }#{ from_template and '?template=%s' % from_template }">Create Page</a>
+                <a role="button" class="btn btn-primary js_disable_on_click" t-attf-href="/website/add/#{ path }#{ from_template and '?template=%s' % from_template }">Create Page</a>
             </div>
             <div class="text-center text-muted">Edit the content below this line to adapt the default "page not found" page.</div>
         </div>
@@ -739,15 +739,15 @@
             </script>
         </head>
         <body>
-            <div id="reset_template_confirmation" class="modal" tabindex="-1" role="dialog" aria-hidden="true" t-ignore="true">
+            <div role="dialog" id="reset_template_confirmation" class="modal" tabindex="-1" aria-hidden="true" t-ignore="true">
                 <div class="modal-dialog">
                     <form class="form-horizontal" role="form">
                     <div class="modal-content">
-                        <div class="modal-header">
-                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+                        <header class="modal-header">
+                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
                             <h3 class="modal-title">Reset templates</h3>
-                        </div>
-                        <div class="modal-body">
+                        </header>
+                        <main class="modal-body">
                             <div class="form-group mb0">
                                 <label for="page-name" class="col-sm-9">
                                     <p>The selected templates will be reset to their factory settings.</p>
@@ -757,11 +757,11 @@
                                     <input type="text" class="form-control" required="required" placeholder="yes"/>
                                 </div>
                             </div>
-                        </div>
-                        <div class="modal-footer">
+                        </main>
+                        <footer class="modal-footer">
                             <input type="submit" value="Confirm" class="btn btn-primary"/>
-                            <button type="button" class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
-                        </div>
+                            <button type="button" class="btn" data-dismiss="modal" aria-label="Cancel">Cancel</button>
+                        </footer>
                     </div>
                     </form>
                 </div>
@@ -785,7 +785,7 @@
                         <h1 class="container mt32"><t t-esc="status_code"/>: <t t-esc="status_message"/></h1>
                     </div>
                     <div class="container" t-if="views">
-                        <div class="alert alert-danger" t-if="qweb_exception and editable">
+                        <div class="alert alert-danger" t-if="qweb_exception and editable" role="alert">
                             <h4>Template fallback</h4>
                             <p>An error occured while rendering the template <code t-esc="qweb_exception.qweb['template']"/>.</p>
                             <p>If this error is caused by a change of yours in the templates, you have the possibility to reset one or more templates to their <strong>factory settings</strong>.</p>
@@ -849,12 +849,12 @@ Sitemap: <t t-esc="url_root"/>sitemap.xml
                 "widget": "contact",
                 "fields": ["name", "address", "phone", "mobile", "email"]}'/>
         <t t-if="not res_company.google_map_img()">
-            <span class="fa fa-map-marker fa-fw mt16"/> <a t-att-href="res_company.google_map_link()" target="_BLANK"> Google Maps</a>
+            <span class="fa fa-map-marker fa-fw mt16" role="img" aria-label="Address" title="Address"/> <a t-att-href="res_company.google_map_link()" target="_BLANK"> Google Maps</a>
         </t>
     </address>
     <t t-if="res_company.google_map_img()">
         <a t-att-href="res_company.google_map_link()" target="_BLANK">
-           <img class="thumbnail img-responsive" t-att-src="res_company.google_map_img()" />
+           <img class="thumbnail img-responsive" t-att-src="res_company.google_map_img()" alt="Google Maps"/>
         </a>
     </t>
 </template>
@@ -865,7 +865,7 @@ Sitemap: <t t-esc="url_root"/>sitemap.xml
             <input type="text" name="search" class="search-query form-control oe_search_box" placeholder="Search..." t-att-value="search" />
         </div>
         <span class="input-group-btn">
-           <button type="submit" class="btn btn-default oe_search_button"><i class="fa fa-search"/></button>
+           <button type="submit" class="btn btn-default oe_search_button" aria-label="Search" title="Search"><i class="fa fa-search"/></button>
         </span>
     </div>
 </template>
@@ -888,13 +888,13 @@ Sitemap: <t t-esc="url_root"/>sitemap.xml
           </form>
           <div t-if="searchbar_sortings" class="dropdown pull-right mt8 mr8">
               <button class="btn btn-default" type="button" data-toggle="dropdown">
-                  <span class="fa fa-sort fa-lg" />
+                  <span class="fa fa-sort fa-lg" role="img" aria-label="Sort" title="Sort"/>
                   <span class='hidden-xs hidden-sm hidden-md' t-esc="searchbar_sortings[sortby].get('label', 'Newest')"/>
-                  <span class="caret"></span>
+                  <span class="caret" role="img" aria-label="Dropdown menu" title="Dropdown menu"></span>
               </button>
-              <ul class="dropdown-menu" aria-labelledby="portal_searchbar_sortby">
+              <ul class="dropdown-menu" role="menu" aria-labelledby="portal_searchbar_sortby">
                   <li t-foreach="searchbar_sortings" t-as="option" t-attf-class="#{sortby == option and 'active'}">
-                      <a t-att-href="request.httprequest.path + '?' + keep_query('*', sortby=option)">
+                      <a role="menuitem" t-att-href="request.httprequest.path + '?' + keep_query('*', sortby=option)">
                           <span t-esc="searchbar_sortings[option].get('label')"/>
                       </a>
                   </li>
@@ -915,25 +915,25 @@ Sitemap: <t t-esc="url_root"/>sitemap.xml
                     <tr class="active">
                       <th>Name</th>
                       <th>Url</th>
-                      <th class="col-md-1 text-center"><i title="Is the page included in the main menu?" class="fa fa-thumb-tack" aria-hidden="true"></i></th>
-                      <th class="col-md-1 text-center"><i title="Is the page published?" class="fa fa-eye" aria-hidden="true"></i></th>
-                      <th class="col-md-1 text-center"><i title="Is the page indexed by search engines?" class="fa fa-globe" aria-hidden="true"></i></th>
+                      <th class="col-md-1 text-center"><i title="Is the page included in the main menu?" role="img" aria-label="Is the page included in the main menu?" class="fa fa-thumb-tack"></i></th>
+                      <th class="col-md-1 text-center"><i title="Is the page published?" role="img" aria-label="Is the page published?" class="fa fa-eye"></i></th>
+                      <th class="col-md-1 text-center"><i title="Is the page indexed by search engines?" role="img" aria-label="Is the page indexed by search engines?" class="fa fa-globe"></i></th>
                       <th class="col-sm-3 col-md-2"></th>
                     </tr>
                   </thead>
                   <t t-foreach="pages" t-as="page">
                       <tr>
-                          <td><i t-if="page.is_homepage" class="fa fa-home"></i> <span style="word-break: break-all;" t-esc="page.name"/></td>
+                          <td><i t-if="page.is_homepage" class="fa fa-home" role="img" aria-label="Home" title="Home"></i> <span style="word-break: break-all;" t-esc="page.name"/></td>
                           <td><a style="word-break: break-all;" t-attf-href="{{page.url}}"><t t-esc="page.url"/></a></td>
-                          <td class="text-center"><i t-att-class="'fa fa-check' if page.menu_ids else 'fa fa-times text-muted'" aria-hidden="true"></i></td>
+                          <td class="text-center"><i t-att-class="'fa fa-check' if page.menu_ids else 'fa fa-times text-muted'" role="img" t-att-aria-label="'Checked' if page.menu_ids else 'Not checked'" t-att-title="'Checked' if page.menu_ids else 'Not checked'"></i></td>
                           <t t-set='date_formatted'><t  t-options='{"widget": "date"}' t-esc="page.date_publish"/></t>
-                          <td class="text-center"><i t-att-title="not page.is_visible and page.website_published and 'This page will be visible on ' + date_formatted" t-att-class="'fa fa-check' if page.is_visible and page.website_published else 'fa fa-eye-slash' if not page.is_visible and page.website_published else 'fa fa-times text-muted'" aria-hidden="true"></i></td>
-                          <td class="text-center"><i t-att-class="'fa fa-check' if page.website_indexed else 'fa fa-times text-muted'" aria-hidden="true"></i></td>
+                          <td class="text-center"><i t-att-title="not page.is_visible and page.website_published and 'This page will be visible on ' + date_formatted" role="img" t-att-aria-label="not page.is_visible and page.website_published and 'This page will be visible on ' + date_formatted" t-att-class="'fa fa-check' if page.is_visible and page.website_published else 'fa fa-eye-slash' if not page.is_visible and page.website_published else 'fa fa-times text-muted'"></i></td>
+                          <td class="text-center"><i t-att-class="'fa fa-check' if page.website_indexed else 'fa fa-times text-muted'" role="img" t-att-aria-label="'Checked' if page.website_indexed else 'Not checked'" t-att-title="'Checked' if page.website_indexed else 'Not checked'"></i></td>
                           <td class="text-right">
-                              <a class="mr4 fa fa-cog js_page_properties" t-att-data-id="page.id" href="#" title="Manage this page"></a>
-                              <a class="mr4 fa fa-pencil-square-o" t-attf-href="/web#id=#{page.view_id.id}&amp;view_type=form&amp;model=ir.ui.view" title="Edit code in backend"></a>
-                              <a class="mr4 fa fa-clone js_clone_page" t-att-data-id="page.id" href="#" title="Clone this page"></a>
-                              <a class="fa fa-trash js_delete_page" t-att-data-id="page.id" href="#" title="Delete this page"></a>
+                              <a class="mr4 fa fa-cog js_page_properties" t-att-data-id="page.id" href="#" title="Manage this page" aria-label="Manage this page"></a>
+                              <a class="mr4 fa fa-pencil-square-o" t-attf-href="/web#id=#{page.view_id.id}&amp;view_type=form&amp;model=ir.ui.view" title="Edit code in backend" aria-label="Edit code in backend"></a>
+                              <a class="mr4 fa fa-clone js_clone_page" t-att-data-id="page.id" href="#" title="Clone this page" aria-label="Clone this page"></a>
+                              <a class="fa fa-trash js_delete_page" t-att-data-id="page.id" href="#" title="Delete this page" aria-label="Delete this page"></a>
                           </td>
                       </tr>
                   </t>
diff --git a/addons/website/views/website_views.xml b/addons/website/views/website_views.xml
index 6932eb9c053c0989b7517ce27fced93eba5d7de1..088ded08317ace8db4dff12ddb0165d2195ba3b8 100644
--- a/addons/website/views/website_views.xml
+++ b/addons/website/views/website_views.xml
@@ -145,7 +145,7 @@
                             </group>
                         </group>
                         <field groups="base.group_no_one" name="website_ids"/>
-                        <label string="Related Menu Items"/>
+                        <label for="menu_ids" string="Related Menu Items"/>
                         <field name="menu_ids"/>
                     </sheet>
                 </form>
@@ -199,7 +199,7 @@
                                 <field name="parent_id"/>
                             </group>
                         </group>
-                        <label string="Child Menus"/>
+                        <label for="child_id" string="Child Menus"/>
                         <field name="child_id">
                             <tree>
                                 <field name="sequence" widget="handle"/>
diff --git a/addons/website_blog/data/website_blog_demo.xml b/addons/website_blog/data/website_blog_demo.xml
index d76b9a8f0ba85b29820b7c657369d75f9b5cb446..721a23bcedd88ae4c0de767195e1692d00d2043f 100644
--- a/addons/website_blog/data/website_blog_demo.xml
+++ b/addons/website_blog/data/website_blog_demo.xml
@@ -71,7 +71,7 @@
                         read) the inbox and easily mark messages for future
                         actions. Every inbox should be empty after having
                         been processed; no more overload of information.
-                        <img class="img-responsive" src="/website_blog/static/src/img/mail-sc-00.png"/>
+                        <img class="img-responsive" src="/website_blog/static/src/img/mail-sc-00.png" alt=""/>
                     </li><li>
                         Keep control of what you want to receive or don't want
                         to receive. People should never receive spam. You
@@ -82,7 +82,7 @@
                         interface does not require you to click on every mail
                         to read a thread. Reading a full thread, replying,
                         attaching documents is super fast.
-                        <img class="img-responsive" src="/website_blog/static/src/img/mail-sc-03.png"/>
+                        <img class="img-responsive" src="/website_blog/static/src/img/mail-sc-03.png" alt=""/>
                     </li><li>
                         A mix of push & pull: Today, people
                         are victims of what others decide to push to them.
@@ -139,7 +139,7 @@
     <div class="container">
         <div class="row">
             <div class="col-md-6 mt16">
-                <img class="img img-responsive mb16" src="/website_blog/static/src/img/CMS_WMS_screens.jpg"/>
+                <img class="img img-responsive mb16" src="/website_blog/static/src/img/CMS_WMS_screens.jpg" alt=""/>
             </div>
             <div class="col-md-6 mt16">
                 <h3>New Features Launched</h3>
diff --git a/addons/website_blog/static/src/js/website.tour.blog.js b/addons/website_blog/static/src/js/website.tour.blog.js
index eddce1f10a3992fd1946150c703ca77ca779eaf3..3c464987559afb0e7e877a75bf5698e213141e8b 100644
--- a/addons/website_blog/static/src/js/website.tour.blog.js
+++ b/addons/website_blog/static/src/js/website.tour.blog.js
@@ -30,12 +30,12 @@ odoo.define("website_blog.tour", function (require) {
         content: _t("Click here to change your post cover."),
         position: "right",
     }, {
-        trigger: ".o_select_media_dialog .o_existing_attachment_cell:nth(1) img",
-        extra_trigger: ".modal:has(.o_existing_attachment_cell:nth(1))",
+        trigger: ".o_existing_attachment_cell:nth(1) img",
+        extra_trigger: '.modal-dialog:has(.o_existing_attachment_cell:nth(1))',
         content: _t("Choose an image from the library."),
         position: "top",
     }, {
-        trigger: ".o_select_media_dialog .modal-footer > .btn-primary",
+        trigger: "footer.modal-footer .btn-primary",
         extra_trigger: ".o_existing_attachment_cell.o_selected",
         content: _t("Click on <b>Save</b> to set the picture as cover."),
         position: "top",
@@ -59,7 +59,7 @@ odoo.define("website_blog.tour", function (require) {
         position: "bottom",
     }, {
         trigger: "button[data-dismiss=modal]",
-        extra_trigger: ".modal:has(#mobile-viewport)",
+        extra_trigger: '[role="dialog"]:has(#mobile-viewport)',
         content: _t("Once you have reviewed the content on mobile, close the preview."),
         position: "right",
     }, {
diff --git a/addons/website_blog/views/snippets.xml b/addons/website_blog/views/snippets.xml
index d1e4866efae91dd63e4504f85b0eab185263c410..eee8bccc9b257cea9cd73981251aeaba523f6b03 100644
--- a/addons/website_blog/views/snippets.xml
+++ b/addons/website_blog/views/snippets.xml
@@ -7,31 +7,31 @@
             <li data-clear="true" data-no-preview="true"><a href="#" >No Cover</a></li>
             <li class="dropdown-submenu">
                 <a href="#">Size</a>
-                <ul class="dropdown-menu">
-                    <li data-select-class="cover container-fluid cover_full"><a href="#">Full Screen</a></li>
-                    <li data-select-class="cover container-fluid cover_narrow"><a href="#">Mid screen</a></li>
-                    <li data-select-class="cover container cover_narrow"><a href="#">Narrow</a></li>
+                <ul class="dropdown-menu" role="menu">
+                    <li data-select-class="cover container-fluid cover_full"><a role="menuitem" href="#">Full Screen</a></li>
+                    <li data-select-class="cover container-fluid cover_narrow"><a role="menuitem" href="#">Mid screen</a></li>
+                    <li data-select-class="cover container cover_narrow"><a role="menuitem" href="#">Narrow</a></li>
                 </ul>
             </li>
             <li class="dropdown-submenu">
                 <a href="#">Filter Intensity</a>
-                <ul class="dropdown-menu">
-                    <li data-filter_value="0.0"><a href="#">None</a></li>
-                    <li data-filter_value="0.2"><a href="#">Low</a></li>
-                    <li data-filter_value="0.4"><a href="#">Medium</a></li>
-                    <li data-filter_value="0.6"><a href="#">High</a></li>
+                <ul class="dropdown-menu" role="menu">
+                    <li data-filter_value="0.0"><a role="menuitem" href="#">None</a></li>
+                    <li data-filter_value="0.2"><a role="menuitem" href="#">Low</a></li>
+                    <li data-filter_value="0.4"><a role="menuitem" href="#">Medium</a></li>
+                    <li data-filter_value="0.6"><a role="menuitem" href="#">High</a></li>
                 </ul>
             </li>
             <li class="dropdown-submenu">
                 <a href="#">Filter Color</a>
-                <ul class="dropdown-menu">
-                    <li data-filter_color="oe_black"><a href="#">Black</a></li>
-                    <li data-filter_color="oe_none"><a href="#">White</a></li>
-                    <li data-filter_color="oe_blue"><a href="#">Blue</a></li>
-                    <li data-filter_color="oe_yellow"><a href="#">Yellow</a></li>
-                    <li data-filter_color="oe_red"><a href="#">Red</a></li>
-                    <li data-filter_color="oe_purple"><a href="#">Purple</a></li>
-                    <li data-filter_color="oe_green"><a href="#">Green</a></li>
+                <ul class="dropdown-menu" role="menu">
+                    <li data-filter_color="oe_black"><a role="menuitem" href="#">Black</a></li>
+                    <li data-filter_color="oe_none"><a role="menuitem" href="#">White</a></li>
+                    <li data-filter_color="oe_blue"><a role="menuitem" href="#">Blue</a></li>
+                    <li data-filter_color="oe_yellow"><a role="menuitem" href="#">Yellow</a></li>
+                    <li data-filter_color="oe_red"><a role="menuitem" href="#">Red</a></li>
+                    <li data-filter_color="oe_purple"><a role="menuitem" href="#">Purple</a></li>
+                    <li data-filter_color="oe_green"><a role="menuitem" href="#">Green</a></li>
                 </ul>
             </li>
         </div>
diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml
index 02dfbc27fe2288a332fcf1559301360195161376..8e82e31c20fed040be65cfeee0c0ceed1d57a285 100644
--- a/addons/website_blog/views/website_blog_templates.xml
+++ b/addons/website_blog/views/website_blog_templates.xml
@@ -23,8 +23,8 @@
         <div id="wrap">
             <div class="oe_structure"/>
             <section class="container">
-                <div class="alert alert-warning alert-dismissable mt16" groups="website.group_website_publisher">
-                   <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                <div class="alert alert-warning alert-dismissable mt16" groups="website.group_website_publisher" role="status">
+                   <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                    <p>
                    This page is great to improve your <strong>Search Engine Optimization</strong>;
                    You can review titles, keywords and descriptions of all blogs at once.
@@ -52,11 +52,11 @@
                         <h4>
                             <a t-attf-href="#{blog_url('', ['blog', 'post'], blog=post.blog_id, post=post)}" t-field="post.name"></a>
                             <span t-if="not post.website_published" class="text-warning">
-                                <span class="fa fa-exclamation-triangle ml8" title="Unpublished"/>
+                                <span class="fa fa-exclamation-triangle ml8" title="Unpublished" role="img" aria-label="Unpublished"/>
                             </span>
                         </h4>
                         <div class="text-muted">
-                            <span class="fa fa-calendar mr8"> <span t-field="post.post_date"/></span>
+                            <span class="fa fa-calendar mr8" role="img" aria-label="Post date" title="Post date"> <span t-field="post.post_date"/></span>
                             <span class="fa fa-folder-open"> In
                                 <a class="mr8" t-attf-href="#{blog_url(blog=post.blog_id)}">
                                 <span t-field="post.blog_id"/>
@@ -150,17 +150,17 @@
                                 <t t-if="blog_post.visits &gt; 1">views</t>
                             </span>
                             <span t-if="not blog_post.website_published" class="label label-danger">unpublished</span>
-                            <span class="fa fa-tags"/>
+                            <span class="fa fa-tags" role="img" aria-label="Tags" title="Tags"/>
 
                             <!-- To display tags //no options -->
                             <t t-foreach="blog_post.tag_ids" t-as="one_tag">
                                 <a class="mr8" t-attf-href="#{blog_url(tag=one_tag.id, date_begin=False, date_end=False)}" t-esc="one_tag.name"/>
                             </t>
                             <div class="o_sharing_links">
-                                <a class="fa fa-twitter-square o_twitter"></a>
-                                <a class="fa fa-facebook-square o_facebook"></a>
-                                <a class="fa fa-linkedin-square o_linkedin"></a>
-                                <a class="fa fa-google-plus-square o_google"></a>
+                                <a class="fa fa-twitter-square o_twitter" aria-label="Twitter" title="Twitter"></a>
+                                <a class="fa fa-facebook-square o_facebook" aria-label="Facebook" title="Facebook"></a>
+                                <a class="fa fa-linkedin-square o_linkedin" aria-label="LinkedIn" title="LinkedIn"></a>
+                                <a class="fa fa-google-plus-square o_google" aria-label="Google Plus" title="Google Plus"></a>
                             </div>
                             <hr/>
                         </div>
@@ -234,13 +234,13 @@
                     <h2 t-field="blog_post.subtitle" placeholder="Subtitle"/>
                     <p class="post-meta text-muted text-center" name="blog_post_data"/>
                     <p class="post-meta text-muted text-center" t-if="len(blog_post.tag_ids)">
-                        <span class="fa fa-tags"/>
+                        <span class="fa fa-tags" role="img" aria-label="Tags" title="Tags"/>
                         <t t-foreach="blog_post.tag_ids" t-as="one_tag">
                             <a class="label label-primary mr8" t-attf-href="#{blog_url(tag=one_tag.id)}" t-esc="one_tag.name"/>
                         </t>
                     </p>
                     <div t-if="'cover_full' in blog_post_cover_properties.get('resize_class', '')" id="blog_angle_down">
-                        <strong><a href="#blog_content" class="fa fa-angle-down fa-3x fa-inverse mt4"/></strong>
+                        <strong><a href="#blog_content" class="fa fa-angle-down fa-3x fa-inverse mt4" aria-label="To blog content" title="To blog content"/></strong>
                     </div>
                 </div>
             </t>
@@ -249,10 +249,10 @@
         <div id="blog_content" t-field="blog_post.content" class="blog_content mt32"/>
 
         <div class="o_blog_post_complete o_sharing_links">
-            <a class="fa fa-twitter-square o_twitter_complete" id="o_twitter_complete"></a>
-            <a class="fa fa-facebook-square o_facebook_complete" id="o_facebook_complete"></a>
-            <a class="fa fa-linkedin-square o_linkedin_complete" id="o_linkedin_complete"></a>
-            <a class="fa fa-google-plus-square o_google_complete" id="o_google_complete"></a>
+            <a class="fa fa-twitter-square o_twitter_complete" id="o_twitter_complete" aria-label="Twitter" title="Twitter"></a>
+            <a class="fa fa-facebook-square o_facebook_complete" id="o_facebook_complete" aria-label="Facebook" title="Facebook"></a>
+            <a class="fa fa-linkedin-square o_linkedin_complete" id="o_linkedin_complete" aria-label="LinkedIn" title="LinkedIn"></a>
+            <a class="fa fa-google-plus-square o_google_complete" id="o_google_complete" aria-label="Google Plus" title="Google Plus"></a>
         </div>
         <t t-set='head'>
             <t t-raw='head or ""'/>
@@ -324,7 +324,7 @@
                             "fields": ["name"]
                         }'/>
                     </div>
-                    <p class="mt32">Read Next <span class="fa fa-long-arrow-right"/></p>
+                    <p class="mt32 fa fa-suffix-long-arrow-right">Read Next </p>
                 </div>
             </t>
         </t>
@@ -390,7 +390,7 @@
 <template id="tag_category" name="Tags List">
     <ul class="nav nav-pills ml16">
         <t t-if="tags">
-            <div t-if='not hide_title' class='text-muted mt8'><i class='fa fa-tag'/> <t t-esc='categ_title' /></div>
+            <div t-if='not hide_title' class='text-muted mt8'><i class='fa fa-tag' role="img" aria-label="Tag category" title="Tag category"/> <t t-esc='categ_title' /></div>
             <t t-foreach="tags" t-as="tag">
                 <t t-if="tag.post_ids">
                     <li t-att-class="tag.id in active_tag_ids and 'active' or None">
@@ -439,15 +439,15 @@
         <ul class="nav nav-pills nav-stacked">
             <t t-foreach="nav_list" t-as="year">
                 <li data-toggle="collapse" t-att-data-target="'#' + year" aria-expanded="false" class="blog_post_year_collapse mt8">
-                    <i t-attf-class="fa #{'fa-chevron-down' if not date and year_index == 0 else 'fa-chevron-right'} mr4"/><span t-esc="year"/>
+                    <i t-attf-class="fa #{'fa-chevron-down' if not date and year_index == 0 else 'fa-chevron-right'} mr4" role="img" aria-label="Next year" title="Next year"/><span t-esc="year"/>
                 </li>
                 <ul t-attf-class="blog_post_year collapse nav nav-pills nav-stacked #{not date and year_index == 0 and 'in'}" t-att-id="year" role="menu">
                     <t t-foreach="nav_list[year]" t-as="months">
                         <li t-if="months['date_begin'] == date" class="active">
-                            <a t-ignore="True" t-attf-href="#{blog_url(date_begin=False, date_end=False)}"><t t-esc="months['month']"/><span class="pull-right badge" t-esc="months['post_date_count']"/></a>
+                            <a role="menuitem" t-ignore="True" t-attf-href="#{blog_url(date_begin=False, date_end=False)}"><t t-esc="months['month']"/><span class="pull-right badge" t-esc="months['post_date_count']"/></a>
                         </li>
                         <li t-else="1">
-                            <a t-ignore="True" t-attf-href="#{blog_url(date_begin=months['date_begin'], date_end=months['date_end'])}"><t t-esc="months['month']"/><span class="pull-right badge" t-esc="months['post_date_count']"/></a>
+                            <a role="menuitem" t-ignore="True" t-attf-href="#{blog_url(date_begin=months['date_begin'], date_end=months['date_end'])}"><t t-esc="months['month']"/><span class="pull-right badge" t-esc="months['post_date_count']"/></a>
                         </li>
                     </t>
                 </ul>
@@ -493,13 +493,13 @@
                 Participate on our social stream.
             </p>
             <h2 class="mt4">
-                <a t-att-href="website.social_facebook" t-if="website.social_facebook"><i class="fa fa-facebook-square"/></a>
-                <a t-att-href="website.social_twitter" t-if="website.social_twitter"><i class="fa fa-twitter"/></a>
-                <a t-att-href="website.social_linkedin" t-if="website.social_linkedin"><i class="fa fa-linkedin"/></a>
-                <a t-att-href="website.social_youtube" t-if="website.social_youtube"><i class="fa fa-youtube-play"/></a>
-                <a t-att-href="website.social_googleplus" t-if="website.social_googleplus"><i class="fa fa-google-plus-square"/></a>
-                <a t-att-href="website.social_github" t-if="website.social_github"><i class="fa fa-github"/></a>
-                <a t-att-href="'/blog/%s/feed' % (blog.id)"><i class="fa fa-rss-square"/></a>
+                <a t-att-href="website.social_facebook" t-if="website.social_facebook" aria-label="Facebook" title="Facebook"><i class="fa fa-facebook-square"/></a>
+                <a t-att-href="website.social_twitter" t-if="website.social_twitter" aria-label="Twitter" title="Twitter"><i class="fa fa-twitter"/></a>
+                <a t-att-href="website.social_linkedin" t-if="website.social_linkedin" aria-label="LinkedIn" title="LinkedIn"><i class="fa fa-linkedin"/></a>
+                <a t-att-href="website.social_youtube" t-if="website.social_youtube" aria-label="Youtube" title="Youtube"><i class="fa fa-youtube-play"/></a>
+                <a t-att-href="website.social_googleplus" t-if="website.social_googleplus" aria-label="Google Plus" title="Google Plus"><i class="fa fa-google-plus-square"/></a>
+                <a t-att-href="website.social_github" t-if="website.social_github" aria-label="Github" title="Github"><i class="fa fa-github"/></a>
+                <a t-att-href="'/blog/%s/feed' % (blog.id)" aria-label="RSS" title="RSS"><i class="fa fa-rss-square"/></a>
             </h2>
         </section>
     </xpath>
@@ -552,7 +552,7 @@
 <!-- User Navbar -->
 <template id="content_new_blogpost" inherit_id="website.user_navbar">
     <xpath expr="//div[@id='o_new_content_menu_choices']//ul" position="inside">
-        <li groups="website.group_website_designer"><a href="#" data-action="new_blog_post"><i class="fa fa-rss"/><p>New Blog Post</p></a></li>
+        <li groups="website.group_website_designer"><a href="#" data-action="new_blog_post"><p class="fa fa-rss">New Blog Post</p></a></li>
     </xpath>
 </template>
 
diff --git a/addons/website_blog/views/website_blog_views.xml b/addons/website_blog/views/website_blog_views.xml
index bb0b3833cab1d6cc784ce6b9b7b959c8d2a0e55b..c2f18ddfbe631c0ae3b5712ceee2ca6aa5333719 100644
--- a/addons/website_blog/views/website_blog_views.xml
+++ b/addons/website_blog/views/website_blog_views.xml
@@ -136,10 +136,10 @@
                                         <span t-esc="record.blog_id.value"/>
                                     </strong>
                                     <div class="col-xs-8">
-                                        <i class="fa fa-clock-o"/><span t-esc="record.post_date.value"/>
+                                        <i class="fa fa-clock-o" role="img" aria-label="Post date" title="Post date"/><span t-esc="record.post_date.value"/>
                                     </div>
                                     <div class="col-xs-4 text-right">
-                                        <img t-att-src="kanban_image('res.partner', 'image_small', record.author_id.raw_value)" t-att-title="record.author_id.value" width="24" height="24" class="oe_kanban_avatar"/>
+                                        <img t-att-src="kanban_image('res.partner', 'image_small', record.author_id.raw_value)" t-att-title="record.author_id.value" t-att-alt="record.author_id.value" width="24" height="24" class="oe_kanban_avatar"/>
                                     </div>
                                 </div>
                             </div>
diff --git a/addons/website_crm/views/website_crm_templates.xml b/addons/website_crm/views/website_crm_templates.xml
index 6cafa2e4442a7d9ea54f61f3575ece6510eb6c88..d5fa52268de51bd6971f423f60e875edeffb11ab 100644
--- a/addons/website_crm/views/website_crm_templates.xml
+++ b/addons/website_crm/views/website_crm_templates.xml
@@ -42,7 +42,7 @@
                         </div>
                         <div class="form-group">
                             <div class="col-md-offset-3 col-sm-offset-4 col-sm-8 col-md-7">
-                                <span class="btn btn-primary btn-lg o_website_form_send">Send</span>
+                                <a href="#" role="button" class="btn btn-primary btn-lg o_website_form_send">Send</a>
                                 <span id="o_website_form_result"></span>
                             </div>
                         </div>
@@ -65,7 +65,7 @@
                         <h1>Thanks!</h1>
                         <div class="row">
                             <div class="col-md-8">
-                                <div class="alert alert-success">
+                                <div class="alert alert-success" role="status">
                                     Your message has been sent successfully.
                                     <button type="button" class="close" data-dismiss="alert">&amp;times;</button>
                                 </div>
@@ -75,8 +75,8 @@
                                     If you have an emergency, do not hesitate to contact us by phone:
                                 </p>
                                 <ul class="list-unstyled">
-                                    <li><i class="fa fa-phone"></i> : <span t-field="res_company.phone"/></li>
-                                    <li><i class="fa fa-envelope"></i> : <span t-field="res_company.email"/></li>
+                                    <li><i class="fa fa-phone" role="img" aria-label="Phone" title="Phone"></i> : <span t-field="res_company.phone"/></li>
+                                    <li><i class="fa fa-envelope" role="img" aria-label="Email" title="Email"></i> : <span t-field="res_company.email"/></li>
                                 </ul>
                             </div>
                             <div class="col-md-4">
diff --git a/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml b/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml
index ed4549f73914cc1ef7820b2049c186bb2d504147..e90186a5aa254c3396f3ff4eb4216fb973fba703 100644
--- a/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml
+++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign_templates.xml
@@ -113,20 +113,20 @@
     <xpath expr="//ul[@id='reseller_countries']" position="after">
         <t t-if="google_maps_api_key">
             <!-- modal for large map -->
-            <div class="modal fade partner_map_modal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
+            <div role="dialog" class="modal fade partner_map_modal" tabindex="-1">
               <div class="modal-dialog modal-lg">
                 <div class="modal-content">
-                    <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+                    <header class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
                         <h4 class="modal-title">World Map</h4>
-                    </div>
+                    </header>
                     <iframe t-attf-src="/google_map/?width=898&amp;height=485&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/partners/"
                     style="width:898px; height:485px; border:0; padding:0; margin:0;"></iframe>
                 </div>
               </div>
             </div>
             <!-- modal end -->
-            <h3>World Map<button class="btn btn-link" data-toggle="modal" data-target=".partner_map_modal"><span class="fa fa-external-link" /></button></h3>
+            <h3>World Map<button class="btn btn-link" data-toggle="modal" data-target=".partner_map_modal"><span class="fa fa-external-link" role="img" aria-label="External link" title="External link"/></button></h3>
             <ul class="nav">
                 <iframe t-attf-src="/google_map?width=260&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/partners/"
                     style="width:260px; height:240px; border:0; padding:0; margin:0;" scrolling="no"></iframe>
@@ -263,17 +263,17 @@
         <t t-call="portal.portal_layout">
             <t t-call="portal.portal_searchbar">
                 <t t-set="title">My Opportunities</t>
-                <li class="pull-left"><button t-if="request.env.user.partner_id.grade_id or request.env.user.commercial_partner_id.grade_id" name='new_opp' data-toggle="modal" data-target=".modal_new_opp" class="btn btn-default navbar-btn ml16"><i class="fa fa-plus"/></button></li>
+                <li class="pull-left"><button t-if="request.env.user.partner_id.grade_id or request.env.user.commercial_partner_id.grade_id" name='new_opp' data-toggle="modal" data-target=".modal_new_opp" class="btn btn-default navbar-btn ml16" title="Add an opportunity" aria-label="Add an opportunity"><i class="fa fa-plus"/></button></li>
             </t>
             <div class="modal fade modal_new_opp" role="form" aria-hidden="true">
                 <div class="modal-dialog">
                     <form method="POST" class="modal-content js_website_submit_form new_opp_form">
                         <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
-                        <div class="modal-header">
-                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                        <header class="modal-header">
+                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                             <h4 class="modal-title">New Opportunity</h4>
-                        </div>
-                        <div class="modal-body" id="new-opp-dialog">
+                        </header>
+                        <main class="modal-body" id="new-opp-dialog">
                             <div class="form-group">
                                 <label class="control-label hdd4" for="contact_name">Contact name</label>
                                 <input type='text' name="contact_name" class="form-control contact_name"/>
@@ -286,11 +286,11 @@
                                 <label class="control-label hdd4" for="description">Description</label>
                                 <textarea row="3" name="description" class="form-control description"></textarea>
                             </div>
-                        </div>
-                        <div class="modal-footer">
+                        </main>
+                        <footer class="modal-footer">
                             <button t-attf-class="btn btn-primary new_opp_confirm">Confirm</button> or
                             <button type="button" class="btn btn-link" data-dismiss="modal" style="padding: 0">Cancel</button>
-                        </div>
+                        </footer>
                     </form>
                 </div>
             </div>
@@ -339,7 +339,7 @@
                 <div class="panel-heading">
                     <div class="row">
                         <div class="col-md-12">
-                            <span class="pull-right" title="Rating">
+                            <span class="pull-right" title="Rating" role="img" t-attf-aria-label="Rating: #{lead.priority} on 3">
                                 <t t-foreach="range(1, 4)" t-as="i">
                                     <span t-attf-class="fa fa-lg fa-star#{'' if i &lt;= int(lead.priority) else '-o'}"/>
                                 </t>
@@ -360,13 +360,13 @@
                                     <span t-if="not lead.partner_name" itemprop="name" t-field="lead.contact_name"/>
                                 </div>
                                 <div t-if="lead.phone">
-                                    <span class="fa fa-phone" /> <span itemprop="telephone" t-field="lead.phone" />
+                                    <span class="fa fa-phone" role="img" aria-label="Phone" title="Phone"/> <span itemprop="telephone" t-field="lead.phone" />
                                 </div>
                                 <div t-if="lead.mobile">
-                                    <span class="fa fa-mobile" /> <span itemprop="telephone" t-field="lead.mobile" />
+                                    <span class="fa fa-mobile" role="img" aria-label="Mobile" title="Mobile"/> <span itemprop="telephone" t-field="lead.mobile" />
                                 </div>
                                 <div t-if="lead.email_from">
-                                    <span class="fa fa-envelope"/> <span itemprop="email" t-field="lead.email_from" />
+                                    <span class="fa fa-envelope" role="img" aria-label="Email" title="Email"/> <span itemprop="email" t-field="lead.email_from" />
                                 </div>
                             </address>
                         </div>
@@ -421,18 +421,18 @@
                 </div>
             </div>
             <div>
-                <a class="btn btn-primary btn" data-toggle="modal" data-target=".modal_partner_assign_interested"><i class="fa fa-file-text-o"/> I'm interested</a>
-                <a class="btn btn-primary btn" data-toggle="modal" data-target=".modal_partner_assign_desinterested"><i class="fa fa-fw fa-times"/> I'm not interested</a>
-                <div class="modal fade modal_partner_assign_interested" role="form" aria-hidden="true">
+              <a role="button" class="btn btn-primary btn" data-toggle="modal" data-target=".modal_partner_assign_interested"><span class="fa fa-file-text-o"> I'm interested</span></a>
+                  <a role="button" class="btn btn-primary btn" data-toggle="modal" data-target=".modal_partner_assign_desinterested"><span class="fa fa-fw fa-times"> I'm not interested</span></a>
+                <div role="dialog" class="modal fade modal_partner_assign_interested" aria-hidden="true">
                     <div class="modal-dialog">
                         <form method="POST" class="js_accept_json modal-content js_website_submit_form interested_partner_assign_form">
                             <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
                             <input type="hidden" name="lead_id" class="assign_lead_id" t-att-value="lead.id"/>
-                            <div class="modal-header">
-                                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                            <header class="modal-header">
+                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                                 <h4 class="modal-title">Lead Feedback</h4>
-                            </div>
-                            <div class="modal-body" id="sign-dialog">
+                            </header>
+                            <main class="modal-body" id="sign-dialog">
                                 <div class="form-group">
                                     <label class="control-label" for="comment">What is the next action? When? What is the expected revenue?</label>
                                     <input type="text" name="comment" id="comment" class="form-control comment_interested"/>
@@ -444,24 +444,24 @@
                                 <div>
                                     <span class="text-danger error_partner_assign_interested" style="display:none;">You need to fill up the next action and contact the customer before accepting the lead</span>
                                 </div>
-                            </div>
-                            <div class="modal-footer">
+                            </main>
+                            <footer class="modal-footer">
                                 <button t-attf-class="btn btn-primary interested_partner_assign_confirm">Confirm</button>
                                 <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-                            </div>
+                            </footer>
                         </form>
                     </div>
                 </div>
-                <div class="modal fade modal_partner_assign_desinterested" role="form" aria-hidden="true">
+                <div role="dialog" class="modal fade modal_partner_assign_desinterested" aria-hidden="true">
                     <div class="modal-dialog">
                         <form method="POST" class="js_accept_json modal-content js_website_submit_form desinterested_partner_assign_form">
                             <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
                             <input type="hidden" name="lead_id" class="assign_lead_id" t-att-value="lead.id"/>
-                            <div class="modal-header">
-                                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                            <header class="modal-header">
+                                <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                                 <h4 class="modal-title">Lead Feedback</h4>
-                            </div>
-                            <div class="modal-body" id="sign-dialog">
+                            </header>
+                            <main class="modal-body" id="sign-dialog">
                                 <div class="form-group">
                                     <label class="control-label" for="comment">Why aren't you interested by this lead?</label>
                                     <input type="text" name="comment" id="comment" class="form-control comment_desinterested"/>
@@ -477,11 +477,11 @@
                                 <div>
                                     <span class="text-danger error_partner_assign_desinterested" style="display:none;">You need to fill up the next action and contact the customer before accepting the lead</span>
                                 </div>
-                            </div>
-                            <div class="modal-footer">
+                            </main>
+                            <footer class="modal-footer">
                                 <button t-attf-class="btn btn-primary desinterested_partner_assign_confirm">Confirm</button>
                                 <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-                            </div>
+                            </footer>
                         </form>
                     </div>
                 </div>
@@ -525,9 +525,9 @@
                                 <strong>Expected Closing: <span t-field="opportunity.date_deadline" /></strong>
                         </div>
                         <div class="col-md-4">
-                            <span class="pull-right" title="Rating">
+                            <span class="pull-right" title="Rating" role="img" t-attf-aria-label="Rating: #{opportunity.priority} on 4">
                                 <t t-foreach="range(1, 4)" t-as="i">
-                                    <span t-attf-class="fa fa-lg fa-star#{'' if i &lt;= int(opportunity.priority) else '-o'}"/>
+                                    <span t-attf-class="fa fa-lg fa-star#{'' if i &lt;= int(opportunity.priority) else '-o'}" role="img" t-att-aria-label="'Star %d of 3' % i"/>
                                 </t>
                             </span>
                         </div>
@@ -537,16 +537,16 @@
                     <div class="col-md-6">
                         <div>
                             <button type="button" data-toggle="modal" data-target=".modal_edit_contact" class="btn btn-sm btn-primary" style="margin-bottom: 10px;">Edit Contact</button>
-                            <div class="modal fade modal_edit_contact" role="form" aria-hidden="true">
+                            <div role="dialog" class="modal fade modal_edit_contact" aria-hidden="true">
                                 <div class="modal-dialog">
                                     <form method="POST" class="js_accept_json modal-content js_website_submit_form edit_contact_form">
                                         <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
                                         <input type="hidden" name="opportunity_id" class="opportunity_id" t-att-value="opportunity.id"/>
-                                        <div class="modal-header">
-                                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                                        <header class="modal-header">
+                                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                                             <h4 class="modal-title">Edit Contact</h4>
-                                        </div>
-                                        <div class="modal-body" id="sign-dialog">
+                                        </header>
+                                        <main class="modal-body" id="sign-dialog">
                                             <t t-if="opportunity.partner_name">
                                                 <div class="form-group">
                                                     <label class="control-label" for="partner_name">Customer Name</label>
@@ -608,11 +608,11 @@
                                                     </t>
                                                 </select>
                                             </div>
-                                        </div>
-                                        <div class="modal-footer">
+                                        </main>
+                                        <footer class="modal-footer">
                                             <button t-attf-class="btn btn-primary edit_contact_confirm">Confirm</button>
                                             <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-                                        </div>
+                                        </footer>
                                     </form>
                                 </div>
                             </div>
@@ -625,13 +625,13 @@
                                     <span t-if="not opportunity.partner_name" itemprop="name" t-field="opportunity.contact_name" />
                                 </div>
                                 <div t-if="opportunity.phone">
-                                    <span class="fa fa-phone" /> <span itemprop="telephone" t-field="opportunity.phone" />
+                                    <span class="fa fa-phone" role="img" aria-label="Phone" title="Phone"/> <span itemprop="telephone" t-field="opportunity.phone" />
                                 </div>
                                 <div t-if="opportunity.mobile">
-                                    <span class="fa fa-mobile" /> <span itemprop="mobile" t-field="opportunity.mobile" />
+                                    <span class="fa fa-mobile" role="img" aria-label="Mobile" title="Mobile"/> <span itemprop="mobile" t-field="opportunity.mobile" />
                                 </div>
                                 <div t-if="opportunity.email_from">
-                                    <span class="fa fa-envelope"/> <span itemprop="email" t-field="opportunity.email_from" />
+                                    <span class="fa fa-envelope" role="img" aria-label="Email" title="Email"/> <span itemprop="email" t-field="opportunity.email_from" />
                                 </div>
                             </address>
                         </div>
@@ -652,16 +652,16 @@
                     <div class="col-md-6">
                         <div>
                             <button type="button" data-toggle="modal" data-target=".modal_edit_opp" class="btn btn-sm btn-primary" style="margin-bottom: 10px;">Edit Opportunity</button>
-                            <div class="modal fade modal_edit_opp" role="form" aria-hidden="true">
+                            <div role="dialog" class="modal fade modal_edit_opp" aria-hidden="true">
                                 <div class="modal-dialog">
                                     <form method="POST" class="js_accept_json modal-content js_website_submit_form edit_opp_form">
                                         <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
                                         <input type="hidden" name="opportunity_id" class="opportunity_id" t-att-value="opportunity.id"/>
-                                        <div class="modal-header">
-                                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                                        <header class="modal-header">
+                                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                                             <h4 class="modal-title">Edit Opportunity</h4>
-                                        </div>
-                                        <div class="modal-body" id="sign-dialog">
+                                        </header>
+                                        <main class="modal-body" id="sign-dialog">
                                             <div class="form-group">
                                                 <div class="row">
                                                     <div class="col-sm-6">
@@ -687,16 +687,16 @@
                                                       <label>Priority: </label>
                                                       <div class="input-group">
                                                         <label class="radio-inline">
-                                                          <input type="radio" name="PriorityRadioOptions" value="0" t-att-checked="opportunity.priority not in ['1','2','3']"/><i class="fa fa-star-o"></i>
+                                                          <input type="radio" name="PriorityRadioOptions" value="0" t-att-checked="opportunity.priority not in ['1','2','3']" aria-label="Rating: 0 on 3" title="Rating: 0 on 3"/><i class="fa fa-star-o"></i>
                                                         </label>
                                                         <label class="radio-inline">
-                                                          <input type="radio" name="PriorityRadioOptions" value="1" t-att-checked="opportunity.priority == '1'"/><i class="fa fa-star"></i>
+                                                          <input type="radio" name="PriorityRadioOptions" value="1" t-att-checked="opportunity.priority == '1'" aria-label="Rating: 1 on 3" title="Rating: 1 on 3"/><i class="fa fa-star"></i>
                                                         </label>
                                                         <label class="radio-inline">
-                                                          <input type="radio" name="PriorityRadioOptions" value="2" t-att-checked="opportunity.priority == '2'"/><i class="fa fa-star"></i><i class="fa fa-star"></i>
+                                                          <input type="radio" name="PriorityRadioOptions" value="2" t-att-checked="opportunity.priority == '2'" aria-label="Rating: 2 on 3" title="Rating: 2 on 3"/><i class="fa fa-star"></i><i class="fa fa-star"></i>
                                                         </label>
                                                         <label class="radio-inline">
-                                                          <input type="radio" name="PriorityRadioOptions" value="3" t-att-checked="opportunity.priority == '3'"/><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>
+                                                          <input type="radio" name="PriorityRadioOptions" value="3" t-att-checked="opportunity.priority == '3'" aria-label="Rating: 3 on 3" title="Rating: 3 on 3"/><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i>
                                                         </label>
                                                       </div>
                                                     </div>
@@ -704,7 +704,7 @@
                                                         <label>Deadline: </label>
                                                         <div class='input-group date'>
                                                             <input type="text" name="date_deadline" t-att-value="opportunity.date_deadline" class="form-control date_deadline" data-date-format="YYYY-MM-DD" t-att-name="prefix" placeholder="YYYY-MM-DD" />
-                                                            <span class="input-group-addon"><span class="fa fa-calendar"></span></span>
+                                                            <span class="input-group-addon"><span class="fa fa-calendar" role="img" aria-label="Calendar"></span></span>
                                                         </div>
                                                     </div>
                                                 </div>
@@ -725,14 +725,14 @@
                                                 <label class="control-label" for="activity_date_deadline">Next Activity Date</label>
                                                 <div class='input-group date'>
                                                     <input type="text" name="activity_date_deadline" t-att-value="user_activity.date_deadline" class="form-control activity_date_deadline" data-date-format="YYYY-MM-DD" t-att-name="prefix" placeholder="YYYY-MM-DD" />
-                                                    <span class="input-group-addon"><span class="fa fa-calendar"></span></span>
+                                                    <span class="input-group-addon"><span class="fa fa-calendar" role="img" aria-label="Calendar" title="Calendar"></span></span>
                                                 </div>
                                             </div>
-                                        </div>
-                                        <div class="modal-footer">
+                                        </main>
+                                        <footer class="modal-footer">
                                             <button t-attf-class="btn btn-primary edit_opp_confirm">Confirm</button>
                                             <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-                                        </div>
+                                        </footer>
                                     </form>
                                 </div>
                             </div>
diff --git a/addons/website_customer/views/website_customer_templates.xml b/addons/website_customer/views/website_customer_templates.xml
index 2f2f8463cff40e9cdf373830cd86877541abd17b..d032843671f754ec9d618485bb705c1aace587c5 100644
--- a/addons/website_customer/views/website_customer_templates.xml
+++ b/addons/website_customer/views/website_customer_templates.xml
@@ -65,20 +65,20 @@
     <xpath expr="//div[@id='ref_left_column']" position="inside">
         <t t-if="google_maps_api_key">
             <!-- modal for large map -->
-            <div class="modal fade customer_map_modal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
+            <div role="dialog" class="modal fade customer_map_modal" tabindex="-1">
               <div class="modal-dialog modal-lg">
                 <div class="modal-content">
-                    <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+                    <header class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
                         <h4 class="modal-title">World Map</h4>
-                    </div>
+                    </header>
                     <iframe t-attf-src="/google_map/?width=898&amp;height=485&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/customers/"
                     style="width:898px; height:485px; border:0; padding:0; margin:0;"></iframe>
                 </div>
               </div>
             </div>
             <!-- modal end -->
-            <h3>World Map<button class="btn btn-link" data-toggle="modal" data-target=".customer_map_modal"><span class="fa fa-external-link" /></button></h3>
+            <h3>World Map<button class="btn btn-link" data-toggle="modal" data-target=".customer_map_modal"><span class="fa fa-external-link" role="img" aria-label="External link" title="External link"/></button></h3>
             <ul class="nav">
                 <iframe t-attf-src="/google_map?width=260&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/customers/"
                     style="width:260px; height:240px; border:0; padding:0; margin:0;" scrolling="no"></iframe>
@@ -130,7 +130,7 @@
         <h3 t-if="len(tags)">References by Tag</h3>
         <ul class="nav nav-pills nav-stacked mt16 mb32" t-if="len(tags)">
             <a class="mr8" t-attf-href="/customers/#{ current_industry_id and 'industry/%s/' % slug(current_industry) or '' }#{ current_country_id and 'country/%s' % slug(current_country) or '' }">
-                <span class="fa fa-1x fa-tags"/> All </a>
+                <span class="fa fa-1x fa-tags"> All </span></a>
             <t t-foreach="tags" t-as="o_tag">
                 <a t-attf-class="label label-#{o_tag.classname}" t-esc="o_tag.name" t-att-style="tag and tag.id==o_tag.id and 'text-decoration: underline'"
                     t-attf-href="/customers/#{ current_industry_id and 'industry/%s/' % slug(current_industry) or '' }#{ current_country_id and 'country/%s' % slug(current_country) or '' }?tag_id=#{slug(o_tag)}"/>
diff --git a/addons/website_event/static/src/js/website.tour.event.js b/addons/website_event/static/src/js/website.tour.event.js
index b08af0705e38ed26772f6ba9d911026920e11d6a..b5cd2738a7da2f968b37afe73bab60fd640bf52d 100644
--- a/addons/website_event/static/src/js/website.tour.event.js
+++ b/addons/website_event/static/src/js/website.tour.event.js
@@ -15,12 +15,12 @@ odoo.define("website_event.tour", function (require) {
         content: _t("Click here to create a new event."),
         position: "bottom",
     }, {
-        trigger: ".modal-dialog #editor_new_event input[type=text]",
+        trigger: '.modal-dialog #editor_new_event input[type=text]',
         content: _t("Create a name for your new event and click <em>\"Continue\"</em>. e.g: Technical Training"),
         position: "right",
     }, {
-        trigger: ".modal-dialog button.btn-primary.btn-continue",
-        extra_trigger: ".modal-dialog #editor_new_event input[type=text][value!=\"\"]",
+        trigger: 'footer.modal-footer button.btn-primary.btn-continue',
+        extra_trigger: '#editor_new_event input[type=text][value!=""]',
         content: _t("Click <em>Continue</em> to create the event."),
         position: "right",
     }, {
diff --git a/addons/website_event/static/src/js/website_event.js b/addons/website_event/static/src/js/website_event.js
index 53a304c707e3ed21a84496a72216997e3bca7968..348d3d0f16eedbfbce9aaf3aab8643093ae311f0 100644
--- a/addons/website_event/static/src/js/website_event.js
+++ b/addons/website_event/static/src/js/website_event.js
@@ -60,7 +60,7 @@ var EventRegistrationForm = Widget.extend({
             return ajax.jsonRpc($form.attr('action'), 'call', post).then(function (modal) {
                 var $modal = $(modal);
                 $modal.modal({backdrop: 'static', keyboard: false});
-                $modal.find('.modal-body > div').removeClass('container'); // retrocompatibility - REMOVE ME in master / saas-19
+                $modal.find('main.modal-body > div').removeClass('container'); // retrocompatibility - REMOVE ME in master / saas-19
                 $modal.insertAfter($form).modal();
                 $modal.on('click', '.js_goto_event', function () {
                     $modal.modal('hide');
diff --git a/addons/website_event/views/event_templates.xml b/addons/website_event/views/event_templates.xml
index 91ebbd69b8c0667079809f873d639c22b14b7783..902fc4107867ae885e45aa0b6b01f8345c4ed7c3 100644
--- a/addons/website_event/views/event_templates.xml
+++ b/addons/website_event/views/event_templates.xml
@@ -59,7 +59,7 @@
                                     </t>
                                 </div>
                                 <div>
-                                    <i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'> </span> <i>to</i> <span itemprop="endDate" t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'> </span>
+                                    <i class="fa fa-clock-o" role="img" aria-label="Start date" title="Start date"></i> <span itemprop="startDate" t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'> </span> <i>to</i> <span itemprop="endDate" t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'> </span>
                                 </div>
                                 <t t-if="not event.is_online">
                                     <div itemprop="location" t-field="event.address_id" t-options='{
@@ -68,7 +68,7 @@
                                         }'/>
                                 </t>
                                 <div class="text-muted" t-if="event.event_type_id">
-                                    <i class="fa fa-tag"></i> <span t-field="event.event_type_id"/>
+                                    <i class="fa fa-tag" role="img" aria-label="Event type" title="Event type"></i> <span t-field="event.event_type_id"/>
                                 </div>
                             </div>
                         </li>
@@ -93,13 +93,13 @@
         <div class="row">
             <div class="col-md-12 mb16">
                 <div class="oe_demo">
-                    <img src="/website_event/static/src/img/openerp_enterprise_of_the_year.png" class="img-rounded"/>
+                    <img src="/website_event/static/src/img/openerp_enterprise_of_the_year.png" class="img-rounded" alt=""/>
                     <div class="text-center"><a href="/event">Photos of Past Events</a></div>
                 </div>
             </div>
             <div class="col-md-12 mb16">
                 <div class="oe_demo">
-                    <img src="/website_event/static/src/img/training.jpg" class="img-rounded"/>
+                    <img src="/website_event/static/src/img/training.jpg" class="img-rounded" alt=""/>
                     <div class="text-center"><a href="/event">Our Trainings</a></div>
                 </div>
             </div>
@@ -130,10 +130,7 @@
             <div class="col-md-12 mb16 mt16 country_events">
                 <div class="country_events_list">
                     <div class="text-muted text-center">
-                        <h1>
-                            <i class="fa fa-flag fa-5x"></i>
-                        </h1>
-                        <h1>Events from Your Country</h1>
+                        <h1 class="fa fa-flag fa-5x">Events from Your Country</h1>
                     </div>
                 </div>
             </div>
@@ -271,7 +268,7 @@
                 <small t-if="event.is_participating" class="label label-info">Participating</small>
             </div>
             <h4 class="text-center text-muted">
-                <i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'/> to
+                <i class="fa fa-clock-o" role="img" aria-label="Start date" title="Start date"></i> <span itemprop="startDate" t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'/> to
                 <span itemprop="endDate" t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'/>
                 <t t-if="event.date_tz">(<span t-field="event.date_tz"/>)</t>
             </h4>
@@ -304,7 +301,7 @@
 <template id="event_description_full">
     <t t-call="website_event.event_details">
         <div class="col-md-8">
-            <div t-if="event.state == 'done' or not registrable" class="alert alert-info">Registration for this event is now closed</div>
+            <div t-if="event.state == 'done' or not registrable" class="alert alert-info" role="status">Registration for this event is now closed</div>
             <t t-if="event.state != 'done' and registrable" t-call="website_event.registration_template"/>
             <div class="clearfix"/>
             <hr/>
@@ -337,7 +334,7 @@
                     <div class="panel-body">
                         <t t-if="event.google_map_img()">
                             <a t-att-href="event.google_map_link()" target="_BLANK">
-                               <img t-att-src="event.google_map_img()" width="100%%"/>
+                               <img t-att-src="event.google_map_img()" width="100%%" alt="Google Maps"/>
                             </a>
                         </t>
                         <t t-else="1">
@@ -356,8 +353,8 @@
                     <h4>When</h4>
                 </div>
                 <div class="panel-body">
-                    <i class="fa fa-clock-o"></i> From <span t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'> </span><br/>
-                    <i class="fa fa-clock-o"></i> To <span t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'> </span>
+                    <span class="fa fa-clock-o"> From</span> <span t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'> </span><br/>
+                        <span class="fa fa-clock-o"> To</span> <span t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'> </span>
                 </div>
             </div>
 
@@ -466,7 +463,7 @@
                 </div>
             </div>
         </form>
-        <div t-if="not buy" class="alert alert-info">
+        <div t-if="not buy" class="alert alert-info" role="status">
             <t t-if="event.state == 'draft'" itemprop="availability" content="http://schema.org/OutOfStock">
                 Event registration not yet started.
             </t>
@@ -475,8 +472,8 @@
             </t>
             <t t-if="uid">
                 <a t-attf-href="/web#id=#{event.id}&amp;view_type=form&amp;model=event.event">
-                    <i class="fa fa-plus-circle"></i>
-                    <em>Configure and Launch Event Registration</em>
+                    <span class="fa fa-plus-circle">
+                        <em>Configure and Launch Event Registration</em></span>
                 </a>
             </t>
         </div>
@@ -525,16 +522,16 @@
 </template>
 
 <template id="registration_attendee_details" name="Registration Attendee Details">
-    <div id="modal_attendees_registration" class="modal fade" tabindex="-1" role="dialog">
+    <div role="dialog" id="modal_attendees_registration" class="modal fade" tabindex="-1">
         <div class="modal-dialog modal-lg">
             <form id="attendee_registration" t-attf-action="/event/#{slug(event)}/registration/confirm" method="post" class="js_website_submit_form">
                 <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
                 <div class="modal-content">
-                    <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
+                    <header class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">x</button>
                         <h4 class="modal-title" id="myModalLabel"><strong>Attendees</strong></h4>
-                    </div>
-                    <div class="modal-body">
+                    </header>
+                    <main class="modal-body">
                         <div class="container">
                             <t t-set="counter_type" t-value="1"/>
                             <t t-set="counter" t-value="0"/>
@@ -563,13 +560,13 @@
                                 <t t-set="counter_type" t-value="counter_type + 1"/>
                             </t>
                         </div>
-                    </div>
-                    <div class="modal-footer">
+                    </main>
+                    <footer class="modal-footer">
                         <div class="pull-left">
                             <button type="submit" class="btn btn-primary">Continue</button>
                             <button type="button" class="btn btn-default js_goto_event" data-dismiss="modal">Cancel Registration</button>
                         </div>
-                    </div>
+                    </footer>
                 </div>
             </form>
         </div>
@@ -586,13 +583,13 @@
                 </div>
                 <div class="col-md-9 mt16">
                     <h4><a t-attf-href="/event/#{slug(event)}"><t t-esc="event.name"/></a></h4>
-                    <i class="fa fa-clock-o"></i> <span itemprop="startDate" t-esc="event.date_begin_located"> </span> <i>to</i> <span itemprop="endDate" t-esc="event.date_end_located"> </span>
+                    <i class="fa fa-clock-o" role="img" aria-label="Start date" title="Start date"></i> <span itemprop="startDate" t-esc="event.date_begin_located"> </span> <i>to</i> <span itemprop="endDate" t-esc="event.date_end_located"> </span>
                     <div id="add_to_calendar" class="mt4">
-                        <a class="btn btn-primary mr8" t-att-href="iCal_url">
-                            <i class="fa fa-fw fa-arrow-right"/>Add to iCal/Outlook
+                        <a role="button" class="btn btn-primary mr8" t-att-href="iCal_url">
+                            <span class="fa fa-fw fa-arrow-right">Add to iCal/Outlook</span>
                         </a>
-                        <a class="btn btn-primary" t-att-href="google_url" target='_blank'>
-                            <i class="fa fa-fw fa-arrow-right"/>Add to Google Calendar
+                        <a role="button" class="btn btn-primary" t-att-href="google_url" target='_blank'>
+                            <span class="fa fa-fw fa-arrow-right">Add to Google Calendar</span>
                         </a>
                     </div>
                     <div itemprop="location" class="mt16 mb8" t-field="event.address_id" t-options='{
@@ -617,9 +614,9 @@
                             <t t-foreach="attendees" t-as="attendee">
                                 <tr>
                                     <td><t t-esc="attendee.id"/></td>
-                                    <td><i class="fa fa-user"></i> <t t-if='attendee.name'><t t-esc="attendee.name"/></t><t t-if='not attendee.name'>N/A</t></td>
-                                    <td><i class="fa fa-envelope"></i> <t t-if='attendee.email'><t t-esc="attendee.email"/></t><t t-if='not attendee.email'>N/A</t></td>
-                                    <td><i class="fa fa-phone"></i> <t t-if='attendee.phone'><t t-esc="attendee.phone"/></t><t t-if='not attendee.phone'>N/A</t></td>
+                                    <td><i class="fa fa-user" role="img" aria-label="Name" title="Name"></i> <t t-if='attendee.name'><t t-esc="attendee.name"/></t><t t-if='not attendee.name'>N/A</t></td>
+                                    <td><i class="fa fa-envelope" role="img" aria-label="Email" title="Email"></i> <t t-if='attendee.email'><t t-esc="attendee.email"/></t><t t-if='not attendee.email'>N/A</t></td>
+                                    <td><i class="fa fa-phone" role="img" aria-label="Phone" title="Phone"></i> <t t-if='attendee.phone'><t t-esc="attendee.phone"/></t><t t-if='not attendee.phone'>N/A</t></td>
                                 </tr>
                             </t>
                         </tbody>
@@ -640,7 +637,7 @@
         <div>
             <div class="oe_snippet_thumbnail">
                 <div style="background: white;box-shadow:none;-webkit-box-shadow:none;" class="oe_snippet_thumbnail_img" >
-                    <i class="fa fa-flag fa-5x text-muted"></i>
+                    <i class="fa fa-flag fa-5x text-muted" title="Local Events" role="img" aria-label="Local Events"></i>
                 </div>
                 <span class="oe_snippet_thumbnail_title">Local Events</span>
             </div>
@@ -648,7 +645,7 @@
                 <div class="country_events_list">
                     <div class="text-muted text-left">
                         <div>
-                            <img class="img-rounded img-responsive" src="/website_event/static/src/img/world_map.jpg"></img>
+                            <img class="img-rounded img-responsive" src="/website_event/static/src/img/world_map.jpg" alt=""></img>
                         </div>
                         <div>Events in visitor's country</div>
                     </div>
@@ -673,22 +670,22 @@
             <div class="country_events_list">
                 <div>
                     <t t-if="country">
-                        <img class="img-rounded img-responsive" t-att-src="website.image_url(country, 'image')"></img>
+                        <img class="img-rounded img-responsive" t-att-src="website.image_url(country, 'image')" alt=""></img>
                         <h4><b>Events: <span t-esc="country.name"></span></b></h4>
                     </t>
                     <t t-if="not country">
-                        <img class="img-rounded img-responsive" src="/website_event/static/src/img/world_map.jpg"></img>
+                        <img class="img-rounded img-responsive" src="/website_event/static/src/img/world_map.jpg" alt=""></img>
                         <h4><b>Upcoming Events</b></h4>
                     </t>
                     <div t-foreach="events[:5]" t-as="event_dict" class="oe_website_overflow_ellipsis mb8">
                         <t t-if="not event_dict['event'].website_published">
-                            <span class="label label-danger"><i class="fa fa-ban"></i></span>
+                            <span class="label label-danger" role="img" aria-label="Attention: not published" title="Not published"><i class="fa fa-ban"></i></span>
                         </t>
                         <t t-if="event_dict['event'].address_id">
-                            <i class="fa fa-map-marker" title="It is a physical event"></i>
+                            <i class="fa fa-map-marker" title="It is a physical event" role="img" aria-label="It is a physical event"></i>
                         </t>
                         <t t-if="not event_dict['event'].address_id">
-                            <i class="fa fa-cloud" title="It is an online event"></i>
+                            <i class="fa fa-cloud" title="It is an online event" role="img" aria-label="It is an online event"></i>
                         </t>
                         <b><span t-esc="event_dict['date']"/>: <span><a t-att-href="event_dict['url']"><t t-esc="event_dict['event'].name"/></a></span></b>
                     </div>
@@ -719,7 +716,7 @@
 <!-- User Navbar -->
 <template id="content_new_event" inherit_id="website.user_navbar">
     <xpath expr="//div[@id='o_new_content_menu_choices']//ul" position="inside">
-        <li groups="event.group_event_manager"><a href="#" data-action="new_event"><i class="fa fa-glass"/><p>New Event</p></a></li>
+        <li groups="event.group_event_manager"><a href="#" data-action="new_event"><p class="fa fa-glass">New Event</p></a></li>
     </xpath>
 </template>
 </odoo>
diff --git a/addons/website_event_questions/views/event_templates.xml b/addons/website_event_questions/views/event_templates.xml
index 67d29fa44acd6a664ef98f95e88411beab7cf12f..c98e5b465b59895cd619c16d0df007d388203dcc 100644
--- a/addons/website_event_questions/views/event_templates.xml
+++ b/addons/website_event_questions/views/event_templates.xml
@@ -30,7 +30,7 @@
         </xpath>
 
         <!-- Generic questions -->
-        <xpath expr="//div[hasclass('modal-body')]/div/t[last()]" position="after">
+        <xpath expr='//div[@role="dialog"]//main/div/t[last()]' position="after">
             <t t-if="event.general_question_ids">
                 <h4 class="page-header mt8"><strong>Questions</strong></h4>
                 <div>
diff --git a/addons/website_event_track/views/event_track_templates.xml b/addons/website_event_track/views/event_track_templates.xml
index dbfceeb8ca67b8a8250158a0765b9e3f4571d0fa..40b693f3ff314f266deb83014b1bfb788a388ed7 100644
--- a/addons/website_event_track/views/event_track_templates.xml
+++ b/addons/website_event_track/views/event_track_templates.xml
@@ -119,7 +119,7 @@
         <div id="left_column">
         </div>
         <div class="col-md-9">
-            <div class="alert alert-warning" t-if="not len(tracks)">
+            <div class="alert alert-warning" t-if="not len(tracks)" role="alert">
                 No tracks found!
             </div>
             <div class="row mb32" t-foreach="tracks" t-as="track">
diff --git a/addons/website_event_track/views/event_track_views.xml b/addons/website_event_track/views/event_track_views.xml
index 00a544c775564c8e5b16161d860b5e148673c205..efdeb374d04ec42ff11929830b928f2ee9d15655 100644
--- a/addons/website_event_track/views/event_track_views.xml
+++ b/addons/website_event_track/views/event_track_views.xml
@@ -18,14 +18,14 @@
                             <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
                                 <div class="o_dropdown_kanban dropdown" groups="base.group_user">
 
-                                    <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                    <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                         <span class="fa fa-ellipsis-v"/>
                                     </a>
-                                    <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                        <li><a t-att-href="record.website_url.value">View Track</a></li>
-                                        <t t-if="widget.editable"><li><a type="edit">Edit Track</a></li></t>
-                                        <t t-if="widget.deletable"><li><a type="delete">Delete</a></li></t>
-                                        <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                    <ul class="dropdown-menu" role="menu">
+                                        <li><a role="menuitem" t-att-href="record.website_url.value">View Track</a></li>
+                                        <t t-if="widget.editable"><li><a role="menuitem" type="edit">Edit Track</a></li></t>
+                                        <t t-if="widget.deletable"><li><a role="menuitem" type="delete">Delete</a></li></t>
+                                        <li role="menuitem" aria-haspopup="true"><ul role="menu" class="oe_kanban_colorpicker" data-field="color"/></li>
                                     </ul>
                                 </div>
                                 <div class="oe_kanban_content">
@@ -44,7 +44,7 @@
                                         <div class="oe_kanban_bottom_right">
                                             <field name="kanban_state" widget="state_selection" groups="base.group_user"/>
                                             <img t-att-src="kanban_image('res.partner', 'image_small', record.partner_id.raw_value)"
-                                                t-att-title="record.partner_id.value" width="24" height="24"
+                                                t-att-title="record.partner_id.value" t-att-alt="record.partner_id.value" width="24" height="24"
                                                 class="oe_kanban_avatar"/>
                                         </div>
                                     </div>
diff --git a/addons/website_form/static/src/xml/website_form.xml b/addons/website_form/static/src/xml/website_form.xml
index 3a1102bb5e1f99eb052a3201846f093d002f4c55..23daf2feb696eba706e7b9ba5ed43e806a941795 100644
--- a/addons/website_form/static/src/xml/website_form.xml
+++ b/addons/website_form/static/src/xml/website_form.xml
@@ -4,21 +4,21 @@
     <!-- Success status -->
     <t t-name="website_form.status_success">
         <span id="o_website_form_result" class="text-success ml8">
-            <i class="fa fa-check mr4"/>The form has been sent successfully.
+            <i class="fa fa-check mr4" role="img" aria-label="Success" title="Success"/>The form has been sent successfully.
         </span>
     </t>
 
     <!-- Missing field status -->
     <t t-name="website_form.status_invalid">
         <span id="o_website_form_result" class="text-danger ml8">
-            <i class="fa fa-close mr4"/>Please fill in the form correctly.
+            <i class="fa fa-close mr4" role="img" aria-label="Error" title="Error"/>Please fill in the form correctly.
         </span>
     </t>
 
     <!-- Error status -->
     <t t-name="website_form.status_error">
         <span id="o_website_form_result" class="text-danger ml8">
-            <i class="fa fa-close mr4"/>An error has occured, the form has not been sent.
+            <i class="fa fa-close mr4" role="img" aria-label="Error" title="Error"/>An error has occured, the form has not been sent.
         </span>
     </t>
 
diff --git a/addons/website_forum/static/src/js/website_tour_forum.js b/addons/website_forum/static/src/js/website_tour_forum.js
index ba1c9906bc4ca3bc29cb04f59f5d90b7584f2e96..c6b39cd543e2a1bd849d481db7c1c303a287a80f 100644
--- a/addons/website_forum/static/src/js/website_tour_forum.js
+++ b/addons/website_forum/static/src/js/website_tour_forum.js
@@ -20,7 +20,7 @@ odoo.define("website_forum.tour_forum", function (require) {
         position: "right",
     }, {
         trigger: "button.btn-primary",
-        extra_trigger: ".modal #editor_new_forum input[type=text]:not(:propValue(\"\"))",
+        extra_trigger: '#editor_new_forum input[type=text]:not(:propValue(""))',
         content: _t("Click <em>Continue</em> to create the forum."),
         position: "right",
     }, {
@@ -51,7 +51,7 @@ odoo.define("website_forum.tour_forum", function (require) {
         content: _t("Click to post your question."),
         position: "bottom",
     }, {
-        trigger: ".modal-header button.close",
+        trigger: "header.modal-header button.close",
         auto: true,
     }, {
         trigger: ".note-editable p",
@@ -64,7 +64,7 @@ odoo.define("website_forum.tour_forum", function (require) {
         content: _t("Click to post your answer."),
         position: "bottom",
     }, {
-        trigger: ".modal-header button.close",
+        trigger: "header.modal-header button.close",
         auto: true,
     }, {
         trigger: "a[data-karma=\"20\"]:first",
diff --git a/addons/website_forum/static/src/xml/website_forum_share_templates.xml b/addons/website_forum/static/src/xml/website_forum_share_templates.xml
index 670e143ced8ef2b98aaf76d9cbada2dc87e4d587..29d88594b4b4f2d91d25dc83d404f2b6c9b2db37 100644
--- a/addons/website_forum/static/src/xml/website_forum_share_templates.xml
+++ b/addons/website_forum/static/src/xml/website_forum_share_templates.xml
@@ -1,26 +1,26 @@
 <templates id="template" xml:space="preserve">
     <t t-name="website.social_modal">
-        <div class="modal fade" id="oe_social_share_modal">
+        <div role="dialog" class="modal fade" id="oe_social_share_modal">
             <div class="modal-dialog modal-content">
-                <div class="modal-header alert alert-info mb0">
+                <header class="modal-header alert alert-info mb0" role="status">
                     <button type="button" class="close" data-dismiss="modal">
-                        <span aria-hidden="true">x</span>
+                        <span role="img" aria-label="Close">x</span>
                     </button>
                     <h4 class="modal-title">Thanks for posting!</h4>
-                </div>
-                <div class="modal-body">
+                </header>
+                <main class="modal-body">
                     <t t-if="target_type == 'question'" t-call="website_forum.social_message_question"/>
                     <t t-if="target_type == 'answer'" t-call="website_forum.social_message_answer"/>
                     <t t-if="target_type == 'default'" t-call="website_forum.social_message_default"/>
                     <div class="share-icons text-center">
                         <t t-foreach="medias" t-as="media">
-                            <a style="cursor: pointer" t-attf-class="fa-stack fa-lg share #{media}">
+                            <a style="cursor: pointer" t-attf-class="fa-stack fa-lg share #{media}" t-attf-aria-label="Share on #{media}" t-attf-title="Share on #{media}">
                                 <span class="fa fa-square fa-stack-2x"></span>
                                 <span t-attf-class="oe_social_#{media} fa fa-#{media} fa-stack-1x fa-inverse"></span>
                             </a>
                         </t>
                     </div>
-                </div>
+                </main>
             </div>
         </div>
     </t>
@@ -40,15 +40,14 @@
     </t>
 
     <t t-name="website.social_alert">
-        <div class="alert alert-info alert-dismissable" role="alert">
+        <div class="alert alert-info alert-dismissable" role="status">
             <button type="button" class="close" data-dismiss="alert">
-                <span aria-hidden="true">&#215;</span>
-                <span class="sr-only">Close</span>
+                <span role="img" aria-label="Close">&#215;</span>
             </button>
             <p>Move this question to the top of the list by sharing it on social networks.</p><br/>
             <div>
                 <t t-foreach="medias" t-as="media">
-                    <a style="cursor: pointer" t-attf-class="fa-stack fa-lg share oe_share_bump #{media}">
+                    <a style="cursor: pointer" t-attf-class="fa-stack fa-lg share oe_share_bump #{media}" t-attf-aria-label="Share on #{media}" t-attf-title="Share on #{media}">
                         <span class="fa fa-square fa-stack-2x"></span>
                         <span t-attf-class="oe_social_#{media} fa fa-#{media} fa-stack-1x fa-inverse"></span>
                     </a>
diff --git a/addons/website_forum/views/ir_qweb.xml b/addons/website_forum/views/ir_qweb.xml
index f823262d91bc8ea04596df9fa2bd4e5f189a6b79..17fd9b795365904ae1e0895b356fbf04e8559bbc 100644
--- a/addons/website_forum/views/ir_qweb.xml
+++ b/addons/website_forum/views/ir_qweb.xml
@@ -14,11 +14,11 @@
                 <div t-if="options.get('badges')" style="display: inline-block">
                     <t t-raw="separator"/>
                     <b>|</b>
-                    <span class="fa fa-circle badge-gold"/>
+                    <span class="fa fa-circle badge-gold" role="img" aria-label="Gold badge" title="Gold badge"/>
                     <t t-esc="object.gold_badge"/>
-                    <span class="fa fa-circle badge-silver"/>
+                    <span class="fa fa-circle badge-silver" role="img" aria-label="Silver badge" title="Silver badge"/>
                     <t t-esc="object.silver_badge"/>
-                    <span class="fa fa-circle badge-bronze"/>
+                    <span class="fa fa-circle badge-bronze" role="img" aria-label="Bronze badge" title="Bronze badge"/>
                     <t t-esc="object.bronze_badge"/>
                 </div>
                 <t t-raw="0"/>
diff --git a/addons/website_forum/views/website_forum.xml b/addons/website_forum/views/website_forum.xml
index 6294cb9b46993f7b1399d31c4eee15b441692bc8..9ed626a1eae7577ee617955b76728153aa0fe32b 100644
--- a/addons/website_forum/views/website_forum.xml
+++ b/addons/website_forum/views/website_forum.xml
@@ -88,11 +88,11 @@
                                 <t t-call="website.website_search_box"/>
                                 <span class="dropdown" groups="base.group_erp_manager">
                                     <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
-                                        <i class="fa fa-cog"/>
+                                        <i class="fa fa-cog" role="img" aria-label="Dropdown menu" title="Dropdown menu"/>
                                     </button>
                                     <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
-                                        <li role="presentation"><a role="menuitem" tabindex="-1" t-attf-href="/forum/#{slug(forum)}/edit_welcome_message?enable_editor=1">Design Welcome Message</a></li>
-                                        <li role="presentation"><a role="menuitem" tabindex="-1" t-attf-href="/web#id=#{forum.id}&amp;view_type=form&amp;model=forum.forum">Forum Settings</a></li>
+                                        <li><a role="menuitem" tabindex="-1" t-attf-href="/forum/#{slug(forum)}/edit_welcome_message?enable_editor=1">Design Welcome Message</a></li>
+                                        <li><a role="menuitem" tabindex="-1" t-attf-href="/web#id=#{forum.id}&amp;view_type=form&amp;model=forum.forum">Forum Settings</a></li>
                                     </ul>
                                 </span>
                             </form>
@@ -105,13 +105,13 @@
         <div id="wrap" class="container">
             <div class="row mb16">
                 <div class="col-sm-9">
-                    <div t-foreach="notifications or []" t-as="notification" class="alert alert-success alert-dismissable">
-                        <button type="button" class="close notification_close" t-att-id="notification.id" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                    <div t-foreach="notifications or []" t-as="notification" class="alert alert-success alert-dismissable" role="status">
+                        <button type="button" class="close notification_close" t-att-id="notification.id" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                         <div t-field="notification.body"/>
                         <a t-attf-href="/forum/#{ slug(forum) }/user/#{ user.id }#badges" class="fa fa-arrow-right">View Your Badges</a>
                     </div>
-                    <div t-if="not validation_email_sent and not is_public_user and user.karma == 0" class="alert alert-danger alert-dismissable">
-                        <button type="button" class="close validation_email_close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                    <div t-if="not validation_email_sent and not is_public_user and user.karma == 0" class="alert alert-danger alert-dismissable" role="alert">
+                        <button type="button" class="close validation_email_close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                         <div>
                             <p>
                                 It appears your email has not been verified.
@@ -119,8 +119,8 @@
                             </p>
                         </div>
                     </div>
-                    <div t-if="validation_email_done" class="alert alert-success alert-dismissable">
-                        <button type="button" class="close validated_email_close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                    <div t-if="validation_email_done" class="alert alert-success alert-dismissable" role="status">
+                        <button type="button" class="close validated_email_close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                         <div>
                             <p>Congratulations! Your email has just been validated. You may now participate to our forums.</p>
                         </div>
@@ -130,7 +130,7 @@
                 <div class="col-sm-3" id="right-column">
                     <div t-if="not header.get('ask_hide')" t-attf-class="btn-group btn-block mb16 #{(user.karma &lt; forum.karma_ask) and not is_public_user and 'karma_required' or ''}" t-attf-data-karma="#{forum.karma_ask}">
                         <t t-set="multi_type" t-value="(forum.allow_link and forum.allow_question) or (forum.allow_link and forum.allow_discussion) or (forum.allow_question and forum.allow_discussion)"/>
-                        <a type="button"  t-attf-class="btn btn-primary btn-lg #{'col-sm-10' if multi_type else 'col-sm-12'}" t-attf-href="/forum/#{slug(forum)}/ask?post_type=#{forum.default_post_type}">
+                        <a role="button" type="button"  t-attf-class="btn btn-primary btn-lg #{'col-sm-10' if multi_type else 'col-sm-12'}" t-attf-href="/forum/#{slug(forum)}/ask?post_type=#{forum.default_post_type}">
                             <t t-if="forum.default_post_type == 'question'">Ask a Question</t>
                             <t t-if="forum.default_post_type == 'link'">Submit a Link</t>
                             <t t-if="forum.default_post_type == 'discussion'">New Discussion</t>
@@ -141,9 +141,9 @@
                                 <span class="sr-only">Select Post</span>
                             </button>
                             <ul class="dropdown-menu" role="menu">
-                                <li t-if="forum.allow_question"><a t-attf-href="/forum/#{slug(forum)}/ask?post_type=question">Ask a Question</a></li>
-                                <li t-if="forum.allow_link"><a t-attf-href="/forum/#{slug(forum)}/ask?post_type=link">Submit a Link</a></li>
-                                <li t-if="forum.allow_discussion"><a t-attf-href="/forum/#{slug(forum)}/ask?post_type=discussion">New Discussion</a></li>
+                                <li t-if="forum.allow_question"><a role="menuitem" t-attf-href="/forum/#{slug(forum)}/ask?post_type=question">Ask a Question</a></li>
+                                <li t-if="forum.allow_link"><a role="menuitem" t-attf-href="/forum/#{slug(forum)}/ask?post_type=link">Submit a Link</a></li>
+                                <li t-if="forum.allow_discussion"><a role="menuitem" t-attf-href="/forum/#{slug(forum)}/ask?post_type=discussion">New Discussion</a></li>
                             </ul>
                         </t>
                     </div>
@@ -238,9 +238,9 @@
             <span t-if="not question.active and question.state=='offensive' and question.closed_reason_id"><b> [<t t-esc="question.closed_reason_id.name[0].upper() + question.closed_reason_id.name[1:]"/>]</b></span>
             <span t-if="question.state == 'close'"><b> [Closed]</b></span>
             <t t-if="question.post_type == 'link'" >
-                <a title="Redirect to external link" t-att-href="question.content_link" class="text-muted"><i class="fa fa-external-link forum_link"/></a>
+                <a title="Redirect to external link" aria-label="External link" t-att-href="question.content_link" class="text-muted"><i class="fa fa-external-link forum_link"/></a>
             </t>
-            <span t-if="question.has_validated_answer" title="Question has accepted answer"><i class="fa fa-check-circle oe_answer_true"/></span>
+            <span t-if="question.has_validated_answer" title="Question has accepted answer" role="img" aria-label="Question has accepted answer"><i class="fa fa-check-circle oe_answer_true"/></span>
         </div>
         <div><t t-raw="post_content"/></div>
         <t t-foreach="question.tag_ids" t-as="question_tag">
@@ -250,9 +250,9 @@
             </a>
         </t>
         <small class="text-muted">
-            <i t-if="question.post_type == 'question'" t-attf-class="fa fa-question-circle" t-att-title="question.post_type.capitalize()" />
-            <i t-if="question.post_type == 'discussion'" t-attf-class="fa fa-comments-o" t-att-title="question.post_type.capitalize()" />
-            <i t-if="question.post_type == 'link'" t-attf-class="fa fa-link" t-att-title="question.post_type.capitalize()" />
+            <i t-if="question.post_type == 'question'" t-attf-class="fa fa-question-circle" role="img" aria-label="Question" t-att-title="question.post_type.capitalize()" />
+            <i t-if="question.post_type == 'discussion'" t-attf-class="fa fa-comments-o" role="img" aria-label="Discussion" t-att-title="question.post_type.capitalize()" />
+            <i t-if="question.post_type == 'link'" t-attf-class="fa fa-link" role="img" aria-label="Link" t-att-title="question.post_type.capitalize()" />
             <span>By </span><span t-field="question.create_uid" t-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}' style="display: inline-block;"/>
             <span> • </span><span t-field="question.write_date" t-options='{"format":"short"}'/>
             <span> • </span><span t-field="question.views" /> <t t-if="question.views&lt;=1">View</t><t t-else="">Views</t>
@@ -389,7 +389,7 @@
                 <div t-if="not forums" class="well">No forum post yet.</div>
                 <div t-foreach="forums" t-as="forum" class="col-sm-3 text-center mb32">
                     <a t-attf-href="/forum/#{ slug(forum) }">
-                        <div class="fa fa-5x fa-comment mb16"/>
+                        <div class="fa fa-5x fa-comment mb16" role="img" aria-label="Forum" title="Forum"/>
                         <div t-field="forum.name"/>
                     </a>
                 </div>
@@ -420,36 +420,36 @@
                   <t t-if="sorting == 'vote_count desc'"> by most voted</t>
                   <b class="caret"/>
               </a>
-              <ul class="dropdown-menu">
-                  <li class="dropdown-header">Filter on</li>
+              <ul class="dropdown-menu" role="menu">
+                  <li role="separator" class="dropdown-header">Filter on</li>
                   <li t-att-class="filters == 'all' and 'active' or None ">
-                      <a t-att-href="url_for('') + '?' + keep_query( 'search', 'sorting', filters='all')">All</a>
+                      <a role="menuitem" t-att-href="url_for('') + '?' + keep_query( 'search', 'sorting', filters='all')">All</a>
                   </li>
                   <li t-att-class="filters == 'unanswered' and 'active' or None ">
-                      <a t-att-href="url_for('') + '?' + keep_query( 'search', 'sorting', filters='unanswered')">Unanswered</a>
+                      <a role="menuitem" t-att-href="url_for('') + '?' + keep_query( 'search', 'sorting', filters='unanswered')">Unanswered</a>
                   </li>
                   <li t-if="uid" t-att-class="filters == 'followed' and 'active' or None ">
-                      <a t-att-href="url_for('') + '?' + keep_query( 'search', 'sorting', filters='followed')">Followed</a>
+                      <a role="menuitem" t-att-href="url_for('') + '?' + keep_query( 'search', 'sorting', filters='followed')">Followed</a>
                   </li>
-                  <li t-if="tag" class="dropdown-header">Tags</li>
+                  <li role="separator" t-if="tag" class="dropdown-header">Tags</li>
                   <li t-if="tag" t-att-class="tag and 'active' or None ">
-                      <a href=""><t t-esc="tag.name"/></a>
+                      <a role="menuitem" href=""><t t-esc="tag.name"/></a>
                   </li>
-                  <li class="dropdown-header">Sort by</li>
+                  <li role="separator" class="dropdown-header">Sort by</li>
                   <li t-att-class="sorting == 'relevancy desc' and 'active' or None ">
-                      <a t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='relevancy desc')">Relevance</a>
+                      <a role="menuitem" t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='relevancy desc')">Relevance</a>
                   </li>
                   <li t-att-class="sorting == 'write_date desc' and 'active' or None ">
-                      <a t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='write_date desc')">Last activity date</a>
+                      <a role="menuitem" t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='write_date desc')">Last activity date</a>
                   </li>
                   <li t-att-class="sorting == 'create_date desc' and 'active' or None ">
-                      <a t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='create_date desc')">Newest</a>
+                      <a role="menuitem" t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='create_date desc')">Newest</a>
                   </li>
                   <li t-att-class="sorting == 'child_count desc' and 'active' or None ">
-                      <a t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='child_count desc')">Most answered</a>
+                      <a role="menuitem" t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='child_count desc')">Most answered</a>
                   </li>
                   <li t-att-class="sorting == 'vote_count desc' and 'active' or None ">
-                      <a t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='vote_count desc')">Most voted</a>
+                      <a role="menuitem" t-att-href="url_for('') + '?' + keep_query( 'search', 'filters', sorting='vote_count desc')">Most voted</a>
                   </li>
               </ul>
             </small>
@@ -680,7 +680,7 @@
                         <t t-if="not offensive">Close post</t>
                     </button>
                     <span class="text-muted">or</span>
-                    <a class="btn btn-link" t-attf-href="/forum/#{ slug(forum) }/question/#{ slug(question) }">back to post</a>
+                    <a role="button" class="btn btn-link" t-attf-href="/forum/#{ slug(forum) }/question/#{ slug(question) }">back to post</a>
                 </div>
             </div>
         </form>
@@ -742,10 +742,12 @@
     <div class="vote text-center">
         <a t-attf-class="vote_up fa fa-caret-up no-decoration #{own_vote == 1 and 'text-success' or ''} #{((own_vote == 1 and not can_downvote) or not can_upvote) and 'karma_required' or ''}"
             t-attf-data-karma="#{own_vote == 1 and karma_down or karma_up}"
+            aria-label="Positive vote" title="Positive vote"
             t-attf-data-href="/forum/#{slug(forum)}/post/#{slug(post)}/upvote"/>
         <div class="vote_count text-muted" t-esc="post.vote_count"/>
         <a t-attf-class="vote_down fa fa-caret-down no-decoration #{own_vote == -1 and 'text-warning' or ''} #{((own_vote == -1 and not can_upvote) or not can_downvote) and 'karma_required' or ''}"
             t-attf-data-karma="#{own_vote == -1 and karma_up or karma_down}"
+            aria-label="Negative vote" title="Negative vote"
             t-attf-data-href="/forum/#{slug(forum)}/post/#{slug(post)}/downvote"/>
         <t t-raw="0"/>
     </div>
@@ -761,12 +763,12 @@
         <meta name="twitter:image" t-attf-content="#{request.httprequest.url_root}forum/user/#{question.create_uid.id}/avatar"/>
     </t>
     <t t-call="website_forum.header">
-        <div class="alert alert-info text-center" role="alert" t-if="forum and question.state == 'pending' and user.karma>=forum.karma_moderate and question.active">
+        <div class="alert alert-info text-center" role="status" t-if="forum and question.state == 'pending' and user.karma>=forum.karma_moderate and question.active">
             <p class='text-muted mb16'>This post is currently awaiting moderation and not yet published... Do you want <i>Accept</i> or <i>Reject</i> this post ?</p>
-            <a t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/validate" type="button" class="btn btn-success">Accept <i class="fa fa-check"/></a>
-            <a t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/refuse" type="button" class="btn btn-danger">Reject <i class="fa fa-times"/></a>
+            <a role="button" t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/validate" type="button" class="btn btn-success"><span class="fa fa-suffix-check">Accept </span></a>
+            <a role="button" t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/refuse" type="button" class="btn btn-danger"><span class="fa fa-suffix-times">Reject </span></a>
         </div>
-        <div class="alert alert-info text-center" role="alert" t-if="question.state == 'pending' and user.karma &lt; forum.karma_moderate">
+        <div class="alert alert-info text-center" role="status" t-if="question.state == 'pending' and user.karma &lt; forum.karma_moderate">
             Waiting for validation
         </div>
         <div t-attf-class="question #{can_bump and 'oe_js_bump' or ''}" t-att-data-type="question.post_type" t-att-data-last-update="question.write_date" t-att-data-id="question.id">
@@ -774,12 +776,12 @@
                 <t t-call="website_forum.vote">
                     <t t-set="post" t-value="question"/>
                     <div class="mt4">
-                        <a t-attf-data-href="/forum/#{slug(question.forum_id)}/question/#{slug(question)}/toggle_favourite"
+                        <a t-attf-data-href="/forum/#{slug(question.forum_id)}/question/#{slug(question)}/toggle_favourite" aria-label="Toggle favorite status" title="Toggle favorite status"
                             t-attf-class="favourite_question no-decoration fa fa-2x fa-star #{question.user_favourite and 'forum_favourite_question' or ''}"/>
                     </div>
                 </t>
             </div>
-            <div t-attf-class="question-block #{not question.active and 'alert alert-danger' or ''}">
+            <div t-attf-class="question-block #{not question.active and 'alert alert-danger' or ''}" role="alert">
                 <h1 class="mt0 mb0">
                     <t t-if="question.post_type == 'link'">
                         <a t-att-href="question.content_link">
@@ -804,9 +806,9 @@
                 </div>
                 <div class="text-muted mb16">
                     <t t-set="type_labels" t-value="dict(question._fields['post_type']._description_selection(question.env))"/>
-                    <i t-if="question.post_type == 'question'" t-attf-class="fa fa-question-circle" t-att-title="type_labels[question.post_type]" />
-                    <i t-if="question.post_type == 'discussion'" t-attf-class="fa fa-comments-o" t-att-title="type_labels[question.post_type]" />
-                    <i t-if="question.post_type == 'link'" t-attf-class="fa fa-link" t-att-title="type_labels[question.post_type]" />
+                    <i t-if="question.post_type == 'question'" t-attf-class="fa fa-question-circle" role="img" aria-label="Question" t-att-title="type_labels[question.post_type]" />
+                    <i t-if="question.post_type == 'discussion'" t-attf-class="fa fa-comments-o" role="img" aria-label="Discussion" t-att-title="type_labels[question.post_type]" />
+                    <i t-if="question.post_type == 'link'" t-attf-class="fa fa-link" role="img" aria-label="Link" t-att-title="type_labels[question.post_type]" />
                     <span>By </span>
                     <a t-att-href="(question.create_uid.id == request.session.uid or question.create_uid.sudo().website_published) and '/forum/%s/user/%s' % (slug(forum), question.create_uid.id) or None"
                         t-field="question.create_uid"
@@ -816,7 +818,7 @@
                     <span> • </span><span t-field="question.views"/> views
                 </div>
 
-                <div class="alert alert-info text-center" t-if="question.state == 'close'">
+                <div class="alert alert-info text-center" t-if="question.state == 'close'" role="status">
                     <p class="mt16">
                         <b>The <i t-field="question.post_type"/> has been closed<t t-if="question.closed_reason_id"> for reason: <i t-esc="question.closed_reason_id.name"/></t></b>
                     </p>
@@ -945,7 +947,7 @@
             <t t-call="website_forum.post_answer"/>
         </div>
         <div t-if="question.post_type == 'question' and question.uid_has_answered" class="mb16">
-            <a class="btn btn-primary" t-attf-href="/forum/#{slug(forum)}/question/#{slug(question)}/edit_answer">Edit Your Previous Answer</a>
+            <a role="button" class="btn btn-primary" t-attf-href="/forum/#{slug(forum)}/question/#{slug(question)}/edit_answer">Edit Your Previous Answer</a>
             <span class="text-muted">(only one answer per question is allowed)</span>
         </div>
     </t>
@@ -960,6 +962,7 @@
                 <div t-if="question.post_type == 'question'" class="mt4">
                     <a t-attf-class="accept_answer fa fa-2x fa-check-circle no-decoration #{answer.is_correct and 'oe_answer_true' or 'oe_answer_false'} #{not answer.can_accept and 'karma_required' or ''}"
                         t-attf-data-karma="#{answer.karma_accept}"
+                        aria-label="Send answer" title="Send answer"
                         t-attf-data-href="/forum/#{slug(question.forum_id)}/post/#{slug(answer)}/toggle_correct"/>
                 </div>
             </t>
@@ -974,7 +977,7 @@
                     <t t-call="website_forum.forum_user_tooltip"/>
                 </div>
                 <a t-att-href="user_profile_url" class="o_forum_user_info">
-                    <img class="pull-left img img-rounded o_forum_avatar" t-attf-src="/forum/user/#{answer.create_uid.id}/avatar"/>
+                    <img class="pull-left img img-rounded o_forum_avatar" t-attf-src="/forum/user/#{answer.create_uid.id}/avatar" alt="Avatar"/>
                 </a>
                 <a t-att-href="user_profile_url"
                     t-field="answer.create_uid"
@@ -1074,7 +1077,7 @@
 <template id="forum_user_tooltip">
     <div class="o_forum_user_bio text-left panel panel-body">
         <a t-att-href="user_profile_url">
-            <img class="pull-left img img-rounded o_forum_avatar_big" t-attf-src="/forum/user/#{answer.create_uid.id}/avatar"/>
+            <img class="pull-left img img-rounded o_forum_avatar_big" t-attf-src="/forum/user/#{answer.create_uid.id}/avatar" alt="Avatar"/>
         </a>
         <div class="o_forum_tooltip_header">
             <h4 class="o_forum_tooltip_heading"><a t-att-href="user_profile_url"
@@ -1098,6 +1101,8 @@
                     <t t-call="website_forum.link_button">
                         <t t-set="url" t-value="'/forum/' + slug(forum) + '/post/' + slug(object) + '/comment/' + slug(message) + '/delete'"/>
                         <t t-set="label"> </t>
+                        <t t-set="aria-label">Delete</t>
+                        <t t-set="title">Delete</t>
                         <t t-set="karma" t-value="user.karma&lt;required_karma and required_karma or 0"/>
                         <t t-set="classes" t-value="'close comment_delete fa-times'"/>
                         <t t-set="form_classes" t-value="'pull-right'"/>
@@ -1147,7 +1152,7 @@
         </p>
         <nav t-if="pager_tag_chars">
             <ul class="pagination mt0 mb0">
-                <li class="disabled"><a><i class="fa fa-filter"></i></a></li>
+                <li class="disabled"><a aria-label="Filter" title="Filter"><i class="fa fa-filter"></i></a></li>
                 <t t-foreach="pager_tag_chars" t-as="tuple_char">
                     <li t-attf-class="#{'active' if active_char_tag == tuple_char[1] else ''}"><a t-attf-href="/forum/#{slug(forum)}/tag/#{quote_plus(tuple_char[1])}"><t t-esc="tuple_char[0]"/></a></li>
                 </t>
@@ -1155,7 +1160,7 @@
         </nav>
         <div class="row">
             <div class="col-sm-3 mt16 o_js_forum_tag_follow" t-foreach="tags" t-as="tag">
-                <span><t t-esc="tag.posts_count"/>&amp;nbsp;&amp;nbsp;<i class='fa fa-times'/>&amp;nbsp;&amp;nbsp;</span>
+                <span><t t-esc="tag.posts_count"/>&amp;nbsp;&amp;nbsp;<i class='fa fa-times' title="Close" role="img" aria-label="Close"/>&amp;nbsp;&amp;nbsp;</span>
                 <a t-attf-href="/forum/#{ slug(forum) }/tag/#{ slug(tag) }/questions?{{ keep_query( filters='tag') }}"
                         t-attf-class="label #{'label-primary' if tag.message_is_follower else 'label-default'}">
                     <span t-field="tag.name"/>
@@ -1189,9 +1194,9 @@
             <tr t-foreach="badges" t-as="badge">
                 <td>
                     <span class="badge pull-left">
-                        <span t-if="badge.level == 'gold'" class="fa fa-circle badge-gold"/>
-                        <span t-if="badge.level == 'silver'" class="fa fa-circle badge-silver"/>
-                        <span t-if="badge.level == 'bronze'" class="fa fa-circle badge-bronze"/>
+                        <span t-if="badge.level == 'gold'" class="fa fa-circle badge-gold" title="Gold badge" role="img" aria-label="Gold badge"/>
+                        <span t-if="badge.level == 'silver'" class="fa fa-circle badge-silver" title="Silver badge" role="img" aria-label="Silver badge"/>
+                        <span t-if="badge.level == 'bronze'" class="fa fa-circle badge-bronze" title="Bronze badge" role="img" aria-label="Bronwe badge"/>
                         <span> </span><span t-field="badge.name"/>
                     </span>
                 </td><td>
@@ -1217,15 +1222,15 @@
                     <t t-if="queue_type == 'offensive'"> Offensive</t>
                     <b class="caret"/>
                 </a>
-                <ul class="dropdown-menu">
+                <ul class="dropdown-menu" role="menu">
                     <li t-att-class="queue_type == 'validation' and 'active' or None ">
-                        <a data-type='validation' t-attf-href="/forum/#{slug(forum)}/validation_queue">Pending</a>
+                        <a role="menuitem" data-type='validation' t-attf-href="/forum/#{slug(forum)}/validation_queue">Pending</a>
                     </li>
                     <li t-att-class="queue_type == 'flagged' and 'active' or None ">
-                        <a data-type='flagged' t-attf-href="/forum/#{slug(forum)}/flagged_queue">Flagged</a>
+                        <a role="menuitem" data-type='flagged' t-attf-href="/forum/#{slug(forum)}/flagged_queue">Flagged</a>
                     </li>
                     <li t-if="uid" t-att-class="queue_type == 'offensive' and 'active' or None ">
-                        <a data-type='offensive' t-attf-href="/forum/#{slug(forum)}/offensive_posts">Offensive</a>
+                        <a role="menuitem" data-type='offensive' t-attf-href="/forum/#{slug(forum)}/offensive_posts">Offensive</a>
                     </li>
                 </ul>
             </span>
@@ -1238,10 +1243,10 @@
         <div t-foreach="posts_ids" t-as="question" class="mb16 row post_to_validate" style="padding-bottom:16px;border-bottom:1px solid #e7e7e7;">
             <div class="col-sm-2 o_js_validation_queue">
                 <div class="panel panel-default text-center" style="background-color:#eee;margin:0;padding:5px 12px 5px 12px;">
-                    <a t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/validate" style="padding-right:8px;"><i class="fa fa-check fa-2x"/></a>
-                    <a t-if="queue_type == 'validation'" t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/refuse"><i class="fa fa-times fa-2x"/></a>
-                    <a t-if="queue_type == 'flagged'" t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/ask_for_mark_as_offensive"><i class="fa fa-times fa-2x"/></a>
-                    <a href="#" t-if="queue_type == 'offensive'" disabled="True"><i class="fa fa-times fa-2x" style="color:rgb(179, 179, 179);"/></a>
+                    <a t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/validate" style="padding-right:8px;" title="Validate" aria-label="Validate"><i class="fa fa-check fa-2x"/></a>
+                    <a t-if="queue_type == 'validation'" t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/refuse" title="Refuse" aria-label="Refuse"><i class="fa fa-times fa-2x"/></a>
+                    <a t-if="queue_type == 'flagged'" t-attf-href="/forum/#{slug(forum)}/post/#{slug(question)}/ask_for_mark_as_offensive" aria-label="Mark as offensive" title="Mark as offensive"><i class="fa fa-times fa-2x"/></a>
+                    <a href="#" t-if="queue_type == 'offensive'" disabled="True" aria-label="Offensive" title="Offensive"><i class="fa fa-times fa-2x" style="color:rgb(179, 179, 179);"/></a>
                 </div>
             </div>
             <div class="col-sm-10">
@@ -1262,7 +1267,7 @@
     <t t-call="website_forum.header">
         <div t-foreach="users" t-as="row_users" class="row mt16">
             <div t-foreach="row_users" t-as="user" class="col-sm-4">
-                <img class="pull-left img img-circle o_forum_avatar" t-attf-src="/forum/user/#{user.id}/avatar"/>
+                <img class="pull-left img img-circle o_forum_avatar" t-attf-src="/forum/user/#{user.id}/avatar" alt="Avatar"/>
                 <div>
                     <a t-attf-href="/forum/#{slug(forum)}/user/#{user.id}" t-field="user.name"/>
                     <t t-if="user.country_id">
@@ -1273,11 +1278,11 @@
                     <div>
                         <b> badges:</b>
                         <span>
-                            <span class="fa fa-circle badge-gold"/>
+                            <span class="fa fa-circle badge-gold" role="img" aria-label="Gold badge" title="Gold badge"/>
                             <span t-esc="user.gold_badge" class="ml4"/>
-                            <span class="fa fa-circle badge-silver ml8" />
+                            <span class="fa fa-circle badge-silver ml8" role="img" aria-label="Silver badge" title="Silver badge"/>
                             <span t-esc="user.silver_badge" class="ml4" />
-                            <span class="fa fa-circle badge-bronze ml8" />
+                            <span class="fa fa-circle badge-bronze ml8" role="img" aria-label="Bronze badge" title="Bronze badge"/>
                             <span t-esc="user.bronze_badge" class="ml4" />
                         </span>
                     </div>
@@ -1313,13 +1318,13 @@
                 <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
                 <input type="file" class="hidden o_forum_file_upload" name="ufile" accept="image/*"/>
                 <div class="col-md-2">
-                    <a href="#" class="o_forum_profile_pic_edit">
+                    <a href="#" class="o_forum_profile_pic_edit" aria-label="Edit">
                         <i class="fa fa-pencil fa-1g pull-left" title="Edit"></i>
                     </a>
-                    <a href="#">
-                        <i class="fa fa-trash-o fa-1g pull-right o_forum_profile_pic_clear" title="Clear"></i>
+                    <a href="#" title="Clear" aria-label="Clear">
+                        <i class="fa fa-trash-o fa-1g pull-right o_forum_profile_pic_clear"></i>
                     </a>
-                    <img class="img img-responsive img-circle o_forum_avatar_img" t-attf-src="/forum/user/#{user.id}/avatar"/>
+                    <img class="img img-responsive img-circle o_forum_avatar_img" t-attf-src="/forum/user/#{user.id}/avatar" alt="Avatar"/>
                 </div>
                 <div class="col-md-10">
                     <input name="user_id" t-att-value="user.id" type="hidden"/>
@@ -1343,7 +1348,7 @@
                         </div>
                     </div>
                     <div class="form-group">
-                        <div t-if="email_required" class="alert alert-danger alert-dismissable oe_forum_email_required">
+                        <div t-if="email_required" class="alert alert-danger alert-dismissable oe_forum_email_required" role="alert">
                             <button type="button" class="close" data-dismiss="alert">x</button>
                             <p>Please enter a valid email address in order to receive notifications from answers or comments.</p>
                         </div>
@@ -1394,7 +1399,7 @@
         </h1>
         <div class="row">
             <div class="col-sm-2">
-                <img class="img img-responsive img-circle" t-attf-src="/forum/user/#{user.id}/avatar"/>
+                <img class="img img-responsive img-circle" t-attf-src="/forum/user/#{user.id}/avatar" alt="Avatar"/>
             </div>
             <div class="col-sm-10">
                 <table class="table table-condensed">
@@ -1405,9 +1410,9 @@
                 </tr><tr>
                     <td>votes</td>
                     <td>
-                        <span class="fa fa-thumbs-up"/>
+                        <span class="fa fa-thumbs-up" role="img" aria-label="Positive votes" title="Positive votes"/>
                         <span t-esc="up_votes"/>
-                        <span class="fa fa-thumbs-down"/>
+                        <span class="fa fa-thumbs-down" role="img" aria-label="Negative votes" title="Negative votes"/>
                         <span t-esc="down_votes"/>
                     </td>
                 </tr>
@@ -1448,59 +1453,59 @@
             </div>
         </div>
 
-        <ul class="nav nav-tabs">
+        <ul class="nav nav-tabs" role="tablist">
             <li class="active">
-                <a href="#questions" data-toggle="tab"><t t-esc="count_questions"/> Questions</a>
+                <a role="tab" aria-controls="questions" href="#questions" data-toggle="tab"><t t-esc="count_questions"/> Questions</a>
             </li>
             <li>
-                <a href="#answers" data-toggle="tab"><t t-esc="count_answers"/> Answers</a>
+                <a role="tab" aria-controls="answers" href="#answers" data-toggle="tab"><t t-esc="count_answers"/> Answers</a>
             </li>
             <li t-if="uid == user.id">
-                <a href="#favourite_question" data-toggle="tab"><t t-esc="len(favourite)"/> Favourite Questions</a>
+                <a role="tab" aria-controls="favourite_question" href="#favourite_question" data-toggle="tab"><t t-esc="len(favourite)"/> Favourite Questions</a>
             </li>
             <li t-if="uid == user.id">
-                <a href="#followed_question" data-toggle="tab"><t t-esc="len(followed)"/> Followed Questions</a>
+                <a role="tab" aria-controls="followed_question" href="#followed_question" data-toggle="tab"><t t-esc="len(followed)"/> Followed Questions</a>
             </li>
             <li t-if="uid == user.id">
-                <a href="#activity" data-toggle="tab">Activity</a>
+                <a role="tab" aria-controls="activity" href="#activity" data-toggle="tab">Activity</a>
             </li>
             <li>
-                <a href="#badges" data-toggle="tab">Badges</a>
+                <a role="tab" aria-controls="badges" href="#badges" data-toggle="tab">Badges</a>
             </li>
             <li t-if="uid == user.id">
-                <a href="#votes" data-toggle="tab">Votes</a>
+                <a role="tab" aria-controls="votes" href="#votes" data-toggle="tab">Votes</a>
             </li>
         </ul>
         <div class="tab-content mt16">
-            <div class="tab-pane active" id="questions">
+            <div role="tabpanel" class="tab-pane active" id="questions">
                 <div class="mb16" t-foreach="questions" t-as="question">
                     <t t-call="website_forum.display_post"/>
                 </div>
-            </div><div class="tab-pane" id="answers">
+            </div><div role="tabpanel" class="tab-pane" id="answers">
                 <div t-foreach="answers" t-as="answer">
                     <t t-call="website_forum.display_post_answer"/>
                 </div>
             </div>
-            <div class="tab-pane" id="karma">
+            <div role="tabpanel" class="tab-pane" id="karma">
                 <h1>Karma</h1>
             </div>
-            <div class="tab-pane" id="badges">
+            <div role="tabpanel" class="tab-pane" id="badges">
                 <t t-call="website_forum.user_badges"/>
             </div>
-            <div class="tab-pane" id="favourite_question" t-if="uid == user.id">
+            <div role="tabpanel" class="tab-pane" id="favourite_question" t-if="uid == user.id">
                 <div t-foreach="favourite" t-as="question">
                     <t t-call="website_forum.display_post"/>
                 </div>
             </div>
-            <div class="tab-pane" id="followed_question" t-if="uid == user.id">
+            <div role="tabpanel" class="tab-pane" id="followed_question" t-if="uid == user.id">
                 <div t-foreach="followed" t-as="question" class="mb16">
                     <t t-call="website_forum.display_post"/>
                 </div>
             </div>
-            <div class="tab-pane" id="votes" t-if="uid == user.id">
+            <div role="tabpanel" class="tab-pane" id="votes" t-if="uid == user.id">
                 <t t-call="website_forum.user_votes"/>
             </div>
-            <div class="tab-pane" id="activity" t-if="uid == user.id">
+            <div role="tabpanel" class="tab-pane" id="activity" t-if="uid == user.id">
                 <ul class="list-unstyled">
                     <li t-foreach="activities" t-as="activity">
                         <span t-field="activity.date" t-options='{"format": "short"}'/>
@@ -1528,9 +1533,9 @@
         <tr t-foreach="user.badge_ids" t-as="badge">
             <td>
                 <span class="badge pull-left">
-                    <span t-if="badge.badge_id.level == 'gold'" class="fa fa-circle badge-gold"/>
-                    <span t-if="badge.badge_id.level == 'silver'" class="fa fa-circle badge-silver"/>
-                    <span t-if="badge.badge_id.level == 'bronze'" class="fa fa-circle badge-bronze"/>
+                    <span t-if="badge.badge_id.level == 'gold'" class="fa fa-circle badge-gold" role="img" aria-label="Gold badge" title="Gold badge"/>
+                    <span t-if="badge.badge_id.level == 'silver'" class="fa fa-circle badge-silver" role="img" aria-label="Silver badge" title="Silver badge"/>
+                    <span t-if="badge.badge_id.level == 'bronze'" class="fa fa-circle badge-bronze" role="img" aria-label="Bronze badge" title="Bronze badge"/>
                     <span t-field="badge.badge_id.name"/>
                 </span>
             </td><td>
@@ -1550,8 +1555,8 @@
 <template id="user_votes">
     <div t-foreach="vote_post" t-as="vote">
         <t t-esc="vote.post_id.create_date"/>
-        <span t-if="vote.vote == '1'" class="fa fa-thumbs-up text-success" style="margin-left:30px"/>
-        <span t-if="vote.vote == '-1'" class="fa fa-thumbs-down text-warning" style="margin-left:30px"/>
+        <span t-if="vote.vote == '1'" class="fa fa-thumbs-up text-success" style="margin-left:30px" role="img" aria-label="Positive vote" title="Positive vote"/>
+        <span t-if="vote.vote == '-1'" class="fa fa-thumbs-down text-warning" style="margin-left:30px" role="img" aria-label="Negative vote" title="Negative vote"/>
         <t t-if="vote.post_id.parent_id">
             <a t-attf-href="/forum/#{ slug(forum) }/question/#{ vote.post_id.parent_id.id }/#answer-#{ vote.post_id.id }" t-esc="vote.post_id.parent_id.name" style="margin-left:10px"/>
         </t>
@@ -1567,7 +1572,7 @@
 <!-- User Navbar -->
 <template id="content_new_forum" inherit_id="website.user_navbar">
     <xpath expr="//div[@id='o_new_content_menu_choices']//ul" position="inside">
-        <li groups="website.group_website_designer"><a href="#" data-action="new_forum"><i class="fa fa-comment"/><p>New Forum</p></a></li>
+        <li groups="website.group_website_designer"><a href="#" data-action="new_forum"><p class="fa fa-comment">New Forum</p></a></li>
     </xpath>
 </template>
 
diff --git a/addons/website_forum_doc/views/doc.xml b/addons/website_forum_doc/views/doc.xml
index 099de859f134c0de8452a2c2026b373a6de45fec..eca1b5811ae30ed414a0ae2b4df7376eb141aff5 100644
--- a/addons/website_forum_doc/views/doc.xml
+++ b/addons/website_forum_doc/views/doc.xml
@@ -37,13 +37,13 @@
                     <t t-name="kanban-box">
                         <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click">
                             <div class="o_dropdown_kanban dropdown" groups="base.group_user">
-                                <a class="dropdown-toggle btn" data-toggle="dropdown" href="#" >
+                                <a role="button" class="dropdown-toggle btn" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
                                     <span class="fa fa-ellipsis-v"/>
                                 </a>
-                                <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
-                                    <li t-if="widget.editable"><a type="edit">Edit Post</a></li>
-                                    <li t-if="widget.deletable"><a type="delete">Delete</a></li>
-                                    <li><ul class="oe_kanban_colorpicker" data-field="color"/></li>
+                                <ul class="dropdown-menu" role="menu">
+                                    <li t-if="widget.editable"><a type="edit" role="menuitem">Edit Post</a></li>
+                                    <li t-if="widget.deletable"><a type="delete" role="menuitem">Delete</a></li>
+                                    <li role="menuitem" aria-haspopup="true"><ul role="menu" class="oe_kanban_colorpicker" data-field="color"/></li>
                                 </ul>
                             </div>
                             <div class="o_kanban_record_top">
@@ -52,7 +52,7 @@
                             <div class="o_kanban_record_bottom">
                                 <div class="oe_kanban_bottom_left"/>
                                 <div class="oe_kanban_bottom_right">
-                                    <img t-att-src="kanban_image('res.users', 'image_small', record.create_uid.raw_value)" t-att-title="record.create_uid.value" width="24" height="24" class="oe_kanban_avatar"/>
+                                    <img t-att-src="kanban_image('res.users', 'image_small', record.create_uid.raw_value)" t-att-title="record.create_uid.value" t-att-alt="record.create_uid.value" width="24" height="24" class="oe_kanban_avatar"/>
                                 </div>
                             </div>
                         </div>
diff --git a/addons/website_forum_doc/views/website_doc.xml b/addons/website_forum_doc/views/website_doc.xml
index 07b2be462a650cd12275587053383b93a92b2893..6c01faf22950682a7abac1626b6c076fc6c69eb3 100644
--- a/addons/website_forum_doc/views/website_doc.xml
+++ b/addons/website_forum_doc/views/website_doc.xml
@@ -163,8 +163,8 @@
                 </li>
             </xpath>
             <xpath expr="//hr" position="before">
-                <div class="alert alert-success alert-dismissable mt16" t-if="question.documentation_toc_id">
-                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                <div class="alert alert-success alert-dismissable mt16" t-if="question.documentation_toc_id" role="status">
+                    <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                     This question has been included in the <a href="/forum/how-to">official documentation</a>.
                 </div>
             </xpath>
@@ -214,7 +214,7 @@
                                 <div class="col-md-offset-3 col-md-8">
                                     <button class="btn btn-primary">Push to documentation</button>
                                     <span class="text-muted">or</span>
-                                    <a class="btn btn-link" t-attf-href="/forum/#{ slug(forum) }/question/#{ slug(post) }">cancel</a>
+                                    <a role="button" class="btn btn-link" t-attf-href="/forum/#{ slug(forum) }/question/#{ slug(post) }">cancel</a>
                                 </div>
                             </div>
                         </form>
diff --git a/addons/website_gengo/static/src/xml/website.gengo.xml b/addons/website_gengo/static/src/xml/website.gengo.xml
index fba29670eec70d3cfdc2e6b1f22e0d49f2e295b3..85cf604dd941ca8180e24fa0bcb987f0ac205372 100644
--- a/addons/website_gengo/static/src/xml/website.gengo.xml
+++ b/addons/website_gengo/static/src/xml/website.gengo.xml
@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
 <templates id="template" xml:space="preserve">
 <t t-name="website.ButtonGengoTranslator">
-    <a class="btn btn-danger gengo_post" data-action="translation_gengo_post" href="#">Auto Translate</a>
-    <a class="btn btn-danger hidden gengo_wait disabled"  href="#"><i class="fa fa-spinner fa-spin"></i> Wait</a>
-    <a class="btn btn-danger hidden gengo_inprogress disabled"  href="#"> <i class="fa fa-clock-o"></i> Translation in Progress</a>
-    <a class="btn btn-link gengo_info" data-action="translation_gengo_info">Count Words</a>
+    <a role="button" class="btn btn-danger gengo_post" data-action="translation_gengo_post" href="#">Auto Translate</a>
+    <a role="button" class="btn btn-danger hidden gengo_wait disabled"  href="#"><span class="fa fa-spinner fa-spin"> Wait</span></a>
+    <a role="button" class="btn btn-danger hidden gengo_inprogress disabled"  href="#"> <span class="fa fa-clock-o"> Translation in Progress</span></a>
+    <a role="button" class="btn btn-link gengo_info" data-action="translation_gengo_info">Count Words</a>
 </t>
 <t t-name="web_editor.TranslatorInfoDialog">
-    <div class="modal fade" tabindex="-1" role="dialog">
+    <div role="dialog" class="modal fade" tabindex="-1">
         <div class="modal-dialog">
             <div class="modal-content">
-                <div class="modal-header">
-                    <button title="Close" type="button" class="close" data-dismiss="modal">×</button>
+                <header class="modal-header">
+                    <button title="Close" aria-label="Close" type="button" class="close" data-dismiss="modal">×</button>
                     <h2 class="modal-title">Translate this page</h2>
-                </div>
-                <div class="modal-body">
+                </header>
+                <main class="modal-body">
                     <section>
                         <p>You are about to enter the translation mode.</p>
                         <p>
@@ -37,8 +37,8 @@
                             master page.
                         </p>
                     </section>
-                </div>
-                <div class="modal-footer">
+                </main>
+                <footer class="modal-footer">
                     <div>
                         <input type="checkbox" name="do_not_show"/>
                         Do not show this dialog later.
@@ -47,21 +47,21 @@
                         <button type="button" data-action="activate" class="btn btn-primary">Ok</button>
                         <button type="button" class="btn btn-default" data-action="discard" data-dismiss="modal">Cancel</button>
                     </div>
-                </div>
+                </footer>
             </div>
         </div>
     </div>
 </t>
 
 <t t-name="website.GengoTranslatorPostDialog">
-    <div class="modal fade" tabindex="-1" role="dialog">
+    <div role="dialog" class="modal fade" tabindex="-1">
         <div class="modal-dialog">
             <div class="modal-content">
-                <div class="modal-header">
-                    <button title="Close" type="button" class="close" data-dismiss="modal">×</button>
+                <header class="modal-header">
+                    <button title="Close" aria-label="Close" type="button" class="close" data-dismiss="modal">×</button>
                     <h2 class="modal-title">Select Gengo Translation Service Level</h2>
-                </div>
-                <div class="modal-body">
+                </header>
+                <main class="modal-body">
                     <section>
                     <select class="form-control" required="required" autofocus="autofocus">
                         <option value="machine">By Machine (Free)</option>
@@ -70,50 +70,50 @@
                         <option value="ultra">Ultra - $ <t t-esc="(widget.new_words * 0.15).toFixed(2)"></t></option>
                     </select>
                     </section>
-                </div>
-                <div class="modal-footer">
+                </main>
+                <footer class="modal-footer">
                     <button type="button" data-action="service_level" class="btn btn-primary">Post</button>
                     <button type="button" class="btn btn-default" data-action="discard" data-dismiss="modal">Cancel</button>
-                </div>
+                </footer>
             </div>
         </div>
     </div>
 </t>
 
 <t t-name="website.GengoTranslatorStatisticDialog">
-    <div class="modal fade" tabindex="-1" role="dialog">
+    <div role="dialog" class="modal fade" tabindex="-1">
         <div class="modal-dialog">
             <div class="modal-content">
-                <div class="modal-header">
-                    <button title="Close" type="button" class="close" data-dismiss="modal">×</button>
+                <header class="modal-header">
+                    <button title="Close" aria-label="Close" type="button" class="close" data-dismiss="modal">×</button>
                     <h2 class="modal-title">Translator statistics for this page</h2>
-                </div>
-                <div class="modal-body">
+                </header>
+                <main class="modal-body">
                     <b>
-                        <div class="text-muted mb16"> <i class="fa fa-search-plus"></i> <t t-esc="widget.new_words"></t> new words found on this page.</div>
-                        <h4><i class="fa fa-tachometer"></i> Gengo Statistics <a href="https://gengo.com/c/dashboard" class="pull-right" target="new">Gengo Dashboard</a></h4>
+                        <div class="text-muted mb16"> <span class="fa fa-search-plus"> <t t-esc="widget.new_words"></t> new words found on this page.</span></div>
+                        <h4><span class="fa fa-tachometer"> Gengo Statistics</span> <a href="https://gengo.com/c/dashboard" class="pull-right" target="new">Gengo Dashboard</a></h4>
                         <hr class="mt8"/>
-                        <div class="text-info mb8"> <i class="fa fa-align-left"></i> Words posted for translate <t t-esc="widget.total"></t></div>
-                        <div class="text-warning mb8"> <i class="fa fa-cogs"></i> Words in progress <t t-esc="widget.inprogess"></t></div>
-                        <div class="text-success mb8"> <i class="fa fa-check"></i> Translated words <t t-esc="widget.done"></t></div>
+                        <div class="text-info mb8"> <span class="fa fa-align-left"> Words posted for translate <t t-esc="widget.total"></t></span></div>
+                        <div class="text-warning mb8"> <span class="fa fa-cogs"> Words in progress <t t-esc="widget.inprogess"></t></span></div>
+                        <div class="text-success mb8"> <span class="fa fa-check"> Translated words <t t-esc="widget.done"></t></span></div>
                     </b>
-                </div>
-                <div class="modal-footer">
+                </main>
+                <footer class="modal-footer">
                     <a data-action="discard" data-dismiss="modal" href="#">Close</a>
-                </div>
+                </footer>
             </div>
         </div>
     </div>
 </t>
 <t t-name="website.GengoApiConfigDialog">
-    <div class="modal fade" tabindex="-1" role="dialog">
+    <div role="dialog" class="modal fade" tabindex="-1">
         <div class="modal-dialog">
             <div class="modal-content">
-                <div class="modal-header">
-                    <button title="Close" type="button" class="close" data-dismiss="modal">×</button>
+                <header class="modal-header">
+                    <button title="Close" aria-label="Close" type="button" class="close" data-dismiss="modal">×</button>
                     <h2 class="modal-title">Gengo API is not configured</h2>
-                </div>
-                <div class="modal-body">
+                </header>
+                <main class="modal-body">
                     <b> <h3>Steps for configure Gengo </h3>
                         <div class="mb16"> 1. Go To your <b><a target="new" href="https://gengo.com/account/api_settings/">Gengo account</a></b> and generate API Keys.</div>
                         <div class="mb16"> 2. Then paste generated keys in given form</div>
@@ -147,11 +147,11 @@
                             </li>
                         </ul>
                     </b>
-                </div>
-                <div class="modal-footer">
+                </main>
+                <footer class="modal-footer">
                     <button type="button" data-action="set_config" class="btn btn-primary">Submit</button>
                     <button type="button" class="btn btn-default" data-action="discard" data-dismiss="modal">Close</button>
-                </div>
+                </footer>
             </div>
         </div>
     </div>
diff --git a/addons/website_hr/views/website_hr_templates.xml b/addons/website_hr/views/website_hr_templates.xml
index 3eb8c9d3444d8265507430b3ab5965cc67009710..03ba213108228b5e3fafce878347a8a949c6560a 100644
--- a/addons/website_hr/views/website_hr_templates.xml
+++ b/addons/website_hr/views/website_hr_templates.xml
@@ -22,7 +22,7 @@
                     <t t-set="publish_edit" t-value="True"/>
                 </t>
                 <div class="clearfix"/>
-                <img t-att-src="website.image_url(employee, 'image_medium')" class="img shadow img-rounded"/>
+                <img t-att-src="website.image_url(employee, 'image_medium')" class="img shadow img-rounded" alt="Employee"/>
                 <div class="mt8">
                     <strong t-field="employee.name"></strong>
                 </div>
diff --git a/addons/website_hr_recruitment/data/hr_job_demo.xml b/addons/website_hr_recruitment/data/hr_job_demo.xml
index 82ff9260da9644639f5690e295944f6db84a3a02..1b5434c6b884948e78d8dd0dce21a34be4b6be04 100644
--- a/addons/website_hr_recruitment/data/hr_job_demo.xml
+++ b/addons/website_hr_recruitment/data/hr_job_demo.xml
@@ -115,16 +115,16 @@
             </div>
             <div class="col-md-12 text-center">
                 <div class="col-md-5 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
                 </div>
             </div>
         </div>
@@ -248,16 +248,16 @@
             </div>
             <div class="col-md-12 text-center">
                 <div class="col-md-5 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
                 </div>
             </div>
         </div>
@@ -382,16 +382,16 @@
             </div>
             <div class="col-md-12 text-center">
                 <div class="col-md-5 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
                 </div>
             </div>
     </div>
@@ -511,16 +511,16 @@
             </div>
             <div class="col-md-12 text-center">
                 <div class="col-md-5 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
                 </div>
             </div>
         </div>
@@ -639,16 +639,16 @@
             </div>
             <div class="col-md-12 text-center">
                 <div class="col-md-5 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
                 </div>
             </div>
         </div>
@@ -767,16 +767,16 @@
             </div>
             <div class="col-md-12 text-center">
                 <div class="col-md-5 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
                 </div>
             </div>
         </div>
@@ -896,16 +896,16 @@
             </div>
             <div class="col-md-12 text-center">
                 <div class="col-md-5 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/882207_10151545507603963_1381082528_o.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
+                    <img alt="" class="img img-responsive" style="height:355px;" src="/website_hr_recruitment/static/src/img/1010054_10151543538268963_186969588_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1017407_10151536656083963_857938319_n.jpg"/>
                 </div>
                 <div class="col-md-3 mt16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/1044326_10151536655788963_587131144_n.jpg"/>
                 </div>
             </div>
         </div>
diff --git a/addons/website_hr_recruitment/views/website_hr_recruitment_templates.xml b/addons/website_hr_recruitment/views/website_hr_recruitment_templates.xml
index 8d7eee806e4ad0d7968dec062e0f733e6b1f8498..a2b3621080b152af7bed9c426b15c6c7d266c780 100644
--- a/addons/website_hr_recruitment/views/website_hr_recruitment_templates.xml
+++ b/addons/website_hr_recruitment/views/website_hr_recruitment_templates.xml
@@ -57,7 +57,7 @@
                                         }'/>
                                     <span t-if="not job.website_published" class="label label-danger">unpublished</span>
                                     <div class="text-muted">
-                                        <i class="fa fa-clock-o"/> <span t-field="job.write_date"/>
+                                        <i class="fa fa-clock-o" title="Publication date" role="img" aria-label="Publication date"/> <span t-field="job.write_date"/>
                                     </div>
                                 </div>
                             </li>
@@ -79,7 +79,7 @@
             <section class="mb16 bg-white">
                 <div class="container">
                     <div class="pull-right">
-                        <a t-attf-href="/jobs/apply/#{job.id}" class="btn btn-primary btn-lg pull-right mt32 mb4">Apply Now!</a>
+                        <a role="button" t-attf-href="/jobs/apply/#{job.id}" class="btn btn-primary btn-lg pull-right mt32 mb4">Apply Now!</a>
                     </div>
                     <label class="mb0 mt16"><a href="/jobs">Jobs</a></label> /
                     <h1 class="mb0 mt0" t-field="job.name"/>
@@ -96,7 +96,7 @@
             <div class="oe_structure">
                 <section class="o_job_bottom_bar mt32 mb32">
                     <div class="text-center">
-                        <a t-attf-href="/jobs/apply/#{job.id}" class="btn btn-primary btn-lg">Apply Now!</a>
+                        <a role="button" t-attf-href="/jobs/apply/#{job.id}" class="btn btn-primary btn-lg">Apply Now!</a>
                     </div>
                 </section>
             </div>
@@ -161,7 +161,7 @@
                         </div>
                         <div class="form-group">
                             <div class="col-md-offset-3 col-sm-offset-4 col-sm-8 col-md-7">
-                                <span class="btn btn-primary btn-lg o_website_form_send">Submit</span>
+                                <a href="#" role="button" class="btn btn-primary btn-lg o_website_form_send">Submit</a>
                                 <span id="o_website_form_result"></span>
                             </div>
                         </div>
@@ -306,44 +306,36 @@
         <div class="container">
             <div class="row">
                 <div class="text-center col-md-3 mt16 mb16">
-                    <span class="fa fa-2x fa-heart"/>
-                    <h4 class="mb0 mt8">Benefits</h4>
+                    <h4 class="mb0 mt8 fa fa-2x fa-heart">Benefits</h4>
                     <p>Healthcare, dental, vision, life insurance, Flexible Spending Account (FSA), Health Savings Account (HSA)</p>
                 </div>
                 <div class="text-center col-md-3 mt16 mb16">
-                    <span class="fa fa-2x fa-sun-o"/>
-                    <h4 class="mt8 mb0">PTOs</h4>
+                    <h4 class="mt8 mb0 fa fa-2x fa-sun-o">PTOs</h4>
                     <p>Vacation, Sick, and paid leaves</p>
                 </div>
                 <div class="text-center col-md-3 mt16 mb16">
-                    <span class="fa fa-2x fa-car"/>
-                    <h4 class="mt8 mb0">Save on commute</h4>
+                    <h4 class="mt8 mb0 fa fa-2x fa-car">Save on commute</h4>
                     <p>Pre-tax commuter benefitsbr <br/>(parking and transit) </p>
                     </div>
                 <div class="text-center col-md-3 mt16 mb16">
-                    <span class="fa fa-2x fa-check-circle"/>
-                    <h4 class="mb0 mt8">Discount Programs</h4>
+                    <h4 class="mb0 mt8 fa fa-2x fa-check-circle">Discount Programs</h4>
                     <p>Brand-name product and services in categories like travel, electronics, health, fitness, cellular, and more</p>
                 </div>
             </div><div class="row">
                 <div class="text-center col-md-3 mt16 mb16">
-                    <span class="fa fa-2x fa-map-marker"/>
-                    <h4 class="mb0 mt8">Prime location</h4>
+                    <h4 class="mb0 mt8 fa fa-2x fa-map-marker">Prime location</h4>
                     <p>Only a couple blocs from BART, Caltrain, Highway 101, carpool pickup, and Bay Bridge.</p>
                 </div>
                 <div class="text-center col-md-3 mt16 mb16">
-                    <span class="fa fa-2x fa-calendar"/>
-                    <h4 class="mt8 mb0">Sponsored Events</h4>
+                    <h4 class="mt8 mb0 fa fa-2x fa-calendar">Sponsored Events</h4>
                     <p>Tuesday Dinners, Monthly Lunch Mixers, Monthly Happy Hour, Annual day event</p>
                 </div>
                 <div class="text-center col-md-3 mt16 mb16">
-                    <span class="fa fa-2x fa-futbol-o"/>
-                    <h4 class="mt8 mb0">Sport Activity</h4>
+                    <h4 class="mt8 mb0 fa fa-2x fa-futbol-o">Sport Activity</h4>
                     <p>Play any sport with colleagues and the bill is covered</p>
                     </div>
                 <div class="text-center col-md-3 mt16 mb16">
-                    <span class="fa fa-2x fa-coffee"/>
-                    <h4 class="mb0 mt8">Eat &amp; Drink</h4>
+                    <h4 class="mb0 mt8 fa fa-2x fa-coffee">Eat &amp; Drink</h4>
                     <p>Peet's and Philz coffee provided all day to order and pantry snacks</p>
                 </div>
             </div>
@@ -355,24 +347,24 @@
         <div class="container">
             <div class="row">
                 <div class="col-sm-12 col-md-6 mt16 mb16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_3.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_3.jpg"/>
                 </div>
                 <div class="col-sm-6 col-md-3 mt16 mb16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_2.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_2.jpg"/>
                 </div>
                 <div class="col-sm-6 col-md-3 mt16 mb16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_4.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_4.jpg"/>
                 </div>
             </div>
             <div class="row">
                 <div class="col-sm-6 col-md-3 mt16 mb16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_6.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_6.jpg"/>
                 </div>
                 <div class="col-sm-6 col-md-3 mt16 mb16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_5.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_5.jpg"/>
                 </div>
                 <div class="col-sm-12 col-md-6 mt16 mb16">
-                    <img class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_1.jpg"/>
+                    <img alt="" class="img img-responsive" src="/website_hr_recruitment/static/src/img/job_image_1.jpg"/>
                 </div>
             </div>
         </div>
@@ -413,10 +405,10 @@
                                         <h4 class="mt0" t-field="responsible.name"/>
                                         <p t-field="responsible.function"/>
                                         <t t-if='responsible.email'>
-                                            <i class="fa fa-envelope"></i> <a t-attf-href="mailto:#{responsible.email}" t-esc="responsible.email"/>
+                                            <i class="fa fa-envelope" role="img" aria-label="Email" title="Email"></i> <a t-attf-href="mailto:#{responsible.email}" t-esc="responsible.email"/>
                                         </t>
                                         <t t-if='responsible.phone'>
-                                            <br/><i class="fa fa-phone"></i> <span t-field="responsible.phone"/>
+                                            <br/><i class="fa fa-phone" role="img" aria-label="Phone" title="Phone"></i> <span t-field="responsible.phone"/>
                                         </t>
                                     </div>
                                     <div class="col-md-12 mt32 text-center">
@@ -431,7 +423,7 @@
                                 <div class="col-md-12 text-center mt32 mb32">
                                     In the meantime,
                                     <h3 class="mt8 mb32">Look around on our website:</h3>
-                                    <a href="/" class="btn btn-primary btn-lg">Continue To Our Website</a>
+                                    <a role="button" href="/" class="btn btn-primary btn-lg">Continue To Our Website</a>
                                 </div>
                             </div>
                         </div>
@@ -506,7 +498,7 @@
 <!-- User Navbar -->
 <template id="content_new_job_offer" inherit_id="website.user_navbar">
     <xpath expr="//div[@id='o_new_content_menu_choices']//ul" position="inside">
-        <li groups="hr_recruitment.group_hr_recruitment_manager"><a href="/jobs/add" class="js_link2post"><i class="fa fa-briefcase"/><p>New Job Offer</p></a></li>
+        <li groups="hr_recruitment.group_hr_recruitment_manager"><a href="/jobs/add" class="js_link2post"><p class="fa fa-briefcase">New Job Offer</p></a></li>
     </xpath>
 </template>
 
diff --git a/addons/website_hr_recruitment/views/website_hr_recuitment_snippets.xml b/addons/website_hr_recruitment/views/website_hr_recuitment_snippets.xml
index 27464af659e8ba5d76e310248069203c764e173b..b06518b8f1bfe8f074543ae06ffc9e6da9e670c1 100644
--- a/addons/website_hr_recruitment/views/website_hr_recuitment_snippets.xml
+++ b/addons/website_hr_recruitment/views/website_hr_recuitment_snippets.xml
@@ -34,24 +34,24 @@
     <div data-js='s_hr_rating_option_type' data-selector=".s_hr_rating" data-drop-in="[class^='col-']">
         <li class="dropdown-submenu">
             <a tabindex="-1" href="#">Rating type</a>
-            <ul class="dropdown-menu">
-                <li data-select_class="s_hr_rating_stars"><a href="#"><i class="fa fa-star"/> Stars</a></li>
-                <li data-select_class="s_hr_rating_bolts"><a href="#"><i class="fa fa-bolt"/> Bolts</a></li>
-                <li data-select_class="s_hr_rating_hearts"><a href="#"><i class="fa fa-heart"/> Hearts</a></li>
-                <li data-select_class="s_hr_rating_bar"><a href="#"><i class="fa fa-tasks"/> Bar</a></li>
+            <ul class="dropdown-menu" role="menu">
+                <li data-select_class="s_hr_rating_stars"><a role="menuitem" href="#" class="fa fa-star"> Stars</a></li>
+                <li data-select_class="s_hr_rating_bolts"><a role="menuitem" href="#" class="fa fa-bolt"> Bolts</a></li>
+                <li data-select_class="s_hr_rating_hearts"><a role="menuitem" href="#" class="fa fa-heart"> Hearts</a></li>
+                <li data-select_class="s_hr_rating_bar"><a role="menuitem" href="#" class="fa fa-tasks"> Bar</a></li>
             </ul>
         </li>
     </div>
     <div data-js='s_hr_rating_option_value' data-selector=".s_hr_rating">
         <li class="dropdown-submenu">
             <a tabindex="-1" href="#">Rating value</a>
-            <ul class="dropdown-menu">
-                <li data-select_class=""><a href="#">0</a></li>
-                <li data-select_class="s_hr_rating_1"><a href="#">1/5</a></li>
-                <li data-select_class="s_hr_rating_2"><a href="#">2/5</a></li>
-                <li data-select_class="s_hr_rating_3"><a href="#">3/5</a></li>
-                <li data-select_class="s_hr_rating_4"><a href="#">4/5</a></li>
-                <li data-select_class="s_hr_rating_5"><a href="#">5/5</a></li>
+            <ul class="dropdown-menu" role="menu">
+                <li data-select_class=""><a role="menuitem" href="#">0</a></li>
+                <li data-select_class="s_hr_rating_1"><a role="menuitem" href="#">1/5</a></li>
+                <li data-select_class="s_hr_rating_2"><a role="menuitem" href="#">2/5</a></li>
+                <li data-select_class="s_hr_rating_3"><a role="menuitem" href="#">3/5</a></li>
+                <li data-select_class="s_hr_rating_4"><a role="menuitem" href="#">4/5</a></li>
+                <li data-select_class="s_hr_rating_5"><a role="menuitem" href="#">5/5</a></li>
             </ul>
         </li>
     </div>
diff --git a/addons/website_links/static/src/xml/recent_link.xml b/addons/website_links/static/src/xml/recent_link.xml
index ca8f2df17e4f980c79d6d276bcba7b89b4a80635..6fd5fffb1dde37b5453c4a151f9796a3128f5ea1 100644
--- a/addons/website_links/static/src/xml/recent_link.xml
+++ b/addons/website_links/static/src/xml/recent_link.xml
@@ -10,7 +10,7 @@
             <div class="col-sm-7 col-xs-7">
                 
                 <h4 class="truncate_text">
-                    <img t-att-src="widget.link_obj.icon_src"/> 
+                    <img t-att-src="widget.link_obj.icon_src" alt="Icon"/> 
                     <a class="no-link-style" t-att-href="widget.link_obj.url"><t t-esc="widget.link_obj.title"/></a>
                 </h4>
                 <p class="text-muted mb0" style="margin-top: -5px;">
@@ -19,11 +19,11 @@
                     </span>
 
                     <span class="o_website_links_edit_tools" style="display:none;">
-                        <a class="o_website_links_ok_edit btn btn-xs btn-primary" href="#">ok</a> or 
+                        <a role="button" class="o_website_links_ok_edit btn btn-xs btn-primary" href="#">ok</a> or 
                         <a class="o_website_links_cancel_edit" href="#">cancel</a>
                     </span>
 
-                    <a class="o_website_links_edit_code"><span class="fa fa-pencil gray"></span></a>
+                    <a class="o_website_links_edit_code" aria-label="Edit code" title="Edit code"><span class="fa fa-pencil gray"></span></a>
                         
                     <br/>
                     <span class="label label-success"><t t-esc="widget.link_obj.campaign_id[1]"/></span> 
@@ -35,8 +35,8 @@
 
             <div class="col-sm-4 col-xs-2">
                 <button class="btn btn-info btn_shorten_url_clipboard mt8" t-att-data-clipboard-text="widget.link_obj.short_url">Copy</button>
-                <a t-attf-href="{{widget.link_obj.short_url}}+" class="btn btn-warning mt8">Stats</a>
+                <a role="button" t-attf-href="{{widget.link_obj.short_url}}+" class="btn btn-warning mt8">Stats</a>
             </div>
         </div>
     </t>
-</templates>
\ No newline at end of file
+</templates>
diff --git a/addons/website_links/views/website_links_graphs.xml b/addons/website_links/views/website_links_graphs.xml
index bb8463020521ed49f45b184b0e358037c1bc1622..f4a892064f3cde24ac9639b0eedb040a2eaab39f 100644
--- a/addons/website_links/views/website_links_graphs.xml
+++ b/addons/website_links/views/website_links_graphs.xml
@@ -48,10 +48,10 @@
                                         <p>
                                             <span class="o_website_links_short_url" id="short_url"><span id="short-url-host"><t t-esc="short_url_host"/></span><span id="o_website_links_code"><t t-esc="code"/></span></span>
                                             <span class="o_website_links_edit_tools" style="display:none;">
-                                                <a class="o_website_links_ok_edit btn btn-xs btn-primary" href="#">ok</a> or 
+                                                <a role="button" class="o_website_links_ok_edit btn btn-xs btn-primary" href="#">ok</a> or 
                                                 <a class="o_website_links_cancel_edit" href="#">cancel</a>
                                             </span>
-                                            <a class="o_website_links_edit_code"><span class="fa fa-pencil gray"></span></a>
+                                            <a class="o_website_links_edit_code" aria-label="Edit code" title="Edit code"><span class="fa fa-pencil gray"></span></a>
                                             <a class="copy-to-clipboard" t-att-data-clipboard-text="short_url">copy</a>
                                             
                                         </p>
@@ -107,9 +107,9 @@
                         <h1 class="page-header">Statistics
                             <small class="pull-right hidden-xs mt16" id="filters">
                                 <ul class="nav nav-tabs nav-tabs-inline graph-tabs" role="tablist">
-                                    <li class="active"><a href="#all_time_charts" role="tab" data-toggle="tab">All Time</a></li>
-                                    <li><a href="#last_month_charts" role="tab" data-toggle="tab">Last Month</a></li>
-                                    <li><a href="#last_week_charts" role="tab" data-toggle="tab">Last Week</a></li>
+                                    <li class="active"><a aria-controls="all_time_charts" href="#all_time_charts" role="tab" data-toggle="tab">All Time</a></li>
+                                    <li><a aria-controls="last_month_charts" href="#last_month_charts" role="tab" data-toggle="tab">Last Month</a></li>
+                                    <li><a aria-controls="last_week_charts" href="#last_week_charts" role="tab" data-toggle="tab">Last Week</a></li>
                                 </ul>
                             </small>
                         </h1>
@@ -119,7 +119,7 @@
                                 <div class="tab-content">
 
                                     <!-- All Time Charts -->
-                                    <div class="tab-pane active" id="all_time_charts">
+                                    <div role="tabpanel" class="tab-pane active" id="all_time_charts">
                                         <div class="row">
                                             <div class="col-sm-7 website_links_click_chart" id="all_time_clicks_chart">
                                                 <h3 class="title"></h3>
@@ -133,7 +133,7 @@
                                     </div>
 
                                     <!-- Last Month Charts -->
-                                    <div class="tab-pane" id="last_month_charts">
+                                    <div role="tabpanel" class="tab-pane" id="last_month_charts">
                                         <div class="row">
                                             <div class="col-sm-7 website_links_click_chart" id="last_month_clicks_chart">
                                                 <h3 class="title"></h3>
@@ -147,7 +147,7 @@
                                     </div>
 
                                     <!-- Last Week Charts -->
-                                    <div class="tab-pane" id="last_week_charts">
+                                    <div role="tabpanel" class="tab-pane" id="last_week_charts">
                                         <div class="row">
                                             <div class="col-sm-7 website_links_click_chart" id="last_week_clicks_chart">
                                                 <h3 class="title"></h3>
diff --git a/addons/website_links/views/website_links_template.xml b/addons/website_links/views/website_links_template.xml
index 7e863ba79d4aeca092856774cfe6d1ba145c5c4c..c8986c12a9ad8fd270f3d578008d50943099f50a 100644
--- a/addons/website_links/views/website_links_template.xml
+++ b/addons/website_links/views/website_links_template.xml
@@ -47,7 +47,7 @@
 
                                 <div class="o_website_links_utm_forms">
                                     <div class="form-group">
-                                        <label class="col-sm-3 control-label">Campaign <i class="fa fa-info-circle" data-toggle="tooltip" data-placement="top" title="Defines the context of your link. It might be an event you want to promote or a special promotion."></i></label>
+                                        <label class="col-sm-3 control-label">Campaign <i class="fa fa-info-circle" data-toggle="tooltip" data-placement="top" role="img" aria-label="Tooltip info" title="Defines the context of your link. It might be an event you want to promote or a special promotion."></i></label>
 
                                         <div class="col-sm-9">
                                             <input type="hidden" class="form-control" id="campaign-select"/>
@@ -55,7 +55,7 @@
                                     </div>
 
                                     <div class="form-group">
-                                        <label class="col-sm-3 control-label">Medium <i class="fa fa-info-circle" data-toggle="tooltip" data-placement="top" title="Defines the medium used to share your link. It might be an email, or a Facebook Ads for instance."></i></label>
+                                        <label class="col-sm-3 control-label">Medium <i class="fa fa-info-circle" data-toggle="tooltip" data-placement="top" role="img" aria-label="Tooltip info" title="Defines the medium used to share your link. It might be an email, or a Facebook Ads for instance."></i></label>
 
                                         <div class="col-sm-9">
                                             <input type="hidden" class="form-control" id="channel-select" />
@@ -63,7 +63,7 @@
                                     </div>
 
                                     <div class="form-group">
-                                        <label class="col-sm-3 control-label">Source <i class="fa fa-info-circle" data-toggle="tooltip" data-placement="top" title="Defines the source from which your traffic will come from, Facebook or Twitter for instance."></i></label>
+                                        <label class="col-sm-3 control-label">Source <i class="fa fa-info-circle" data-toggle="tooltip" data-placement="top" role="img" aria-label="Tooltip info" title="Defines the source from which your traffic will come from, Facebook or Twitter for instance."></i></label>
 
                                         <div class="col-sm-9">
                                             <input type="hidden" class="form-control" id="source-select" />
@@ -90,9 +90,9 @@
                     <h2 class="page-header">Your tracked links 
                         <small class="pull-right hidden-xs mt16" id="filters">
                             <ul class="nav nav-tabs nav-tabs-inline graph-tabs" role="tablist">
-                                <li class="active"><a href="#" id="filter-newest-links" role="tab" data-toggle="tab">Newest</a></li>
-                                <li><a href="#" id="filter-most-clicked-links" role="tab" data-toggle="tab">Most Clicked</a></li>
-                                <li><a href="#" id="filter-recently-used-links" role="tab" data-toggle="tab">Recently Used</a></li>
+                                <li class="active"><a aria-controls="filter-newest-links" href="#" id="filter-newest-links" role="tab" data-toggle="tab">Newest</a></li>
+                                <li><a aria-controls="filter-most-clicked-links" href="#" id="filter-most-clicked-links" role="tab" data-toggle="tab">Most Clicked</a></li>
+                                <li><a aria-controls="filter-recently-used-links" href="#" id="filter-recently-used-links" role="tab" data-toggle="tab">Recently Used</a></li>
                             </ul>
                         </small>
                     </h2>
diff --git a/addons/website_livechat/views/res_config_settings_views.xml b/addons/website_livechat/views/res_config_settings_views.xml
index 1921a8d4d8dea63e0b9cf0a1e430318e85586a42..6608a3f5c2d168a8513d188431ce289359be3374 100644
--- a/addons/website_livechat/views/res_config_settings_views.xml
+++ b/addons/website_livechat/views/res_config_settings_views.xml
@@ -9,7 +9,7 @@
             <div id="languages_setting" position="after">
                 <div class="col-xs-12 col-md-6 o_setting_box" id="live_chat_install_setting">
                     <div class="o_setting_right_pane">
-                        <label string="Live Chat"/>
+                        <span class="o_form_label">Live Chat</span>
                         <div class="text-muted">
                             Live chat channel of your website
                         </div>
diff --git a/addons/website_livechat/views/website_livechat.xml b/addons/website_livechat/views/website_livechat.xml
index 14b077078f5563f5dd80c1dcab629a18873c062c..00633b10f50d378e665728447335cb33f5ef0f4a 100644
--- a/addons/website_livechat/views/website_livechat.xml
+++ b/addons/website_livechat/views/website_livechat.xml
@@ -52,7 +52,7 @@
                                         <div class="col-md-3">
                                             <div class="panel panel-warming">
                                                 <div class="panel-body text-center bg-warning">
-                                                    <img src="/rating/static/src/img/rating_5.png" style="height:50px"/>
+                                                    <img src="/rating/static/src/img/rating_5.png" style="height:50px" alt="Neutral face"/>
                                                 </div>
                                                 <div class="panel-body text-center bg-warning">
                                                     <h2 style="margin: 0">
@@ -67,7 +67,7 @@
                                         <div class="col-md-4">
                                             <div class="panel panel-success">
                                                 <div class="panel-body text-center bg-success">
-                                                    <img src="/rating/static/src/img/rating_10.png" style="height:60px"/>
+                                                    <img src="/rating/static/src/img/rating_10.png" style="height:60px" alt="Happy face"/>
                                                 </div>
                                                 <div class="panel-body text-center bg-success">
                                                     <h2 style="margin: 0">
@@ -82,7 +82,7 @@
                                         <div class="col-md-3">
                                             <div class="panel panel-danger">
                                                 <div class="panel-body text-center bg-danger">
-                                                    <img src="/rating/static/src/img/rating_1.png" style="height:40px"/>
+                                                    <img src="/rating/static/src/img/rating_1.png" style="height:40px" alt="Sad face"/>
                                                 </div>
                                                 <div class="panel-body text-center bg-danger">
                                                     <h2 style="margin: 0">
diff --git a/addons/website_mail/data/mail_channel_data.xml b/addons/website_mail/data/mail_channel_data.xml
index a282b01f6039623447f80751838b7be07ea59b26..f83da7f29de3024d4b6ee8453f65319155fe3ef8 100644
--- a/addons/website_mail/data/mail_channel_data.xml
+++ b/addons/website_mail/data/mail_channel_data.xml
@@ -24,7 +24,7 @@
                 <tbody>
                     <tr>
                         <td style="padding:2px;width:30%;">
-                            <img src="web/static/src/img/logo.png"/>
+                            <img src="web/static/src/img/logo.png" alt="Logo"/>
                         </td>
                         <td style="vertical-align: top; padding: 8px 10px;text-align: left;font-size: 14px;">
                             <a href="web/login" style="float:right ;margin:15px auto;background: #875A7B;border-radius: 5px;color: #ffffff;font-size: 16px;padding: 10px 20px 10px 20px;text-decoration: none;">Auto Login</a>
diff --git a/addons/website_mail_channel/views/snippets.xml b/addons/website_mail_channel/views/snippets.xml
index 30974eb87c5edd1a6751c2490794d469708357e6..770b17b3fac071163d209eb81ed6a2b9208b73af 100644
--- a/addons/website_mail_channel/views/snippets.xml
+++ b/addons/website_mail_channel/views/snippets.xml
@@ -9,7 +9,7 @@
     <xpath expr="//div[@id='snippet_content']//t[@t-snippet][last()]" position="after">
         <div>
             <div class="oe_snippet_thumbnail">
-                <img class="oe_snippet_thumbnail_img" src="/website/static/src/img/blocks/button_channel_subscribe.png"/>
+                <img class="oe_snippet_thumbnail_img" src="/website/static/src/img/blocks/button_channel_subscribe.png" alt="Subscribe"/>
                 <span class="oe_snippet_thumbnail_title">Discussion Group</span>
             </div>
 
@@ -28,9 +28,9 @@
                     </span>
                 </div>
                 <p class="js_mg_details hidden well well-sm">
-                    <span class="js_mg_email hidden"><i class="fa fa-envelope-o"/><a href="#" class="js_mg_email"> send mail</a> - </span>
-                    <i class="fa fa-file-o"/><a href="#" class="js_mg_link"> archives</a> -
-                    <i class="fa fa-times"/><a href="#" class="js_unfollow_btn"> unsubscribe</a>
+                    <span class="js_mg_email hidden"><a href="#" class="js_mg_email fa fa-envelope-o"> send mail</a> - </span>
+                    <a href="#" class="js_mg_link fa fa-file-o"> archives</a> -
+                    <a role="button" href="#" class="js_unfollow_btn fa fa-times"> unsubscribe</a>
                 </p>
                 <p class="js_mg_confirmation hidden well well-sm">
                     a confirmation email has been sent.
diff --git a/addons/website_mail_channel/views/website_mail_channel_templates.xml b/addons/website_mail_channel/views/website_mail_channel_templates.xml
index 4f47793876df80eece771e6ce68431255eb0316e..cbf2536eaf786f7707620f648c56dd95d1ef96bc 100644
--- a/addons/website_mail_channel/views/website_mail_channel_templates.xml
+++ b/addons/website_mail_channel/views/website_mail_channel_templates.xml
@@ -28,15 +28,15 @@
             </section>
         </div>
         <div class="container mt32">
-            <div t-if="'unsubscribe' in request.params" class="col-md-offset-9 col-md-3 alert alert-info">
-               <h3>Need to unsubscribe? It's right here! <span class="fa fa-2x fa-arrow-down pull-right"></span></h3>
+            <div t-if="'unsubscribe' in request.params" class="col-md-offset-9 col-md-3 alert alert-info" role="status">
+               <h3>Need to unsubscribe? It's right here! <span class="fa fa-2x fa-arrow-down pull-right" role="img" aria-label="" title="Read this !"></span></h3>
             </div>
             <div class="row mt8" t-foreach="groups" t-as="group">
                 <div class="col-md-3">
-                    <img t-att-src="website.image_url(group, 'image_small')" class="pull-left"/>
+                    <img t-att-src="website.image_url(group, 'image_small')" class="pull-left" alt="Group"/>
                     <strong><a t-attf-href="/groups/#{ slug(group) }" t-esc="group.name"/></strong><br />
                     <t t-if="group.alias_id and group.alias_id.alias_name and group.alias_id.alias_domain">
-                        <i class='fa fa-envelope-o'/>
+                        <i class='fa fa-envelope-o' role="img" aria-label="Alias" title="Alias"/>
                         <a t-attf-href="mailto:#{group.alias_id.alias_name}@#{group.alias_id.alias_domain}"><span t-field="group.alias_id"/></a>
                     </t>
                 </div>
@@ -44,8 +44,8 @@
                     <div t-esc="group.description" class="text-muted"/>
                 </div>
                 <div class="col-md-2">
-                    <i class='fa fa-fw fa-user'/> <t t-esc="group_data[group.id]['members_count']"/> members<br />
-                    <i class='fa fa-fw fa-envelope-o'/> <t t-raw="group_data[group.id]['monthly_message_nbr']"/> messages / month
+                    <t class='fa fa-fw fa-user' t-esc="group_data[group.id]['members_count']"/> members<br />
+                    <t class='fa fa-fw fa-envelope-o' t-raw="group_data[group.id]['monthly_message_nbr']"/> messages / month
                 </div>
                 <div class="col-md-3">
                     <!--<t t-call="website_mail.follow"><t t-set="object" t-value="group"/></t>-->
@@ -68,9 +68,9 @@
                             </span>
                         </div>
                         <p class="js_mg_details hidden well well-sm">
-                            <span class="js_mg_email hidden"><i class="fa fa-envelope-o"/><a href="#" class="js_mg_email"> send mail</a> - </span>
-                            <i class="fa fa-file-o"/><a href="#" class="js_mg_link"> archives</a> -
-                            <i class="fa fa-times"/><a href="#" class="js_unfollow_btn"> unsubscribe</a>
+                            <span class="js_mg_email hidden"><a href="#" class="js_mg_email fa fa-envelope-o"> send mail</a> - </span>
+                            <a href="#" class="js_mg_link fa fa-file-o"> archives</a> -
+                            <a role="button" href="#" class="js_unfollow_btn fa fa-times"> unsubscribe</a>
                         </p>
                     </div>
 
@@ -97,7 +97,7 @@
                     <h1 class="text-center">
                         <t t-esc="group.name"/> mailing list archives
                     </h1><h4 class="text-center text-muted" t-if="group.alias_id and group.alias_id.alias_name and group.alias_id.alias_domain">
-                        <i class='fa fa-envelope-o'/>
+                        <i class='fa fa-envelope-o' role="img" aria-label="Alias" title="Alias"/>
                         <a t-attf-href="mailto:#{group.alias_id.alias_name}@#{group.alias_id.alias_domain}"><span t-field="group.alias_id"/></a>
                     </h4>
                 </div>
@@ -157,7 +157,7 @@
                 <h1 class="text-center">
                     <t t-esc="group.name"/> mailing list archives
                 </h1><h4 class="text-center text-muted" t-if="group.alias_id and group.alias_id.alias_name and group.alias_id.alias_domain">
-                    <i class='fa fa-envelope-o'/>
+                    <i class='fa fa-envelope-o' role="img" aria-label="Alias" title="Alias"/>
                     <a t-attf-href="mailto:#{group.alias_id.alias_name}@#{group.alias_id.alias_domain}"><span t-field="group.alias_id"/></a>
                 </h4>
             </div>
@@ -187,17 +187,17 @@
                     <div class="row">
                         <h4 class="col-md-6">
                             <t t-if="prev_message"><a t-attf-href='/groups/#{slug(group)}/#{slug(prev_message)}?#{mode and "mode=%s" % mode or ""}'>
-                                <i class="fa fa-arrow-left"/> <t t-esc="prev_message.description"/>
+                                <i class="fa fa-arrow-left" role="img" aria-label="Previous message" title="Previous message"/> <t t-esc="prev_message.description"/>
                             </a></t>
                         </h4>
                         <h4 class="col-md-6">
                             <t t-if="next_message"><a class="pull-right" t-attf-href='/groups/#{slug(group)}/#{slug(next_message)}?#{mode and "mode=%s" % mode or ""}'>
-                                <t t-esc="next_message.description"/> <i class="fa fa-arrow-right"/>
+                                <t t-esc="next_message.description"/> <i class="fa fa-arrow-right" role="img" aria-label="Next message" title="Next message"/>
                             </a></t>
                         </h4>
                     </div>
                     <div class="media">
-                        <img class="img-rounded pull-left mt0 media-object o_mg_avatar"
+                        <img class="img-rounded pull-left mt0 media-object o_mg_avatar" alt="Avatar"
                             t-att-src="website.image_url(message, 'author_avatar')"/>
                         <div class="media-body">
                             <h4 class="media-heading" t-esc="message.description"/>
@@ -210,17 +210,17 @@
                                     }'/>
                                 </t>
                                 <t t-if="not message.author_id"><t t-esc="message.email_from"/></t>
-                                - <i class="fa fa-calendar"/> <span t-field="message.date"/>
+                                - <i class="fa fa-calendar" role="img" aria-label="Date" title="Date"/> <span t-field="message.date"/>
                             </small>
                             <div t-raw="message.body"/>
 
                             <div>
                                 <p t-if="message.attachment_ids" class="mt8">
                                     <a href="#" class="o_mg_link_hide">
-                                        <i class="fa fa-chevron-right"/> <t t-raw="len(message.attachment_ids)"/> attachments
+                                        <i class="fa fa-chevron-right" role="img" aria-label="Hide attachments" title="Hide attachments"/> <t t-raw="len(message.attachment_ids)"/> attachments
                                     </a>
                                     <a href="#" class="o_mg_link_show">
-                                        <i class="fa fa-chevron-down"/> <t t-raw="len(message.attachment_ids)"/> attachments
+                                        <i class="fa fa-chevron-down" role="img" aria-label="Show attachments" title="Show attachments"/> <t t-raw="len(message.attachment_ids)"/> attachments
                                     </a>
                                 </p>
                                 <div class="o_mg_link_content">
@@ -258,7 +258,7 @@
     <div>
         <ul class="media-list">
             <li t-foreach="messages" t-as="thread" class="media">
-                <img class="img-rounded pull-left mt0 media-object o_mg_avatar"
+                <img class="img-rounded pull-left mt0 media-object o_mg_avatar" alt="Avatar"
                     t-att-src="website.image_url(thread, 'author_avatar')"/>
                 <div class="media-body">
                     <h4 class="media-heading">
@@ -273,15 +273,15 @@
                             }'/>
                         </t>
                         <t t-if="not thread.author_id"><t t-esc="thread.email_from"/></t>
-                        - <i class="fa fa-calendar"/> <span t-field="thread.date"/>
-                        - <i class="fa fa-paperclip"/> <t t-esc="len(thread.attachment_ids)"/>
+                        - <i class="fa fa-calendar" role="img" aria-label="Date" title="Date"/> <span t-field="thread.date"/>
+                        - <i class="fa fa-paperclip" role="img" aria-label="Attachments" title="Attachments"/> <t t-esc="len(thread.attachment_ids)"/>
                     </small>
                     <p t-if="thread.child_ids" class="mt8">
                         <a href="#" class="o_mg_link_hide">
-                            <i class="fa fa-chevron-right"/> <t t-raw="len(thread.child_ids)"/> replies
+                            <i class="fa fa-chevron-right" role="img" aria-label="Hide replies" title="Hide replies"/> <t t-raw="len(thread.child_ids)"/> replies
                         </a>
                         <a href="#" class="o_mg_link_show">
-                            <i class="fa fa-chevron-down"/> <t t-raw="len(thread.child_ids)"/> replies
+                            <i class="fa fa-chevron-down" role="img" aria-label="Show replies" title="Show replies"/> <t t-raw="len(thread.child_ids)"/> replies
                         </a>
                     </p>
                     <div class="o_mg_link_content o_mg_replies">
diff --git a/addons/website_mass_mailing/views/snippets_templates.xml b/addons/website_mass_mailing/views/snippets_templates.xml
index 34ec54e4b197383e834c6d7fb9c71420dbda629a..a03b9c2f8f1749d160355a29088b3ef39167a7f7 100644
--- a/addons/website_mass_mailing/views/snippets_templates.xml
+++ b/addons/website_mass_mailing/views/snippets_templates.xml
@@ -20,28 +20,28 @@
     <div class="oe_snippet_body input-group js_subscribe" data-list-id="0">
         <input type="email" name="email" class="js_subscribe_email form-control" placeholder="your email..."/>
         <span class="input-group-btn">
-            <a href="#" class="btn btn-primary js_subscribe_btn">Subscribe</a>
-            <a href="#" class="btn btn-success js_subscribed_btn hidden" disabled="disabled">Thanks</a>
+            <a role="button" href="#" class="btn btn-primary js_subscribe_btn">Subscribe</a>
+            <a role="button" href="#" class="btn btn-success js_subscribed_btn hidden" disabled="disabled">Thanks</a>
         </span>
-        <div class="alert alert-success hidden">Thanks for your subscription!</div>
+        <div class="alert alert-success hidden" role="status">Thanks for your subscription!</div>
     </div>
 </template>
 
 <template id="s_newsletter_subscribe_popup" name="Newsletter Popup">
     <div class="o_newsletter_popup" data-list-id="0">
-        <div class="alert alert-warning alert-dismissible fade in css_non_editable_mode_hidden o_not_editable" role="alert">
+        <div class="alert alert-warning alert-dismissible fade in css_non_editable_mode_hidden o_not_editable" role="status">
             <strong>Newsletter Popup!</strong> The newsletter popup snippet effect is active on this page. Click <a id="edit_dialog" href="#">Here To Edit Dialog Content</a>
         </div>
-        <div class="modal modal-dialog modal-md fade fade-custom" id="o_newsletter_popup" tabindex="-1" role="dialog">
+        <div role="dialog" class="modal modal-dialog modal-md fade fade-custom" id="o_newsletter_popup" tabindex="-1" aria-hidden="true">
             <div class="modal-content o_popup_modal_content">
-                <a href="#" class="o_popup_btn_close o_not_editable" data-dismiss="modal">&amp;times;</a>
+                <a role="button" href="#" class="o_popup_btn_close o_not_editable" data-dismiss="modal">&amp;times;</a>
 
                 <div class="o_popup_modal_body text-center">
                     <div class="o_popup_content_dev" data-oe-placeholder="Type Here ..."/>
                     <div class="input-group o_not_editable o_popup_animated o_popup_bounce_del500ms o_popup_bounce_small" >
                         <input type="email" name="email" class="popup_subscribe_email form-control" placeholder="your email..." autofocus="autofocus"/>
                         <span class="input-group-btn">
-                            <a href="#" class="btn btn-success popup_subscribe_btn">Subscribe</a>
+                            <a role="button" href="#" class="btn btn-success popup_subscribe_btn">Subscribe</a>
                         </span>
                     </div>
                 </div>
@@ -69,22 +69,22 @@
 <!-- Extend default mass_mailing snippets with website feature -->
 <template id="social_links">
     <t t-if="website.social_facebook">
-        <a t-att-href="website.social_facebook">
+        <a t-att-href="website.social_facebook" aria-label="Facebook" title="Facebook">
           <span class="fa fa-facebook"></span>
         </a>
     </t>
     <t t-if="website.social_googleplus">
-        <a t-att-href="website.social_googleplus" style="margin-left:10px">
+        <a t-att-href="website.social_googleplus" style="margin-left:10px" aria-label="Google Plus" title="Google Plus">
             <span class="fa fa-google-plus"></span>
         </a>
     </t>
     <t t-if="website.social_linkedin">
-        <a t-att-href="website.social_linkedin" style="margin-left:10px">
+        <a t-att-href="website.social_linkedin" style="margin-left:10px" aria-label="LinkedIn" title="LinkedIn">
             <span class="fa fa-linkedin"></span>
         </a>
     </t>
     <t t-if="website.social_twitter">
-        <a t-att-href="website.social_twitter" style="margin-left:10px">
+        <a t-att-href="website.social_twitter" style="margin-left:10px" aria-label="Twitter" title="Twitter">
             <span class="fa fa-twitter"></span>
         </a>
     </t>
@@ -112,7 +112,7 @@
 
 <template id="s_mail_block_footer_social" inherit_id="mass_mailing.s_mail_block_footer_social">
     <xpath expr="//td[hasclass('o_mail_footer_links')]" position="inside">
-        <t> | <a href="/contactus" class="btn btn-link">Contact</a></t>
+        <t> | <a role="button" href="/contactus" class="btn btn-link">Contact</a></t>
     </xpath>
     <xpath expr="//tr" position="before">
         <tr>
@@ -125,7 +125,7 @@
 
 <template id="s_mail_block_footer_social_left" inherit_id="mass_mailing.s_mail_block_footer_social_left">
     <xpath expr="//div[hasclass('o_mail_footer_links')]" position="inside">
-        <t> | <a href="/contactus" class="btn btn-link">Contact</a></t>
+        <t> | <a role="button" href="/contactus" class="btn btn-link">Contact</a></t>
     </xpath>
     <xpath expr="//td" position="after">
         <td class="o_mail_footer_social">
diff --git a/addons/website_mass_mailing/views/unsubscribe_templates.xml b/addons/website_mass_mailing/views/unsubscribe_templates.xml
index ae0a10a9674e34505ee66b0480b7723d91957e3e..f523b5b7ab472e8c7b8bf71656f4d9db69dd0e2b 100644
--- a/addons/website_mass_mailing/views/unsubscribe_templates.xml
+++ b/addons/website_mass_mailing/views/unsubscribe_templates.xml
@@ -13,7 +13,7 @@
                         <h1 class="page-header">Mailing Subscriptions</h1>
 
                         <t t-if="contacts">
-                            <div class="alert alert-info text-center">
+                            <div class="alert alert-info text-center" role="status">
                                 <p>Choose your mailing subscriptions.</p>
                             </div>
 
@@ -35,7 +35,7 @@
                         </t>
 
                         <t t-if="contacts == False">
-                            <div class="alert alert-info text-center">
+                            <div class="alert alert-info text-center" role="status">
                                 <p>You are not subscribed to any of our mailing list.</p>
                             </div>
                         </t>
@@ -51,7 +51,7 @@
                 <div class="col-md-6 col-md-offset-3">
                     <h1 class="page-header">Mailing Subscriptions</h1>
 
-                    <div class="alert alert-success text-center">
+                    <div class="alert alert-success text-center" role="status">
                         <p>You have been successfully <strong>unsubscribed</strong>!</p>
                     </div>
                 </div>
diff --git a/addons/website_membership/views/website_membership_templates.xml b/addons/website_membership/views/website_membership_templates.xml
index 1a0f868f25faca10b0468c484cc2e8de1e81ffa3..bf6a54916ecbafc4992e83fff521b45703e8a21c 100644
--- a/addons/website_membership/views/website_membership_templates.xml
+++ b/addons/website_membership/views/website_membership_templates.xml
@@ -98,20 +98,20 @@
     <xpath expr="//div[@id='left_column']/ul[last()]" position="after">
         <t t-if="google_maps_api_key">
             <!-- modal for large map -->
-            <div class="modal fade partner_map_modal" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
+            <div role="dialog" class="modal fade partner_map_modal" tabindex="-1" aria-hidden="true">
               <div class="modal-dialog modal-lg">
                 <div class="modal-content">
-                    <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+                    <header class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
                         <h4 class="modal-title">World Map</h4>
-                    </div>
+                    </header>
                     <iframe t-attf-src="/google_map/?width=898&amp;height=485&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/members/"
                     style="width:898px; height:485px; border:0; padding:0; margin:0;"></iframe>
                 </div>
               </div>
             </div>
             <!-- modal end -->
-            <h3>World Map<button class="btn btn-link" data-toggle="modal" data-target=".partner_map_modal"><span class="fa fa-external-link" /></button></h3>
+            <h3>World Map<button class="btn btn-link" data-toggle="modal" data-target=".partner_map_modal"><span class="fa fa-external-link" role="img" aria-label="External link" title="External link"/></button></h3>
             <ul class="nav">
                 <iframe t-attf-src="/google_map/?width=260&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/members/"
                     style="width:260px; height:240px; border:0; padding:0; margin:0;"></iframe>
diff --git a/addons/website_quote/data/website_quote_demo.xml b/addons/website_quote/data/website_quote_demo.xml
index b4cf1cd5042262f7e2e94a04ee9f7a34a293b450..ca79a4af27f9863eb2470677566275f4f7fcfec5 100644
--- a/addons/website_quote/data/website_quote_demo.xml
+++ b/addons/website_quote/data/website_quote_demo.xml
@@ -68,28 +68,28 @@
                     <div class="container text-center" style="background-color:#eeeeee">
                         <div class="row mt16 mb16">
                             <div class="col-md-4">
-                                <span class="fa fa-mortar-board fa-5x"></span>
-                                <p class="text-muted">Is fully trained on Odoo</p>
+                                <p class="fa fa-mortar-board fa-5x">
+                                <span class="text-muted">Is fully trained on Odoo</span></p>
                             </div>
                             <div class="col-md-4">
-                                <span class="fa fa-github fa-5x"></span>
-                                <p class="text-muted">Has access to Odoo Enterprise source code on Github and latest bug fixes</p>
+                                <p class="fa fa-github fa-5x">
+                                <span class="text-muted">Has access to Odoo Enterprise source code on Github and latest bug fixes</span></p>
                             </div>
                             <div class="col-md-4">
-                                <span class="fa fa-bug fa-5x"></span>
-                                <p class="text-muted">Has a direct relationship with Odoo SA to escalate issues</p>
+                                <p class="fa fa-bug fa-5x">
+                                <span class="text-muted">Has a direct relationship with Odoo SA to escalate issues</span></p>
                             </div>
                             <div class="col-md-4">
-                                <span class="fa fa-file-text-o fa-5x"></span>
-                                <p class="text-muted">Publishes references directly on Odoo.com</p>
+                                <p class="fa fa-file-text-o fa-5x">
+                                <span class="text-muted">Publishes references directly on Odoo.com</span></p>
                             </div>
                             <div class="col-md-4">
-                                <span class="fa fa-certificate fa-5x"></span>
-                                <p class="text-muted">Follows a transparent ranking system. Ready - Silver - Gold</p>
+                                <p class="fa fa-certificate fa-5x">
+                                <span class="text-muted">Follows a transparent ranking system. Ready - Silver - Gold</span></p>
                             </div>
                             <div class="col-md-4">
-                                <span class="fa fa-refresh fa-5x"></span>
-                                <p class="text-muted">Gets access to training sessions (updated weekly)</p>
+                                <p class="fa fa-refresh fa-5x">
+                                <span class="text-muted">Gets access to training sessions (updated weekly)</span></p>
                             </div>
                         </div>
                     </div>
@@ -165,7 +165,7 @@
                             <h2>Structure of the Training</h2>
                         </div>
                         <div class="col-md-5 col-md-offset-1 mt16 mb16">
-                            <img class="img img-responsive" src="/website_quote/static/src/img/online_training.png"/>
+                            <img class="img img-responsive" src="/website_quote/static/src/img/online_training.png" alt="Online training"/>
                         </div>
                         <div class="col-md-6 mt32">
                             <h4><strong>There are three components to the training</strong></h4>
diff --git a/addons/website_quote/views/website_quote_templates.xml b/addons/website_quote/views/website_quote_templates.xml
index 52f63e3faaaffb2176fd24824f8ca64e203196b1..5c72a01185d55e57823c473b5f1ed98d2e8af186 100644
--- a/addons/website_quote/views/website_quote_templates.xml
+++ b/addons/website_quote/views/website_quote_templates.xml
@@ -82,7 +82,7 @@
                                         t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
                               </td>
                               <td class="text-center">
-                                  <a t-attf-href="./update_line/#{ line.id }/?order_id=#{ quotation.id }&amp;unlink=True&amp;token=#{ quotation.access_token }" class="mb8 js_update_line_json hidden-print" t-if="line.option_line_id">
+                                  <a t-attf-href="./update_line/#{ line.id }/?order_id=#{ quotation.id }&amp;unlink=True&amp;token=#{ quotation.access_token }" class="mb8 js_update_line_json hidden-print" t-if="line.option_line_id" aria-label="Remove" title="Remove">
                                       <span class="fa fa-trash-o"></span>
                                   </a>
                               </td>
@@ -149,13 +149,13 @@
       <xpath expr="//div[@id='quote_qty']" position="replace">
           <div class="input-group oe_website_spinner">
               <span class="input-group-addon hidden-print">
-                  <a t-attf-href="./update_line/#{ line.id }/?order_id=#{ quotation.id }&amp;remove=True&amp;token=#{ quotation.access_token }" class="mb8 js_update_line_json">
+                  <a t-attf-href="./update_line/#{ line.id }/?order_id=#{ quotation.id }&amp;remove=True&amp;token=#{ quotation.access_token }" class="mb8 js_update_line_json" aria-label="Remove one" title="Remove one">
                       <span class="fa fa-minus"/>
                   </a>
               </span>
               <input type="text" class="js_quantity form-control" t-att-data-id="line.id" t-att-value="line.product_uom_qty"/>
               <span class="input-group-addon hidden-print">
-                  <a t-attf-href="./update_line/#{ line.id }/?order_id=#{ quotation.id }&amp;token=#{ quotation.access_token }" class="mb8 js_update_line_json">
+                  <a t-attf-href="./update_line/#{ line.id }/?order_id=#{ quotation.id }&amp;token=#{ quotation.access_token }" class="mb8 js_update_line_json" aria-label="Add one" title="Add one">
                       <span class="fa fa-plus"/>
                   </a>
               </span>
@@ -166,26 +166,26 @@
     <!-- duplicata of the template payment.payment_confirmation_status. 
         The duplication avoid to break an existing installation in stable version-->
     <template id="payment_confirmation_status">
-        <div t-if="payment_tx_id and payment_tx_id.state == 'done'" class="alert alert-success alert-dismissable">
-            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+        <div t-if="payment_tx_id and payment_tx_id.state == 'done'" class="alert alert-success alert-dismissable" role="status">
+            <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
             <span t-if='payment_tx_id.acquirer_id.done_msg' t-raw="payment_tx_id.acquirer_id.done_msg"/>
             <span t-if='payment_tx_id.acquirer_id.post_msg' t-raw="payment_tx_id.acquirer_id.post_msg"/>
         </div>
-        <div t-if="payment_tx_id and payment_tx_id.state == 'pending'" class="alert alert-warning alert-dismissable">
-            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+        <div t-if="payment_tx_id and payment_tx_id.state == 'pending'" class="alert alert-warning alert-dismissable" role="alert">
+            <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
             <span t-if='payment_tx_id.acquirer_id.pending_msg' t-raw="payment_tx_id.acquirer_id.pending_msg"/>
             <span t-if='payment_tx_id.acquirer_id.post_msg' t-raw="payment_tx_id.acquirer_id.post_msg"/>
         </div>
-        <div t-if="payment_tx_id and payment_tx_id.state == 'cancel'" class="alert alert-danger alert-dismissable">
-            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+        <div t-if="payment_tx_id and payment_tx_id.state == 'cancel'" class="alert alert-danger alert-dismissable" role="alert">
+            <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
             <span t-if='payment_tx_id.acquirer_id.cancel_msg' t-raw="payment_tx_id.acquirer_id.cancel_msg"/>
         </div>
-        <div t-if="payment_tx_id and payment_tx_id.state == 'error'" class="alert alert-danger alert-dismissable">
-            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+        <div t-if="payment_tx_id and payment_tx_id.state == 'error'" class="alert alert-danger alert-dismissable" role="alert">
+            <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
             <span t-if='payment_tx_id.acquirer_id.error_msg' t-raw="payment_tx_id.acquirer_id.error_msg"/>
         </div>
-        <div t-if="payment_tx_id and payment_tx_id.state == 'authorized'" class="alert alert-success alert-dismissable">
-            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+        <div t-if="payment_tx_id and payment_tx_id.state == 'authorized'" class="alert alert-success alert-dismissable" role="status">
+            <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
             Your payment has been authorized.
             <span t-if='payment_tx_id.acquirer_id.post_msg' t-raw="payment_tx_id.acquirer_id.post_msg"/>
         </div>
@@ -202,13 +202,13 @@
                   <div class="col-md-3 hidden-print">
                       <div class="bs-sidebar">
                           <div class="text-center" t-if="quotation.state in ('draft', 'sent', 'waiting_date')" style="padding: 10px">
-                              <a t-if="order_valid and not quotation.require_payment" class="btn btn-primary btn-block" data-toggle="modal" data-target="#modalaccept">
-                                  <i class="fa fa-check"></i> Accept Order
+                              <a role="button" t-if="order_valid and not quotation.require_payment" class="btn btn-primary btn-block" data-toggle="modal" data-target="#modalaccept">
+                                  <span class="fa fa-check"> Accept Order</span>
                               </a>
-                              <a t-if="order_valid and quotation.require_payment" class="btn btn-primary btn-block" data-toggle="modal" data-target="#modalaccept">
-                                  <i class="fa fa-check"></i> Accept &amp; Pay
+                              <a role="button" t-if="order_valid and quotation.require_payment" class="btn btn-primary btn-block" data-toggle="modal" data-target="#modalaccept">
+                                  <span class="fa fa-check"> Accept &amp; Pay</span>
                               </a>
-                              <a t-if="not order_valid" href="#discussion" class="btn btn-info btn-block o_normalwhitespace">
+                              <a role="button" t-if="not order_valid" href="#discussion" class="btn btn-info btn-block o_normalwhitespace">
                                   <strong>This offer expired!</strong><br/>
                                   Contact us for new quote.
                               </a>
@@ -219,8 +219,8 @@
                               </div>
                           </div>
                           <div class="text-center" t-if="need_payment or (quotation.state in ('sale') and quotation.require_payment and tx_state != 'done')" style="padding: 10px">
-                              <a class="btn btn-primary btn-block" data-toggle="modal" data-target="#modalaccept">
-                                  <i class="fa fa-check"></i> Pay Now
+                              <a role="button" class="btn btn-primary btn-block" data-toggle="modal" data-target="#modalaccept">
+                                  <span class="fa fa-check"> Pay Now</span>
                               </a>
                           </div>
                           <hr class="mt0 mb0"/>
@@ -231,7 +231,7 @@
                               <div class="mt8" t-if="days_valid &gt; 0">
                                   <strong>This offer expires in</strong>
                                   <div class="day_counter mt8 mb16">
-                                      <i class="fa fa-clock-o"></i>
+                                      <i class="fa fa-clock-o" aria-title="Dates" title="Dates"></i>
                                       <t t-esc="days_valid"/>
                                       <t t-if="days_valid &gt; 1">
                                           days
@@ -271,16 +271,16 @@
                   <!-- Page content -->
                   <div id="quote_content" class="col-md-9">
 
-                      <div class="alert alert-success alert-dismissable" t-if="message==1">
-                          <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                      <div class="alert alert-success alert-dismissable" t-if="message==1" role="status">
+                          <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                           Your message has been successfully sent!
                       </div>
-                      <div class="alert alert-warning alert-dismissable" t-if="message==2">
-                          <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                      <div class="alert alert-warning alert-dismissable" t-if="message==2" role="alert">
+                          <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                           This quotation has been rejected. <a href="#discussion">Contact us</a> if you want a new one.
                       </div>
-                      <div class="alert alert-warning alert-dismissable" t-if="message==3">
-                          <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                      <div class="alert alert-warning alert-dismissable" t-if="message==3" role="status">
+                          <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                           This order has been validated. Thanks for your trust
                           and do not hesitate to <a href="#discussion">contact us</a> for
                           any question.
@@ -289,8 +289,8 @@
                           <t t-set="payment_tx_id" t-value="payment_tx"/>
                           <t t-call="website_quote.payment_confirmation_status"/>
                       </t>
-                      <div class="alert alert-warning alert-dismissable" t-if="message==4 and quotation.state != 'sent'">
-                          <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                      <div class="alert alert-warning alert-dismissable" t-if="message==4 and quotation.state != 'sent'" role="alert">
+                          <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                           This order
                             <t t-if="quotation.state=='draft'">has not yet been sent!</t>
                             <t t-if="quotation.state=='cancel'">has already been cancelled!</t>
@@ -300,15 +300,15 @@
                       </div>
 
                       <!-- modal relative to the actions Accept/Reject/Cancel -->
-                      <div class="modal fade" id="modalaccept" role="dialog" aria-hidden="true">
+                      <div role="dialog" class="modal fade" id="modalaccept" aria-hidden="true">
                         <div class="modal-dialog" t-if="not quotation.require_payment and not need_payment">
                            <form id="accept" method="POST" t-att-data-order-id="quotation.id" t-att-data-token="quotation.access_token" class="js_accept_json modal-content js_website_submit_form">
                             <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
-                            <div class="modal-header">
-                              <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                            <header class="modal-header">
+                              <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                               <h4 class="modal-title">Validate Order</h4>
-                            </div>
-                            <div class="modal-body" id="sign-dialog">
+                            </header>
+                            <main class="modal-body" id="sign-dialog">
                                 <p>
                                     <span>I agree that by signing this proposal, I
                                     accept it on the behalf of </span><b t-field="quotation.partner_id.commercial_partner_id"/><span>, for an amount of </span>
@@ -322,16 +322,16 @@
                                     <t t-set="callUrl" t-value="'/my/quotes/accept'"/>
                                     <t t-set="accessToken" t-value="quotation.access_token"/>
                                 </t>
-                            </div>
+                            </main>
                           </form>
                         </div>
 
                         <div class="modal-dialog modal-content" t-if="quotation.require_payment or need_payment">
-                          <div class="modal-header">
-                            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                          <header class="modal-header">
+                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                             <h4 class="modal-title">Validate Order</h4>
-                          </div>
-                          <div class="modal-body" id="sign-dialog">
+                          </header>
+                          <main class="modal-body" id="sign-dialog">
                             <p>
                                 <span>I agree that by paying this proposal, I
                                 accept it on the behalf of </span><b t-field="quotation.partner_id.commercial_partner_id"/><span>, for an amount of </span>
@@ -339,8 +339,8 @@
                                   t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
                                 <span>with payment terms: </span><b t-field="quotation.payment_term_id"/>.
                             </p>
-                        </div>
-                        <div class="modal-footer">
+                        </main>
+                        <footer class="modal-footer">
                             <div t-if="pms or s2s_acquirers or form_acquirers" id="payment_method" class="text-left col-md-13">
                                 <h3 class="mb24">Pay with</h3>
                                 <t t-call="payment.payment_tokens_list">
@@ -352,53 +352,53 @@
                                     <t t-set="access_token" t-value="quotation.access_token"/>
                                 </t>
                             </div>
-                          </div>
+                          </footer>
                         </div>
                       </div>
 
-                      <div class="modal fade" id="modaldecline" role="dialog" aria-hidden="true">
+                      <div role="dialog" class="modal fade" id="modaldecline" aria-hidden="true">
                         <div class="modal-dialog">
                           <form id="decline" method="POST" t-attf-action="/quote/#{quotation.id}/#{quotation.access_token}/decline" class="modal-content">
                             <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
-                            <div class="modal-header">
-                              <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&amp;times;</button>
+                            <header class="modal-header">
+                              <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                               <h4 class="modal-title">Reject This Quote</h4>
-                            </div>
-                            <div class="modal-body">
+                            </header>
+                            <main class="modal-body">
                               <p>
                                   Tell us why you are refusing this quotation, this will help us improve our services.
                               </p>
                               <textarea rows="4" name="decline_message" placeholder="Your feedback....." class="form-control"/>
-                            </div>
-                            <div class="modal-footer">
+                            </main>
+                            <footer class="modal-footer">
                                 <button type="submit" t-att-id="quotation.id" class="btn btn-primary">Reject</button>
                                 <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
-                            </div>
+                            </footer>
                           </form>
                         </div>
                       </div>
 
-                      <div class="alert alert-warning alert-dismissable hidden-print" t-if="quotation.state == 'cancel'">
-                          <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                      <div class="alert alert-warning alert-dismissable hidden-print" t-if="quotation.state == 'cancel'" role="alert">
+                          <button type="button" class="close" data-dismiss="alert" aria-label="close">&amp;times;</button>
                           <strong>This quotation has been canceled.</strong> Contact us to get a new quote.
                       </div>
 
                       <t t-call="website_quote.so_quotation_content"/>
 
                       <div class="text-center hidden-print mt16 mb16" id="quotation_toolbar" t-if="quotation.state in ('draft', 'sent', 'waiting_date')">
-                          <a class="btn btn-success" data-toggle="modal" data-target="#modalaccept" t-if="order_valid and not quotation.require_payment">
-                              <i class="fa fa-check"></i> Accept
+                          <a role="button" class="btn btn-success" data-toggle="modal" data-target="#modalaccept" t-if="order_valid and not quotation.require_payment">
+                              <span class="fa fa-check"> Accept</span>
                           </a>
-                          <a class="btn btn-success" data-toggle="modal" data-target="#modalaccept" t-if="order_valid and quotation.require_payment">
-                              <i class="fa fa-check"></i> Accept &amp; Pay
+                          <a role="button" class="btn btn-success" data-toggle="modal" data-target="#modalaccept" t-if="order_valid and quotation.require_payment">
+                              <span class="fa fa-check"> Accept &amp; Pay</span>
                           </a>
-                          <a class="btn btn-danger" data-toggle="modal" data-target="#modaldecline">
-                              <i class="fa fa-times"></i> Reject
+                          <a role="button" class="btn btn-danger" data-toggle="modal" data-target="#modaldecline">
+                              <span class="fa fa-times"> Reject</span>
                           </a>
                       </div>
                       <div class="text-center" t-if="need_payment or (quotation.state in ('sale') and quotation.require_payment and tx_state != 'done')" style="padding: 10px">
-                          <a class="btn btn-primary" data-toggle="modal" data-target="#modalaccept">
-                              <i class="fa fa-check"></i> Pay Now
+                          <a role="button" class="btn btn-primary" data-toggle="modal" data-target="#modalaccept">
+                              <span class="fa fa-check"> Pay Now</span>
                           </a>
                       </div>
 
@@ -423,8 +423,8 @@
           </a>
       </xpath>
       <xpath expr="//div[@id='quotation_toolbar']/a[@data-target='#modaldecline']" position="before">
-          <a class="btn btn-info" type="submit" href="#discussion">
-              <i class="fa fa-comment"></i> Feedback
+          <a role="button" class="btn btn-info" type="submit" href="#discussion">
+              <span class="fa fa-comment"> Feedback</span>
           </a>
       </xpath>
   </template>
@@ -445,11 +445,11 @@
             <div t-ignore="true" class="pull-right css_editable_mode_hidden hidden-print">
                <ul class="list-inline">
                   <li groups="sales_team.group_sale_salesman">
-                    <a t-if="quotation.state not in ('manual')" class="btn btn-info" t-att-href="'/web#return_label=Website&amp;model=%s&amp;id=%s&amp;action=%s&amp;view_type=form' % (quotation._name, quotation.id, action)">Edit Quote</a>
-                    <a t-if="quotation.state in ('manual')" class=" btn btn-info" t-att-href="'/web#return_label=Website&amp;model=%s&amp;id=%s&amp;action=%s&amp;view_type=form' % (quotation._name, quotation.id, action)">Back to Sales Order</a>
+                    <a role="button" t-if="quotation.state not in ('manual')" class="btn btn-info" t-att-href="'/web#return_label=Website&amp;model=%s&amp;id=%s&amp;action=%s&amp;view_type=form' % (quotation._name, quotation.id, action)">Edit Quote</a>
+                    <a role="button" t-if="quotation.state in ('manual')" class=" btn btn-info" t-att-href="'/web#return_label=Website&amp;model=%s&amp;id=%s&amp;action=%s&amp;view_type=form' % (quotation._name, quotation.id, action)">Back to Sales Order</a>
                   </li>
                   <li>
-                     <a class="btn btn-info" target="_blank" t-att-href="'/quote/%s/%s' % (quotation.id,quotation.access_token)+'?pdf=True'">Print</a>
+                     <a role="button" class="btn btn-info" target="_blank" t-att-href="'/quote/%s/%s' % (quotation.id,quotation.access_token)+'?pdf=True'">Print</a>
                   </li>
                </ul>
             </div>
@@ -586,7 +586,7 @@
                                 </strong>
                             </td>
                             <td class="text-center" t-if="quotation.state in ['draft', 'sent']">
-                                <a t-attf-href="/quote/add_line/#{ option.id }/#{ quotation.id }/#{ quotation.access_token }" class="mb8 hidden-print">
+                                <a t-attf-href="/quote/add_line/#{ option.id }/#{ quotation.id }/#{ quotation.access_token }" class="mb8 hidden-print" aria-label="Add to cart" title="Add to cart">
                                     <span class="fa fa-shopping-cart"/>
                                 </a>
                             </td>
@@ -614,11 +614,11 @@
                     <div class="col-md-9">
                         <div class="row mb8">
                             <div t-ignore="true" class="css_editable_mode_hidden col-md-offset-11">
-                              <a class="btn btn-info hidden-print" t-att-href="'/web#return_label=Website&amp;model=%s&amp;id=%s&amp;action=%s&amp;view_type=form' % (template._name, template.id, request.env.ref('website_quote.action_sale_quotation_template').id)">Back</a>
+                              <a role="button" class="btn btn-info hidden-print" t-att-href="'/web#return_label=Website&amp;model=%s&amp;id=%s&amp;action=%s&amp;view_type=form' % (template._name, template.id, request.env.ref('website_quote.action_sale_quotation_template').id)">Back</a>
                             </div>
                         </div>
-                        <div class="alert alert-info alert-dismissable" t-ignore="True">
-                            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                        <div class="alert alert-info alert-dismissable" t-ignore="True" role="status">
+                            <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                             <p>
                                 <strong>Template Header:</strong> this content
                                 will appear on all quotations using this
@@ -635,8 +635,8 @@
                         <t t-foreach="template.quote_line" t-as="line">
                             <t t-if="line.product_id.product_tmpl_id.id not in product_tmpl_ids">
                                 <t t-set="product_tmpl_ids" t-value="product_tmpl_ids + [line.product_id.product_tmpl_id.id]"/>
-                                <div class="alert alert-info alert-dismissable mt16" t-ignore="True">
-                                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                                <div class="alert alert-info alert-dismissable mt16" t-ignore="True" role="status">
+                                    <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                                     Product: <strong t-esc="line.product_id.name"/>:
                                     this content will appear on the quotation only if this
                                     product is put on the quote.
@@ -648,8 +648,8 @@
                         <t t-foreach="template.options" t-as="option_line">
                             <t t-if="option_line.product_id.product_tmpl_id.id not in product_tmpl_ids">
                                 <t t-set="product_tmpl_ids" t-value="product_tmpl_ids + [option_line.product_id.product_tmpl_id.id]"/>
-                                <div class="alert alert-info alert-dismissable mt16" t-ignore="True">
-                                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
+                                <div class="alert alert-info alert-dismissable mt16" t-ignore="True" role="status">
+                                    <button type="button" class="close" data-dismiss="alert" aria-label="Close">&amp;times;</button>
                                     Optional Product: <strong t-esc="option_line.product_id.name"/>:
                                     this content will appear on the quotation only if this
                                     product is used in the quote.
diff --git a/addons/website_rating/static/src/xml/website_mail.xml b/addons/website_rating/static/src/xml/website_mail.xml
index 2f3dd132a8b111a9bd541a656e15f32465b7c16c..de521b32b0205830b95ecc0518e6517cd87730d8 100644
--- a/addons/website_rating/static/src/xml/website_mail.xml
+++ b/addons/website_rating/static/src/xml/website_mail.xml
@@ -7,12 +7,12 @@
         <t t-set="empty_star" t-value="5 - (val_integer+Math.ceil(val_decimal))"/>
         <div class="o_website_rating_static">
             <t t-foreach="_.range(0, val_integer)" t-as="num">
-                <i class="fa fa-star"></i>
+                <i class="fa fa-star" role="img" aria-label="One star" title="One star"></i>
             </t>
             <t t-if="val_decimal">
-                <i class="fa fa-star-half-o"></i>
+                <i class="fa fa-star-half-o" role="img" aria-label="Half a star" title="Half a star"></i>
             </t>
-            <t t-foreach="_.range(0, empty_star)" t-as="num">
+            <t t-foreach="_.range(0, empty_star)" t-as="num" role="img" t-attf-aria-label="#{empty_star} on 5" t-attf-title="#{empty_star} on 5">
                 <i class="fa fa-star-o"></i>
             </t>
         </div>
@@ -49,7 +49,7 @@
                                     <strong><t t-esc="percent['percent']"/>%</strong>
                                 </td>
                                 <td class="o_website_rating_table_reset">
-                                    <span class="btn btn-link o_website_rating_select_text" t-att-data-star="percent['num']">Remove selection</span>
+                                    <a href="#" role="button" class="btn btn-link o_website_rating_select_text" t-att-data-star="percent['num']">Remove selection</a>
                                 </td>
                             </tr>
                         </t>
@@ -62,11 +62,11 @@
     <t t-name="website_rating.rating_star_input">
         <div class="o_rating_star_card" t-if="widget.options['display_rating']">
             <div class="stars enabled">
-                <i class="fa fa-star-o"></i>
-                <i class="fa fa-star-o"></i>
-                <i class="fa fa-star-o"></i>
-                <i class="fa fa-star-o"></i>
-                <i class="fa fa-star-o"></i>
+                <i class="fa fa-star-o" role="img" aria-label="One star on five" title="One star on five"></i>
+                <i class="fa fa-star-o" role="img" aria-label="Two stars on five" title="Two stars on five"></i>
+                <i class="fa fa-star-o" role="img" aria-label="Three stars on five" title="Three stars on five"></i>
+                <i class="fa fa-star-o" role="img" aria-label="Four stars on five" title="Four stars on five"></i>
+                <i class="fa fa-star-o" role="img" aria-label="Five stars on five" title="Five stars on five"></i>
             </div>
             <div class="rate_text">
                 <span class="label label-info"></span>
diff --git a/addons/website_sale/data/demo.xml b/addons/website_sale/data/demo.xml
index 8e78e3675f6be2a876171950a1991e07b3973082..6c17b2d94dba75e183751334059c7b58716ea378 100644
--- a/addons/website_sale/data/demo.xml
+++ b/addons/website_sale/data/demo.xml
@@ -28,7 +28,7 @@
                                 </p>
                             </div>
                             <div class="col-md-5 mt16 mb16">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/ipad_why.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/ipad_why.png"/>
                             </div>
                         </div>
                     </div>
@@ -37,7 +37,7 @@
                     <div class="container">
                         <div class="row">
                             <div class="col-md-5 col-md-offset-1">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/ipad_experience.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/ipad_experience.png"/>
                             </div>
                             <div class="col-md-6 mt64">
                                 <h3>The full iPad experience.</h3>
@@ -92,7 +92,7 @@
 
                             </div>
                             <div class="col-md-4 mt16 mb16 col-md-offset1">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/play_where_you_play.jpg"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/play_where_you_play.jpg"/>
                             </div>
                         </div>
                     </div>
@@ -116,7 +116,7 @@
                                 </p>
                             </div>
                             <div class="col-md-5 col-md-offset-1 mt32">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/more_features.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/more_features.png"/>
                             </div>
                             <div class="col-md-5 col-md-offset-4 text-center mb16 mt16">
                                 <h3>Bluetooth connectivity</h3>
@@ -135,7 +135,7 @@
                     <div class="container">
                         <div class="row">
                             <div class="col-md-5 col-md-offset-1 mt32 mb16">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/bluetooth.jpg"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/bluetooth.jpg"/>
                             </div>
                             <div class="col-md-5 mt16">
                                 <h2>More features.</h2>
@@ -189,7 +189,7 @@ iOS7
                                 </p>
                             </div>
                             <div class="col-md-5 mt16 mb16">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/design.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/design.png"/>
                             </div>
                         </div>
                     </div>
@@ -198,7 +198,7 @@ iOS7
                     <div class="container">
                         <div class="row">
                             <div class="col-md-5 col-md-offset-1">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/mighty.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/mighty.png"/>
                             </div>
                             <div class="col-md-6 mt32">
                                 <h3>Beautiful 7.9‑inch display.</h3>
@@ -227,7 +227,7 @@ iOS7
                                 </p>
                             </div>
                             <div class="col-md-5 mt16">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/apps.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/apps.png"/>
                             </div>
                         </div>
                     </div>
@@ -236,7 +236,7 @@ iOS7
                     <div class="container">
                         <div class="row">
                             <div class="col-md-5 col-md-offset-1">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/ipad_why.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/ipad_why.png"/>
                             </div>
                             <div class="col-md-6 mt64">
                                 <h3>Why you'll love an iPad.</h3>
@@ -266,7 +266,7 @@ iOS7
                                 </p>
                             </div>
                             <div class="col-md-5 mt16 mb16">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/wireless.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/wireless.png"/>
                             </div>
                         </div>
                     </div>
@@ -302,7 +302,7 @@ Weight: 10.2 grams
                             </div>
                         </div><div class="row mt16">
                             <div class="col-md-2 mt16">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/promo_headphones.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/promo_headphones.png"/>
                             </div>
                             <div class="col-md-6">
                                 <h3 class="mt16">Hear, hear.</h3>
@@ -325,7 +325,7 @@ Weight: 10.2 grams
                             </div>
                         </div><div class="row">
                             <div class="col-md-2 col-md-offset-5 mt16">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/buds_closeup.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/buds_closeup.png"/>
                             </div>
                         </div>
                     </div>
@@ -353,7 +353,7 @@ Weight: 10.2 grams
                                 </p>
                             </div>
                             <div class="col-md-5 mt32">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/imac1.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/imac1.png"/>
                             </div>
                         </div>
                     </div>
@@ -369,7 +369,7 @@ Weight: 10.2 grams
                                 </p>
                             </div>
                             <div class="col-md-10 col-md-offset-1">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/imac2.png" width="100%"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/imac2.png" width="100%"/>
                             </div>
                         </div>
                     </div>
@@ -418,7 +418,7 @@ Weight: 10.2 grams
                     <div class="container">
                         <div class="row">
                             <div class="col-md-10 col-md-offset-1 mt32 mb32">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/keyboard.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/keyboard.png"/>
                             </div>
                             <div class="col-md-8 col-md-offset-2 mb32 text-center">
                                 <h3>A great Keyboard. Cordless.</h3>
@@ -445,7 +445,7 @@ Weight: 31 grams</field>
                     <div class="container">
                         <div class="row">
                             <div class="col-md-9 col-md-offset-1 mb16">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/overview_hero.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/overview_hero.png"/>
                             </div>
                         </div>
                     </div>
@@ -466,7 +466,7 @@ Weight: 31 grams</field>
                                 </p>
                             </div>
                             <div class="col-md-5">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/overview_design_silver.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/overview_design_silver.png"/>
                             </div>
                         </div>
                     </div>
@@ -478,7 +478,7 @@ Weight: 31 grams</field>
                                 <h2 class="text-center">Music. It's what beats inside.</h2>
                             </div>
                             <div class="col-md-4 mt32 col-md-offset-1">
-                                <img class="img img-responsive" src="/website_sale/static/src/img/purple.png"/>
+                                <img alt="" class="img img-responsive" src="/website_sale/static/src/img/purple.png"/>
                             </div>
                             <div class="col-md-6 mt32">
                                 <h3>How to get your groove on.</h3>
diff --git a/addons/website_sale/data/mail_template_data.xml b/addons/website_sale/data/mail_template_data.xml
index 7618a3051c1aef013abcf8bf879bf8baef3f1746..217a0df6a8e1177e36323c0fbae1aeb30598d77a 100644
--- a/addons/website_sale/data/mail_template_data.xml
+++ b/addons/website_sale/data/mail_template_data.xml
@@ -20,7 +20,7 @@
                     <table width="100%">
                         <tr>
                             <td style="padding: 10px; width:150px;">
-                                <img src="/web/image/product.product/${line.product_id.id}/image" height="100px" width="100px"></img>
+                                <img src="/web/image/product.product/${line.product_id.id}/image" height="100px" width="100px" alt="Product image"></img>
                             </td>
                             <td>
                                 <strong>${line.product_id.display_name}</strong><br/>${line.name}
diff --git a/addons/website_sale/static/src/js/website_sale_tour_shop.js b/addons/website_sale/static/src/js/website_sale_tour_shop.js
index 79395becea488ae3d2a3bda692cd2db48c70dcda..f0708ea58cd57377d3527d201a70344abe74473e 100644
--- a/addons/website_sale/static/src/js/website_sale_tour_shop.js
+++ b/addons/website_sale/static/src/js/website_sale_tour_shop.js
@@ -20,11 +20,11 @@ odoo.define("website_sale.tour_shop", function (require) {
         content: _t("Select <b>New Product</b> to create it and manage its properties to boost your sales."),
         position: "bottom",
     }, {
-        trigger: ".modal-dialog #editor_new_product input[type=text]",
+        trigger: "#editor_new_product input[type=text]",
         content: _t("Enter a name for your new product"),
         position: "right",
     }, {
-        trigger: ".modal-dialog button.btn-primary.btn-continue",
+        trigger: "footer.modal-footer button.btn-primary.btn-continue",
         content: _t("Click on <em>Continue</em> to create the product."),
         position: "right",
     }, {
@@ -38,11 +38,11 @@ odoo.define("website_sale.tour_shop", function (require) {
         content: _t("Click here to set an image describing your product."),
         position: "top",
     }, {
-        trigger: ".o_select_media_dialog .o_upload_image_button",
+        trigger: ".o_upload_image_button",
         content: _t("Upload an image from your local library."),
         position: "bottom",
         run: function (actions) {
-            actions.auto(".modal-footer .btn-default");
+            actions.auto("footer.modal-footer .btn-default");
         },
     }, {
         trigger: "#snippet_structure .oe_snippet:eq(8) .oe_snippet_thumbnail",
diff --git a/addons/website_sale/views/product_views.xml b/addons/website_sale/views/product_views.xml
index 545ae0cd200d087df196c28ecb3a8204debd2108..6ca1f76d7e946daa1910e0ba043e1db68683a5aa 100644
--- a/addons/website_sale/views/product_views.xml
+++ b/addons/website_sale/views/product_views.xml
@@ -118,7 +118,7 @@
                                             <span t-attf-class="o_website_sale_image_card_size label label-#{size_status}" t-att-title="message">
                                                 <t t-esc="record.image.value"/>
                                             </span>
-                                            <a t-if="!read_only_mode" type="delete" class="btn btn-xs btn-default o_website_sale_image_card_remove"><i class="fa fa-trash"/></a>
+                                            <a role="button" t-if="!read_only_mode" type="delete" class="btn btn-xs btn-default o_website_sale_image_card_remove" aria-label="Remove" title="Remove"><i class="fa fa-trash"/></a>
                                         </div>
                                     </div>
                                 </t>
diff --git a/addons/website_sale/views/res_config_settings_views.xml b/addons/website_sale/views/res_config_settings_views.xml
index cccce5ba5b846a26053bc52775db5eb7b9c8bf20..28e73649064ef796f95b56d2fcb04339368bab04 100644
--- a/addons/website_sale/views/res_config_settings_views.xml
+++ b/addons/website_sale/views/res_config_settings_views.xml
@@ -108,7 +108,7 @@
                 <div class="row mt16 o_settings_container" id="website_taxes_settings">
                     <div class="col-xs-12 col-md-6 o_setting_box" title="This tax is applied to any new product created in the catalog.">
                         <div class="o_setting_right_pane">
-                            <label string='Default Sales Tax'/>
+                            <span class="o_form_label">Default Sales Tax</span>
                             <div class="text-muted">
                                 Default sales tax applied to local transactions
                             </div>
@@ -139,7 +139,7 @@
                     </div>
                     <div class="col-xs-12 col-md-6 o_setting_box" id="website_rounding_method" title="A rounding per line is advised if your prices are tax-included. That way, the sum of line subtotals equals the total with taxes.">
                         <div class="o_setting_right_pane">
-                            <label string="Rounding Method"/>
+                            <span class="o_form_label">Rounding Method</span>
                             <div class="text-muted">
                                 How total tax amount is computed in orders and invoices
                             </div>
@@ -321,7 +321,7 @@
                     <div class="row mt16 o_settings_container" id="sale_invoicing_settings">
                        <div class="col-xs-12 col-md-6 o_setting_box" id="invoicing_policy_setting" title="The mode selected here applies as invoicing policy of any new product created but not of products already existing.">
                             <div class="o_setting_right_pane">
-                                <label string="Invoicing Policy"/>
+                                <span class="o_form_label">Invoicing Policy</span>
                                 <div class="text-muted">
                                     Issue invoices to customers
                                 </div>
@@ -350,7 +350,7 @@
                 <div class="row mt16 o_settings_container" id="sale_checkout_settings">
                     <div class="col-xs-12 col-md-6 o_setting_box" id="checkout_mail_setting">
                         <div class="o_setting_right_pane">
-                            <label string="Confirmation Email"/>
+                            <span class="o_form_label">Confirmation Email</span>
                             <div class="text-muted">
                                 Email sent to the customer after the checkout
                             </div>
@@ -364,7 +364,7 @@
                     <div class="col-xs-12 col-md-6 o_setting_box" id="abandoned_carts_setting" title="Send a recovery email to authenticated shoppers">
                         <div class="o_setting_left_pane"/>
                         <div class="o_setting_right_pane">
-                            <label string="Email for Abandoned carts"/>
+                            <span class="o_form_label">Email for Abandoned carts</span>
                             <div class="text-muted">
                                 Default recovery email to send when a cart is abandoned
                             </div>
@@ -384,7 +384,7 @@
                     </div>
                     <div class="col-xs-12 col-md-6 o_setting_box" id="checkout_assignation_setting" groups="base.group_no_one">
                         <div class="o_setting_right_pane">
-                            <label string="Assignation"/>
+                            <span class="o_form_label">Assignation</span>
                             <div class="text-muted">
                                 Assignation of online orders
                             </div>
diff --git a/addons/website_sale/views/snippets.xml b/addons/website_sale/views/snippets.xml
index f1ab422a68d6c27c9f8e68ffb3c1cb8b9d70e80b..f19ba2f051ae8524abb811600d7f7a26cd468c5b 100644
--- a/addons/website_sale/views/snippets.xml
+++ b/addons/website_sale/views/snippets.xml
@@ -9,8 +9,8 @@
 
           <li class='dropdown-submenu'>
             <a tabindex="-1" href="#">Size</a>
-            <ul class="dropdown-menu" name="size">
-              <li><a href="#">
+            <ul class="dropdown-menu" role="menu" name="size">
+              <li><a role="menuitem" href="#">
                 <table>
                   <tr><td class="selected"></td><td></td><td></td><td></td></tr>
                   <tr><td></td><td></td><td></td><td></td></tr>
@@ -20,18 +20,18 @@
               </a></li>
             </ul>
           </li>
-          <li class='dropdown-submenu'>
+          <li class='dropdown-submenu' role="menuitem" aria-haspopup="true">
             <a tabindex="-1" href="#">Styles</a>
-            <ul class="dropdown-menu" name="style">
+            <ul class="dropdown-menu" role="menu" name="style">
             </ul>
           </li>
-          <li class='dropdown-submenu'>
+          <li class='dropdown-submenu' role="menuitem" aria-haspopup="true">
               <a tabindex="-1" href="#">Promote</a>
-              <ul class="dropdown-menu" data-no-preview="true">
-                  <li data-go_to="top"><a>Push to top</a></li>
-                  <li data-go_to="up"><a>Push up</a></li>
-                  <li data-go_to="down"><a>Push down</a></li>
-                  <li data-go_to="bottom"><a>Push to bottom</a></li>
+              <ul class="dropdown-menu" role="menu" data-no-preview="true">
+                  <li data-go_to="top"><a role="menuitem">Push to top</a></li>
+                  <li data-go_to="up"><a role="menuitem">Push up</a></li>
+                  <li data-go_to="down"><a role="menuitem">Push down</a></li>
+                  <li data-go_to="bottom"><a role="menuitem">Push to bottom</a></li>
               </ul>
           </li>
         </div>
diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml
index e446c0b869f460b1a1e806b63c1b58ff80c73721..de7b62590275001e670bfabf0574336e9652ed93 100644
--- a/addons/website_sale/views/templates.xml
+++ b/addons/website_sale/views/templates.xml
@@ -43,8 +43,9 @@
             <li class="divider hidden"/> <!-- Make sure the cart and related menus are not folded (see autohideMenu) -->
             <li id="my_cart" t-att-class="'' if website_sale_order and website_sale_order.cart_quantity else 'hidden'">
                 <a href="/shop/cart">
-                    <i class="fa fa-shopping-cart"></i>
-                    My Cart <sup t-attf-class="my_cart_quantity label label-primary" t-esc="website_sale_order and website_sale_order.cart_quantity or ''" />
+                    <span class="fa fa-shopping-cart">
+                        My Cart <sup t-attf-class="my_cart_quantity label label-primary" t-esc="website_sale_order and website_sale_order.cart_quantity or ''" />
+                    </span>
                 </a>
             </li>
         </xpath>
@@ -90,7 +91,7 @@
             <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
             <div itemscope="itemscope" itemtype="http://schema.org/Product">
                 <div class="ribbon-wrapper">
-                    <div class="ribbon btn btn-danger">Sale</div>
+                    <a href="#" role="button" class="ribbon btn btn-danger">Sale</a>
                 </div>
                 <div class="oe_product_image">
                     <a itemprop="url" t-att-href="product_href">
@@ -111,7 +112,7 @@
                         <strong>
                             <a itemprop="name" t-att-href="product_href" t-att-content="product.name" t-field="product.name" />
                         </strong>
-                        <a t-if="not show_publish and not product.website_published" t-att-href="product_href" class="btn btn-default btn-xs btn-danger" title="This product is unpublished.">Unpublished</a>
+                        <a role="button" t-if="not show_publish and not product.website_published" t-att-href="product_href" class="btn btn-default btn-xs btn-danger" title="This product is unpublished.">Unpublished</a>
                     </h5>
                     <div itemprop="offers" itemscope="itemscope" itemtype="http://schema.org/Offer" class="product_price" t-if="product.product_variant_ids">
                         <b>
@@ -141,12 +142,12 @@
         <xpath expr="//div[hasclass('product_price')]" position="inside">
             <input name="product_id" t-att-value="product.product_variant_id.id" type="hidden" />
             <t t-if="len(product.product_variant_ids) == 1">
-                <a class="btn btn-default btn-xs a-submit">
+                <a role="button" class="btn btn-default btn-xs a-submit" aria-label="Shopping cart" title="Shopping cart">
                     <span class="fa fa-shopping-cart" />
                 </a>
             </t>
             <t t-if="len(product.product_variant_ids) &gt; 1">
-                <a class="btn btn-default btn-xs" t-att-href="keep('/shop/product/%s' % slug(product), page=(pager['page']['num'] if pager['page']['num']&gt;1 else None))">
+                <a role="button" class="btn btn-default btn-xs" t-att-href="keep('/shop/product/%s' % slug(product), page=(pager['page']['num'] if pager['page']['num']&gt;1 else None))" aria-label="Shopping cart" title="Shopping cart">
                     <span class="fa fa-shopping-cart" />
                 </a>
             </t>
@@ -157,13 +158,13 @@
         <t t-set="website_sale_pricelists" t-value="website.get_pricelist_available(show_visible=True)" />
         <div t-attf-class="#{website_sale_pricelists and len(website_sale_pricelists)&gt;1 and 'dropdown' or 'hidden'} btn-group">
             <t t-set="curr_pl" t-value="website.get_current_pricelist()" />
-            <a href="#" class="dropdown-toggle btn btn-default" data-toggle="dropdown">
+            <a role="button" href="#" class="dropdown-toggle btn btn-default" data-toggle="dropdown">
                 <t t-esc="curr_pl and curr_pl.name or ' - '" />
                 <span class="caret"></span>
             </a>
             <ul class="dropdown-menu" role="menu">
                 <li t-foreach="website_sale_pricelists" t-as="pl">
-                    <a t-att-href="'/shop/change_pricelist/%s' % pl.id">
+                    <a role="menuitem" t-att-href="'/shop/change_pricelist/%s' % pl.id">
                         <span class="switcher_pricelist" t-att-data-pl_id="pl.id" t-esc="pl.name" />
                     </a>
                 </li>
@@ -247,7 +248,7 @@
             ]"/>
             <t t-set="website_sale_sortable_current" t-value="[sort for sort in website_sale_sortable if sort[1]==request.params.get('order', '')]"/>
             <div class="dropdown btn-group dropdown_sorty_by">
-                <a href="#" class="dropdown-toggle btn btn-default" data-toggle="dropdown">
+                <a role="button" href="#" class="dropdown-toggle btn btn-default" data-toggle="dropdown">
                     <t t-if='len(website_sale_sortable_current)'>
                         <span>Sorting by : <t t-raw='website_sale_sortable_current[0][0]'/></span>
                     </t>
@@ -258,7 +259,7 @@
                 </a>
                 <ul class="dropdown-menu" role="menu">
                     <li t-foreach="website_sale_sortable" t-as="sortby">
-                        <a t-att-href="keep('/shop', order=sortby[1])">
+                        <a role="menuitem" t-att-href="keep('/shop', order=sortby[1])">
                             <span t-raw="sortby[0]"/>
                         </a>
                     </li>
@@ -301,7 +302,9 @@
 
     <template id="option_collapse_categories_recursive" name="Collapse Category Recursive">
         <li t-att-class="'active' if categ.id == int(category or 0) else None">
-            <i t-if="categ.child_id" t-attf-class="text-primary fa #{'fa-chevron-down' if categ.id in parent_category_ids else 'fa-chevron-right'}" />
+            <i t-if="categ.child_id" t-attf-class="text-primary fa #{'fa-chevron-down' if categ.id in parent_category_ids else 'fa-chevron-right'}"
+               t-attf-title="#{'Unfold' if categ.id in parent_category_ids else 'Fold'}"
+               t-attf-aria-label="#{'Unfold' if categ.id in parent_category_ids else 'Fold'}" role="img"/>
             <a t-att-href="keep('/shop/category/' + slug(categ), category=0)" t-field="categ.name"></a>
             <ul t-if="categ.child_id" class="nav nav-pills nav-stacked nav-hierarchy" t-att-style="'display:block;' if categ.id in parent_category_ids else 'display:none;'">
                 <t t-foreach="categ.child_id" t-as="categ">
@@ -436,12 +439,10 @@
 
                                 <t t-if="len(image_ids) or variant_img">
                                     <a class="carousel-control left" href="#o-carousel-product" role="button" data-slide="prev" >
-                                        <span class="fa fa-chevron-left" aria-hidden="true"/>
-                                        <span class="sr-only">Previous</span>
+                                        <span class="fa fa-chevron-left" role="img" aria-label="Previous" title="Previous"/>
                                     </a>
                                     <a class="carousel-control right" href="#o-carousel-product" role="button" data-slide="next">
-                                        <span class="fa fa-chevron-right" aria-hidden="true"/>
-                                        <span class="sr-only">Next</span>
+                                        <span class="fa fa-chevron-right" role="img" aria-label="Next" title="Next"/>
                                     </a>
                                 </t>
                               </div>
@@ -475,7 +476,7 @@
                                     </t>
                                     <t t-call="website_sale.product_price" />
                                     <p t-if="len(product.product_variant_ids) &gt; 1" class="css_not_available_msg bg-danger" style="padding: 15px;">This combination does not exist.</p>
-                                    <a id="add_to_cart" class="btn btn-primary btn-lg mt8 js_check_product a-submit" href="#">Add to Cart</a>
+                                    <a role="button" id="add_to_cart" class="btn btn-primary btn-lg mt8 js_check_product a-submit" href="#">Add to Cart</a>
                                 </div>
                             </form>
                             <hr t-if="product.description_sale" />
@@ -579,11 +580,11 @@
     <template id="product_quantity" inherit_id="website_sale.product" customize_show="True" name="Select Quantity">
       <xpath expr="//a[@id='add_to_cart']" position="before">
         <div class="css_quantity input-group oe_website_spinner" contenteditable="false">
-            <a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json">
+            <a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json" aria-label="Remove one" title="Remove one">
                 <i class="fa fa-minus"></i>
             </a>
             <input type="text" class="form-control quantity" data-min="1" name="add_qty" value="1"/>
-            <a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json">
+            <a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json" aria-label="Add one" title="Add one">
                 <i class="fa fa-plus"></i>
             </a>
         </div>
@@ -778,8 +779,8 @@
                                             <div class="col-md-3 col-sm-4">
                                             </div>
                                             <div class="col-md-9 col-sm-8">
-                                                <a href="/shop/checkout" class="btn btn-default mb32 pull-left"><span class="fa fa-chevron-left" /> Previous</a>
-                                                <a class="btn btn-primary pull-right mb32 o_website_form_send" href="/shop/confirm_order">Next <span class="fa fa-chevron-right" /></a>
+                                                <a role="button" href="/shop/checkout" class="btn btn-default mb32 pull-left"><span class="fa fa-chevron-left" > Previous</span></a>
+                                                <a role="button" class="fa fa-chevron-suffix-right btn btn-primary pull-right mb32 o_website_form_send" href="/shop/confirm_order">Next</a>
                                             </div>
                                         </div>
                                     </form>
@@ -844,11 +845,11 @@
                         </td>
                         <td class="text-center td-qty">
                             <div class="css_quantity input-group oe_website_spinner">
-                                <a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json hidden-xs">
+                                <a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json hidden-xs" aria-label="Remove one" title="Remove one">
                                     <i class="fa fa-minus"></i>
                                 </a>
                                 <input type="text" class="js_quantity form-control quantity" t-att-data-line-id="line.id" t-att-data-product-id="line.product_id.id" t-att-value="int(line.product_uom_qty) == line.product_uom_qty and int(line.product_uom_qty) or line.product_uom_qty" />
-                                <a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json hidden-xs">
+                                <a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json hidden-xs" aria-label="Add one" title="Add one">
                                     <i class="fa fa-plus"></i>
                                 </a>
                             </div>
@@ -861,7 +862,7 @@
                             <span t-field="line.price_reduce_taxinc" style="white-space: nowrap;" t-options="{'widget': 'monetary', 'from_currency': website_sale_order.pricelist_id.currency_id, 'display_currency': website.currency_id}" groups="sale.group_show_price_total" />
                         </td>
                         <td class="td-action">
-                            <a href='#' class='js_delete_product no-decoration'> <small><i class='fa fa-trash-o'></i></small></a>
+                            <a href='#' aria-label="Remove from cart" title="Remove from cart" class='js_delete_product no-decoration'> <small><i class='fa fa-trash-o'></i></small></a>
                         </td>
                     </tr>
                 </t>
@@ -883,7 +884,7 @@
                         <div class="col-lg-8 col-sm-12 col-xs-12 oe_cart">
                             <div class="row">
                                 <div class="col-md-12">
-                                    <div t-if="abandoned_proceed or access_token" class="mt8 mb8 alert alert-info"> <!-- abandoned cart choices -->
+                                    <div t-if="abandoned_proceed or access_token" class="mt8 mb8 alert alert-info" role="alert"> <!-- abandoned cart choices -->
                                         <t t-if="abandoned_proceed">
                                             <p>Your previous cart has already been completed.</p>
                                             <p t-if="website_sale_order">Please proceed your current cart.</p>
@@ -899,13 +900,11 @@
                                     </div>
                                     <t t-call="website_sale.cart_lines" />
                                     <div class="clearfix" />
-                                    <a href="/shop" class="btn btn-default mb32 hidden-xs hidden-sm hidden-md">
-                                        <span class="fa fa-chevron-left" />
-                                        <span class="">Continue Shopping</span>
+                                    <a role="button" href="/shop" class="btn btn-default mb32 hidden-xs hidden-sm hidden-md">
+                                        <span class="fa fa-chevron-left">Continue Shopping</span>
                                     </a>
-                                    <a t-if="website_sale_order and website_sale_order.website_order_line" class="btn btn-primary pull-right mb32 mr8 hidden visible-lg" href="/shop/checkout?express=1">
-                                        <span class="">Process Checkout</span>
-                                        <span class="fa fa-chevron-right" />
+                                    <a role="button" t-if="website_sale_order and website_sale_order.website_order_line" class="btn btn-primary pull-right mb32 mr8 hidden visible-lg" href="/shop/checkout?express=1">
+                                        <span class="fa fa-chevron-suffix-right">Process Checkout</span>
                                     </a>
                                     <div class="oe_structure" />
                                 </div>
@@ -914,13 +913,12 @@
                         <div class="col-lg-4 col-sm-12 col-xs-12">
                             <t t-call='website_sale.short_cart_summary'/>
                             <div class='hidden-lg'>
-                                <a href="/shop" class="btn btn-default mb32">
-                                    <span class="fa fa-chevron-left" />
-                                    Continue<span class="hidden-xs"> Shopping</span>
+                                <a role="button" href="/shop" class="btn btn-default mb32">
+                                    <span class="fa fa-chevron-left">
+                                    Continue<span class="hidden-xs"> Shopping</span></span>
                                 </a>
-                                <a t-if="website_sale_order and website_sale_order.website_order_line" class="btn btn-primary pull-right mb32 mr8" href="/shop/checkout?express=1">
-                                    <span class="">Process Checkout</span>
-                                    <span class="fa fa-chevron-right" />
+                                <a role="button" t-if="website_sale_order and website_sale_order.website_order_line" class="btn btn-primary pull-right mb32 mr8" href="/shop/checkout?express=1">
+                                    <span class="fa fa-suffix-chevron-right">Process Checkout</span>
                                 </a>
                             </div>
                         </div>
@@ -956,7 +954,7 @@
                         <t t-set='hide_coupon'>True</t>
                     </t>
                 </span>
-                <a class="btn btn-primary" href="/shop/cart">
+                <a role="button" class="btn btn-primary" href="/shop/cart">
                        View Cart (<t t-esc="website_sale_order.cart_quantity" /> items)
                      </a>
             </div>
@@ -990,7 +988,7 @@
                         </td>
                         <td class="col-md-2 col-sm-3 col-xs-4 text-center">
                             <input class="js_quantity" name="product_id" t-att-data-product-id="product.id" type="hidden" />
-                            <a class="btn btn-link js_add_suggested_products">
+                            <a role="button" class="btn btn-link js_add_suggested_products">
                                 <strong>Add to Cart</strong>
                             </a>
                         </td>
@@ -1010,7 +1008,7 @@
             <div class="input-group" style='margin-left:auto; margin-right: auto'>
                 <input name="promo" style='min-width:180px' class="form-control" type="text" placeholder="code..." t-att-value="website_sale_order.pricelist_id.code or None" />
                 <div class="input-group-btn">
-                    <a class="btn btn-default a-submit">Apply</a>
+                    <a role="button" class="btn btn-default a-submit">Apply</a>
                 </div>
             </div>
         </form>
@@ -1057,8 +1055,8 @@
                                             <div class="col-sm-12 col-md-12 one_kanban">
                                                 <form action="/shop/address" method="post" class=''>
                                                     <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
-                                                    <a class='a-submit btn btn-default mb16 btn-block'>
-                                                        <i class="fa fa-plus-square" aria-hidden="true"></i> Add an address
+                                                    <a role="button" class='a-submit btn btn-default mb16 btn-block'>
+                                                        <span class="fa fa-plus-square"> Add an address</span>
                                                     </a>
                                                 </form>
                                             </div>
@@ -1079,9 +1077,9 @@
                             </t>
                             <div class="clearfix" />
                             <div>
-                                <a href="/shop/cart" class="btn btn-default mb32">
-                                    <span class="fa fa-chevron-left" /> Return to Cart</a>
-                                <a class="btn btn-primary pull-right mb32 " href="/shop/confirm_order">Confirm <span class="fa fa-chevron-right" /></a>
+                                <a role="button" href="/shop/cart" class="btn btn-default mb32">
+                                    <span class="fa fa-chevron-left" > Return to Cart</span></a>
+                                <a role="button" class="btn btn-primary pull-right mb32 " href="/shop/confirm_order"><span class="fa fa-suffix-chevron-right">Confirm</span></a>
                             </div>
                         </div>
                     </div>
@@ -1099,19 +1097,19 @@
                 </t>
                 <input type='submit'/>
             </form>
-            <a t-if="not actual_partner or (ship.id in actual_partner.ids + actual_partner.child_ids.ids)" class='btn btn-link pull-right js_edit_address no-decoration' title="Edit this address"><i class='fa fa-edit'/></a>
+            <a role="button" t-if="not actual_partner or (ship.id in actual_partner.ids + actual_partner.child_ids.ids)" class='btn btn-link pull-right js_edit_address no-decoration' title="Edit this address" aria-label="Edit this address"><i class='fa fa-edit'/></a>
             <div t-att-class="'panel panel-default %s' % (selected and 'border_primary' or 'js_change_shipping')">
                 <div class='panel-body' style='min-height: 130px;'>
                     <t t-esc="contact" t-options="dict(widget='contact', fields=['name', 'address'], no_marker=True)"/>
                 </div>
                 <div class='panel-footer' t-if='not readonly'>
                     <span class='btn-ship' t-att-style="'' if selected else 'display:none;'">
-                        <a class="btn btn-block btn-primary">
-                            <i class='fa fa-check'></i> Ship to this address
+                        <a role="button" class="btn btn-block btn-primary">
+                            <span class='fa fa-check'> Ship to this address</span>
                         </a>
                     </span>
                     <span class='btn-ship' t-att-style="'' if not selected else 'display:none;'">
-                        <a class="btn btn-block btn-default">
+                        <a role="button" class="btn btn-block btn-default">
                             Select this address
                         </a>
                     </span>
@@ -1140,7 +1138,7 @@
                                 <t t-if="mode == ('new', 'billing')">
                                     <h2 class="page-header mt8 ml16">Your Address
                                         <small> or </small>
-                                        <a href='/web/login?redirect=/shop/checkout' class='btn btn-primary' style="margin-top: -11px">Log In</a>
+                                        <a role="button" href='/web/login?redirect=/shop/checkout' class='btn btn-primary' style="margin-top: -11px">Log In</a>
                                     </h2>
                                 </t>
                                 <t t-if="mode == ('edit', 'billing')">
@@ -1251,11 +1249,11 @@
 
                                     <div class="clearfix"/>
                                     <div style='padding: 0 15px'>
-                                        <a t-att-href="mode == ('new', 'billing') and '/shop/cart' or '/shop/checkout'" class="btn btn-default mb32">
-                                            <span class="fa fa-chevron-left" /> Back
+                                        <a role="button" t-att-href="mode == ('new', 'billing') and '/shop/cart' or '/shop/checkout'" class="btn btn-default mb32">
+                                            <span class="fa fa-chevron-left">Back </span>
                                         </a>
-                                        <a class="btn btn-primary pull-right mb32 a-submit a-submit-disable a-submit-loading">
-                                            <span>Next </span><span class="fa fa-chevron-right" />
+                                        <a role="button" class="btn btn-primary pull-right mb32 a-submit a-submit-disable a-submit-loading">
+                                            <span class="fa fa-suffix-chevron-right">Next </span>
                                         </a>
                                     </div>
                                 </form>
@@ -1283,7 +1281,7 @@
                         </div>
                         <div class="col-xs-12" t-if="errors">
                             <t t-foreach="errors" t-as="error">
-                                <div class="alert alert-danger" t-if="error">
+                                <div class="alert alert-danger" t-if="error" role="alert">
                                     <h4>
                                         <t t-esc="error[0]" />
                                     </h4>
@@ -1300,7 +1298,7 @@
                                 <div class="panel panel-default">
                                   <div class="panel-headisng"></div>
                                   <div class="panel-body">
-                                    <a class='pull-right no-decoration' href='/shop/checkout'><i class='fa fa-edit'/> Edit</a>
+                                      <a class='pull-right no-decoration' href='/shop/checkout'><span class='fa fa-edit'> Edit</span></a>
                                     <t t-set="same_shipping" t-value="bool(order.partner_shipping_id==order.partner_id or only_services)" />
                                     <div><b>Billing<t t-if="same_shipping and not only_services"> &amp; Shipping</t>: </b><span t-esc='order.partner_id' t-options="dict(widget='contact', fields=['address'], no_marker=True, separator=', ')" class="address-inline"/></div>
                                     <div t-if="not same_shipping and not only_services" groups="sale.group_delivery_invoice_address"><b>Shipping: </b><span t-esc='order.partner_shipping_id' t-options="dict(widget='contact', fields=['address'], no_marker=True, separator=', ')"  class="address-inline"/></div>
@@ -1331,19 +1329,19 @@
                             </div>
 
                             <div t-if="not (form_acquirers or s2s_acquirers)">
-                                <a class="btn-link"
+                                <a role="button" class="btn-link"
                                     groups="base.group_system"
                                     t-attf-href="/web#return_label=Website&amp;action=#{payment_action_id}">
-                                        <i class="fa fa-arrow-right" aria-hidden="true"></i> Add payment acquirers
+                                    <span class="fa fa-arrow-right"> Add payment acquirers</span>
                                 </a>
                             </div>
                             <div class="js_payment mb64 row" t-if="not website_sale_order.amount_total" id="payment_method">
                                 <div class="col-sm-12">
                                     <form target="_self" action="/shop/payment/validate" method="post" class="pull-right">
                                         <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
-                                        <a class="btn btn-primary a-submit">
-                                            <span t-if="order.amount_total &gt; 0">Pay Now <span class="fa fa-chevron-right"></span></span>
-                                            <span t-if="order.amount_total == 0">Confirm Order <span class="fa fa-chevron-right"></span></span>
+                                        <a role="button" class="btn btn-primary a-submit">
+                                            <span class="fa fa-suffix-chevron-right" t-if="order.amount_total &gt; 0">Pay Now </span>
+                                            <span class="fa fa-suffix-chevron-right" t-if="order.amount_total == 0">Confirm Order </span>
                                         </a>
                                     </form>
                                 </div>
@@ -1367,7 +1365,7 @@
                     <t t-call="website_sale.total">
                         <t t-set='no_rowspan'>1</t>
                     </t>
-                    <a t-if="website_sale_order and website_sale_order.website_order_line" class="btn btn-default pull-right mr8 hidden visible-lg" href="/shop/checkout?express=1">
+                    <a role="button" t-if="website_sale_order and website_sale_order.website_order_line" class="btn btn-default pull-right mr8 hidden visible-lg" href="/shop/checkout?express=1">
                         <span>Process Checkout</span>
                     </a>
                 </div>
@@ -1380,7 +1378,7 @@
             <div class="panel-body row">
                 <div class='toggle_summary col-md-12 hidden-lg'>
                     <b>Your order: </b> <span t-field="website_sale_order.amount_total" t-options='{"widget": "monetary", "display_currency": website_sale_order.pricelist_id.currency_id}'/>
-                    <span class='fa fa-chevron-down fa-border pull-right'></span>
+                    <span class='fa fa-chevron-down fa-border pull-right' role="img" aria-label="Details" title="Details"></span>
                 </div>
 
                 <div t-if="not website_sale_order or not website_sale_order.website_order_line" class="well well-lg">
@@ -1453,12 +1451,12 @@
                             <div class="oe_cart">
                                 <div class="thanks_msg mb32">
                                     <h2>Thank you for your order.
-                                        <a class="btn btn-primary hidden-xs" href="/shop/print" target="_blank"><i class="fa fa-print"></i> Print</a>
+                                        <a role="button" class="btn btn-primary hidden-xs" href="/shop/print" target="_blank" aria-label="Print" title="Print"><i class="fa fa-print"></i> Print</a>
                                     </h2>
                                 </div>
                                 <t t-if="request.env['ir.config_parameter'].sudo().get_param('auth_signup.invitation_scope', 'b2b') == 'b2c' and request.website.is_public_user()">
-                                    <p class='alert alert-info mt16'>
-                                        <a t-att-href='order.partner_id.signup_prepare() and order.partner_id.signup_url' class='btn btn-sm btn-primary'>Sign Up</a>
+                                    <p class='alert alert-info mt16' role="status">
+                                        <a role="button" t-att-href='order.partner_id.signup_prepare() and order.partner_id.signup_url' class='btn btn-sm btn-primary'>Sign Up</a>
                                          to follow your order.
                                     </p>
                                 </t>
@@ -1566,7 +1564,7 @@
                     (payment_tx_id.state == 'done' and 'panel-success') or
                     (payment_tx_id.state == 'authorized' and 'panel-success') or
                     'panel-danger')">
-                <a groups="base.group_system" class="btn pull-right" target="_blank"
+                <a role="button" groups="base.group_system" class="btn pull-right" target="_blank" aria-label="Edit" title="Edit"
                         t-att-href="'/web#model=%s&amp;id=%s&amp;action=%s&amp;view_type=form' % ('payment.acquirer', payment_tx_id.acquirer_id.id, 'payment.action_payment_acquirer')">
                     <i class="fa fa-pencil"></i>
                 </a>
@@ -1605,8 +1603,8 @@
         <xpath expr="//div[@id='o_new_content_menu_choices']//ul" position="inside">
             <li groups="sales_team.group_sale_manager">
                 <a id="create-new-product" href="#" data-action="new_product">
-                    <i class="fa fa-shopping-cart" />
-                    <p>New Product</p>
+                    <p class="fa fa-shopping-cart">
+                    New Product</p>
                 </a>
             </li>
         </xpath>
diff --git a/addons/website_sale_comparison/static/src/xml/comparison.xml b/addons/website_sale_comparison/static/src/xml/comparison.xml
index 76009b7c6570a1ac640275856ba6a2edf54b74a4..9e48ded7cb8f8fb02da6e5a4c0fd548c906295b6 100644
--- a/addons/website_sale_comparison/static/src/xml/comparison.xml
+++ b/addons/website_sale_comparison/static/src/xml/comparison.xml
@@ -4,24 +4,24 @@
         <div class="o_product_feature_panel hidden-xs css_editable_mode_hidden" style="display:none">
             <span class="o_product_panel" id="comparelist">
                 <span class="o_product_panel_header">
-                    <span class="o_product_icon"><i class="fa fa-exchange"></i></span>
+                    <span class="o_product_icon"><i class="fa fa-exchange" role="img" aria-label="Product" title="Product"></i></span>
                     <span class="o_product_text">Compare</span>
                     <span class="o_product_circle o_animate_blink label label-primary">0</span>
                 </span>
                 <span class="o_product_panel_content">
                     <div class="o_comparelist_products">
                         <div class="o_comparelist_limit_warning" style="display:none">
-                            <div class="o_shortlog alert alert-warning">
-                                <span><i class="fa fa-warning text-danger"></i> You can compare max 4 products.</span>
+                            <div class="o_shortlog alert alert-warning" role="alert">
+                                <span><i class="fa fa-warning text-danger" role="img" aria-label="Warning" title="Warning"></i> You can compare max 4 products.</span>
                             </div>
                         </div>
                     </div>
                     <div class="o_comparelist_button" style='display:none'>
-                        <a class="btn btn-primary btn-block" href="#"><i class="fa fa-exchange mr4"></i>Compare</a>
+                        <a role="button" class="btn btn-primary btn-block" href="#"><span class="fa fa-exchange mr4">Compare</span></a>
                     </div>
                 </span>
             </span>
         </div>
     </t>
 
-</templates>
\ No newline at end of file
+</templates>
diff --git a/addons/website_sale_comparison/views/website_sale_comparison_template.xml b/addons/website_sale_comparison/views/website_sale_comparison_template.xml
index ffc6c2ffe93f8c0e8935a1c953afe4f3e532888f..f89b89c36824507e656cf2c5ab2e697dcc6cd5af 100644
--- a/addons/website_sale_comparison/views/website_sale_comparison_template.xml
+++ b/addons/website_sale_comparison/views/website_sale_comparison_template.xml
@@ -10,14 +10,14 @@
 
     <template id="add_to_compare" inherit_id="website_sale.products_item" active="True" customize_show="True" name="Comparison List" priority="22">
         <xpath expr="//div[hasclass('product_price')]" position="inside">
-            <a class="hidden-xs btn btn-default btn-xs o_add_compare" title="Compare" t-att-data-product-product-id="product.product_variant_ids[0].id" data-action="o_comparelist"><span class="fa fa-exchange"></span></a>
+            <a role="button" class="hidden-xs btn btn-default btn-xs o_add_compare" title="Compare" aria-label="Compare" t-att-data-product-product-id="product.product_variant_ids[0].id" data-action="o_comparelist"><span class="fa fa-exchange"></span></a>
         </xpath>
     </template>
 
     <template id="product_add_to_compare" name='Add to comparison in product page' inherit_id="website_sale.product" priority="8">
         <xpath expr="//a[@id='add_to_cart']" position="after">
             <t t-if="product.env.ref('website_sale_comparison.add_to_compare').active">
-                <a class="hidden-xs btn btn-default btn-lg mt8 o_add_compare_dyn" title="Compare" t-att-data-product-product-id="product.product_variant_ids[0].id" data-action="o_comparelist"><span class="fa fa-exchange"></span></a>
+                <a role="button" class="hidden-xs btn btn-default btn-lg mt8 o_add_compare_dyn" title="Compare" aria-label="Compare" t-att-data-product-product-id="product.product_variant_ids[0].id" data-action="o_comparelist"><span class="fa fa-exchange"></span></a>
             </t>
         </xpath>
     </template>
@@ -58,7 +58,7 @@
     <template id='recommended_product' inherit_id="website_sale.recommended_products" name="Alternative Products">
         <xpath expr="//h3" position="replace">
             <t t-set="ids" t-value="str(product.product_variant_id.id) + ','+ ','.join([str(a) for a in product.alternative_product_ids.mapped('product_variant_id.id')])"/>
-            <div><span class='h3'>Suggested alternatives: </span><a class="btn btn-primary" t-attf-href="/shop/compare/?products=#{ids}"><i class="fa fa-exchange"></i> Compare</a></div>
+            <div><span class='h3'>Suggested alternatives: </span><a role="button" class="btn btn-primary fa fa-exchange" t-attf-href="/shop/compare/?products=#{ids}"> Compare</a></div>
         </xpath>
     </template>
 
@@ -78,7 +78,7 @@
                                         <strong class='pull-right'>x</strong>
                                     </a>
                                     <a t-att-href="'/shop/product/%s' % slug(product.product_tmpl_id)">
-                                        <img t-attf-src="/web/image/product.product/#{product.id}/image/200x150" class="img img-responsive" style="margin:auto;"/>
+                                        <img t-attf-src="/web/image/product.product/#{product.id}/image/200x150" class="img img-responsive" style="margin:auto;" alt="Product image"/>
                                     </a>
                                     <div class='product_summary'>
                                         <a class="o_product_comparison_table" t-attf-href="/shop/product/#{ slug(product.product_tmpl_id) }">
@@ -95,7 +95,7 @@
 
                                         <form action="/shop/cart/update" method="post" class="text-center">
                                             <input name="product_id" t-att-value="product.id" type="hidden"/>
-                                            <a class="btn btn-primary btn-block a-submit"><i class="fa fa-shopping-cart"></i>&amp;nbsp;Add to Cart</a>
+                                            <a role="button" class="btn btn-primary btn-block a-submit fa fa-shopping-cart">&amp;nbsp;Add to Cart</a>
                                         </form>
                                     </div>
                                 </td>
@@ -104,7 +104,7 @@
                             <t t-foreach="specs.keys()" t-as="spec">
                                 <t t-if="len(specs.keys())&gt;1">
                                     <tr class="success text-left breadcrumb clickable" data-toggle="collapse" t-att-data-target="'.'+spec.split()[0]">
-                                        <th t-att-colspan="len(products) + 1"><i class="fa fa-chevron-circle-down o_product_comparison_collpase"></i><t t-esc="spec"/></th>
+                                        <th t-att-colspan="len(products) + 1"><i class="fa fa-chevron-circle-down o_product_comparison_collpase" role="img" aria-label="Collapse" title="Collapse"></i><t t-esc="spec"/></th>
                                     </tr>
                                 </t>
                                 <tr t-foreach="specs[spec].keys()" t-as="att" t-att-class="'collapse in ' + spec.split()[0]">
@@ -123,7 +123,7 @@
     <template id="product_product" name="Comparator - Product row in comparator popover">
         <div class="row mt8 o_product_row" t-att-data-category_ids="product.public_categ_ids.ids">
             <div class="col-sm-3 col-xs-3 mb8">
-                <img class="img img-responsive" t-attf-src="/web/image/product.product/#{product.id}/image_small" style="max-height: 50px;" />
+                <img class="img img-responsive" t-attf-src="/web/image/product.product/#{product.id}/image_small" style="max-height: 50px;" alt="Product image"/>
             </div>
             <div class="col-sm-7 col-xs-7 mb8 text-left">
                 <h5>
@@ -140,7 +140,7 @@
             </div>
             <div class="col-sm-1 col-xs-1 mt32">
                 <a href='#' class="o_remove" title="Remove" t-att-data-product_product_id="product.id">
-                    <i class="fa fa-trash" ></i>
+                    <i class="fa fa-trash" role="img" aria-label="Remove"></i>
                 </a>
             </div>
         </div>
diff --git a/addons/website_sale_digital/views/website_sale_digital.xml b/addons/website_sale_digital/views/website_sale_digital.xml
index 448118d6198edc57aa8b75c70da9c675a82e8a8a..c1e161fc57b11e56b87ea1a5802745bd639c6d0f 100644
--- a/addons/website_sale_digital/views/website_sale_digital.xml
+++ b/addons/website_sale_digital/views/website_sale_digital.xml
@@ -10,11 +10,11 @@
                     </button>
                     <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
                         <t t-foreach="attachments" t-as="a">
-                            <li role="presentation"><a role="menuitem" tabindex="-1" t-att-href="'/my/download?attachment_id=%i' % a['id']"><t t-esc="a['name']"/></a></li>
+                            <li><a role="menuitem" tabindex="-1" t-att-href="'/my/download?attachment_id=%i' % a['id']"><t t-esc="a['name']"/></a></li>
                         </t>
                     </ul>
                 </span>
             </t>
         </xpath>
     </template>
-</odoo>
\ No newline at end of file
+</odoo>
diff --git a/addons/website_sale_link_tracker/static/src/xml/website_sale_dashboard_utm_chart.xml b/addons/website_sale_link_tracker/static/src/xml/website_sale_dashboard_utm_chart.xml
index 04a88cd59efbd302cc2cf9b459a76482c62b0513..c56cb4549ce79f0ce9a93ac4c884b91c3c8bfac3 100644
--- a/addons/website_sale_link_tracker/static/src/xml/website_sale_dashboard_utm_chart.xml
+++ b/addons/website_sale_link_tracker/static/src/xml/website_sale_dashboard_utm_chart.xml
@@ -20,12 +20,12 @@
 
     <t t-name="website_sale.LinkTrackersDropDown">
         <div class="dropdown">
-            <button class="btn btn-default btn-sm dropdown-toggle utm_dropdown ml4" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"><span class="utm_button_name">Campaigns</span><span class="caret ml4"/>
+            <button class="btn btn-default btn-sm dropdown-toggle utm_dropdown ml4" id="utm_dropdown" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"><span class="utm_button_name">Campaigns</span><span class="caret ml4"/>
             </button>
             <ul class="dropdown-menu" role="menu" aria-labelledby="utm_dropdown">
-                <li><a class="js_utm_selector" name="campaign_id">Campaigns</a></li>
-                <li><a class="js_utm_selector" name="medium_id">Medium</a></li>
-                <li><a class="js_utm_selector" name="source_id">Sources</a></li>
+                <li><a role="menuitem" class="js_utm_selector" name="campaign_id">Campaigns</a></li>
+                <li><a role="menuitem" class="js_utm_selector" name="medium_id">Medium</a></li>
+                <li><a role="menuitem" class="js_utm_selector" name="source_id">Sources</a></li>
             </ul>
         </div>
     </t>
diff --git a/addons/website_sale_options/static/src/js/website_sale.test.js b/addons/website_sale_options/static/src/js/website_sale.test.js
index 38662b52713e20b504b12c6d27244ed2dac8daa2..28c45763224140aededfc284280a35db23b2a308 100644
--- a/addons/website_sale_options/static/src/js/website_sale.test.js
+++ b/addons/website_sale_options/static/src/js/website_sale.test.js
@@ -180,7 +180,7 @@ tour.register('shop_customize', {
         {
             content: "click in modal on 'Proceed to checkout' button",
             extra_trigger: 'body:has(.js_product:contains(Warranty) a:contains(Add to Cart):hidden)',
-            trigger: '.modal-dialog a:contains("Proceed to Checkout")',
+            trigger: 'footer.modal-footer a:contains("Proceed to Checkout")',
         },
         {
             content: "check quantity",
diff --git a/addons/website_sale_options/views/website_sale_options_templates.xml b/addons/website_sale_options/views/website_sale_options_templates.xml
index 90c51ec14f2fc0bdc41bc0c85c5f506ac2993847..6a58166942c692eb43b2d75f363ad6ef77642156 100644
--- a/addons/website_sale_options/views/website_sale_options_templates.xml
+++ b/addons/website_sale_options/views/website_sale_options_templates.xml
@@ -26,14 +26,14 @@
 </template>
 
 <template id="modal" name="Optional Products">
-<div id="modal_optional_products" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
+<div role="dialog" id="modal_optional_products" class="modal fade" tabindex="-1" aria-labelledby="myModalLabel">
   <div class="modal-dialog modal-lg">
     <div class="modal-content">
-      <div class="modal-header">
-        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
+      <header class="modal-header">
+        <button type="button" class="close" data-dismiss="modal" aria-label="Close">x</button>
         <h4 class="modal-title" id="myModalLabel">Add to Cart</h4>
-      </div>
-      <div class="modal-body">
+      </header>
+      <main class="modal-body">
         <table class="table table-striped table-condensed">
           <thead>
               <tr>
@@ -57,11 +57,11 @@
                 </td>
                 <td class="text-center td-qty">
                   <div class="css_quantity input-group oe_website_spinner">
-                      <a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json hidden-xs">
+                      <a t-attf-href="#" class="mb8 input-group-addon js_add_cart_json hidden-xs" aria-label="Remove one" title="Remove one">
                           <i class="fa fa-minus"></i>
                       </a>
                       <input type="text" class="js_quantity form-control quantity" data-min="1" name="add_qty" value="1"/>
-                      <a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json hidden-xs">
+                      <a t-attf-href="#" class="mb8 input-group-addon float_left js_add_cart_json hidden-xs" aria-label="Add one" title="Add one">
                           <i class="fa fa-plus"></i>
                       </a>
                   </div>
@@ -121,10 +121,10 @@
 
                   <div class='mt8'>
                     <input type="hidden" class="js_optional_same_quantity" t-attf-name="optional-add-#{product_index}" value="0"/>
-                    <a href="#" class="js_add btn btn-sm btn-info"><strong>Add<span class='hidden-xs'> to Cart</span></strong></a>
+                    <a role="button" href="#" class="js_add btn btn-sm btn-info"><strong>Add<span class='hidden-xs'> to Cart</span></strong></a>
                     <span class="js_remove hidden">
                       <span class="js_item">1 </span><span class="js_items hidden">5 </span> <span t-field="product.uom_id.sudo().name"/><br/>
-                      <a href="#" class="js_remove btn btn-xs btn-info"><small>Remove <span class='hidden-xs'> from Cart</span></small></a>
+                      <a role="button" href="#" class="js_remove btn btn-xs btn-info"><small>Remove <span class='hidden-xs'> from Cart</span></small></a>
                     </span>
                   </div>
                 </td>
@@ -132,11 +132,11 @@
 
             </tbody>
           </table>
-        </div>
-        <div class="modal-footer">
-          <a class="btn btn-default a-submit js_goto_shop"><i class="fa fa-chevron-left"></i> <span class="hidden-xs">Continue Shopping</span><span class="visible-xs-inline">Continue</span></a>
-          <a class="btn btn-primary pull-right a-submit"><i class="fa fa-shopping-cart fa-fw"></i> <span class="hidden-xs">Proceed to Checkout</span><span class="visible-xs-inline">Checkout</span></a>
-        </div>
+        </main>
+        <footer class="modal-footer">
+          <a role="button" class="btn btn-default a-submit js_goto_shop" aria-label="Continue shopping" title="Continue shopping"><i class="fa fa-chevron-left"></i> <span class="hidden-xs">Continue Shopping</span><span class="visible-xs-inline">Continue</span></a>
+          <a role="button" class="btn btn-primary pull-right a-submit" aria-label="Proceed to checkout" title="Proceed to checkout"><i class="fa fa-shopping-cart fa-fw"></i> <span class="hidden-xs">Proceed to Checkout</span><span class="visible-xs-inline">Checkout</span></a>
+        </footer>
       </div>
     </div>
   </div>
diff --git a/addons/website_sale_stock/static/src/xml/website_sale_stock_product_availability.xml b/addons/website_sale_stock/static/src/xml/website_sale_stock_product_availability.xml
index fc3095e3c93966d100abe8218cef5573033abf1a..38712f507f4084319c5befce99ac1a51f44a2df7 100644
--- a/addons/website_sale_stock/static/src/xml/website_sale_stock_product_availability.xml
+++ b/addons/website_sale_stock/static/src/xml/website_sale_stock_product_availability.xml
@@ -10,7 +10,7 @@
                 </div>
                 <t t-if="inventory_availability == 'threshold'">
                     <div t-if="virtual_available lte available_threshold" t-attf-class="availability_message_#{product_template} text-warning mt16">
-                        <i class="fa fa-exclamation-triangle" />
+                        <i class="fa fa-exclamation-triangle" title="Warning" role="img" aria-label="Warning"/>
                         <t t-esc="virtual_available" /> <t t-esc="uom_name" /> available
                     </div>
                     <div t-if="virtual_available gt available_threshold" t-attf-class="availability_message_#{product_template} text-success mt16">In stock</div>
@@ -19,7 +19,7 @@
             <div t-if="cart_qty" t-attf-class="availability_message_#{product_template} text-warning mt8">
                 You already added <t t-if="!virtual_available">all</t> <t t-esc="cart_qty" /> <t t-esc="uom_name" /> in your cart.
             </div>
-            <div t-if="!cart_qty and virtual_available lte 0" t-attf-class="availability_message_#{product_template} text-danger mt16"><i class="fa fa-exclamation-triangle" /> Temporarily out of stock</div>
+            <div t-if="!cart_qty and virtual_available lte 0" t-attf-class="availability_message_#{product_template} text-danger mt16"><i class="fa fa-exclamation-triangle" role="img" aria-label="Warning" title="Warning"/> Temporarily out of stock</div>
         </t>
         <div t-if="product_type == 'product' and inventory_availability == 'custom'" t-attf-class="availability_message_#{product_template} text-success mt16">
             <t t-esc="custom_message" />
diff --git a/addons/website_sale_stock/views/website_sale_stock_templates.xml b/addons/website_sale_stock/views/website_sale_stock_templates.xml
index 87d9dfd2bddaa8099062b2a13bc0f36cccc7362c..a615cd47ed3db41a11222cfec926cb94dfb0fc71 100644
--- a/addons/website_sale_stock/views/website_sale_stock_templates.xml
+++ b/addons/website_sale_stock/views/website_sale_stock_templates.xml
@@ -14,7 +14,7 @@
         <xpath expr="//div[hasclass('css_quantity')]//i[hasclass('fa-plus')]/.." position="replace">
           <t t-if="line._get_stock_warning(clear=False)">
             <a t-attf-href="#" class="mb8 input-group-addon">
-              <i class='fa fa-warning text-warning' t-att-title="line._get_stock_warning()" />
+              <i class='fa fa-warning text-warning' t-att-title="line._get_stock_warning()" role="img" aria-label="Warning"/>
             </a>
           </t>
           <t t-else="1">
@@ -26,7 +26,7 @@
         </xpath>
         <xpath expr="//div[hasclass('js_cart_lines')]" position="after">
           <t t-if='website_sale_order'>
-            <div t-if='website_sale_order._get_stock_warning(clear=False)' class="alert alert-warning">
+            <div t-if='website_sale_order._get_stock_warning(clear=False)' class="alert alert-warning" role="alert">
               <strong>Warning!</strong> <t t-esc='website_sale_order._get_stock_warning()'/>
             </div>
           </t>
@@ -42,13 +42,13 @@
   <template id="website_sale_stock_payment" inherit_id="website_sale.cart_summary">
      <xpath expr="//table[@id='cart_products']//td[hasclass('td-qty')]" position="inside">
       <t t-if='line._get_stock_warning(clear=False)'>
-        <i class='fa fa-warning text-warning' t-att-title="line._get_stock_warning()" />
+        <i class='fa fa-warning text-warning' t-att-title="line._get_stock_warning()" role="img" aria-label="Warning"/>
       </t>
     </xpath>
     <xpath expr="//table[@id='cart_products']" position="after">
         <t t-if='website_sale_order'>
           <t t-set='warning' t-value='website_sale_order._get_stock_warning(clear=False)' />
-          <div t-if='warning' class="alert alert-warning">
+          <div t-if='warning' class="alert alert-warning" role="alert">
             <strong>Warning!</strong> <t t-esc='website_sale_order._get_stock_warning()'/>
           </div>
         </t>
diff --git a/addons/website_sale_wishlist/views/website_sale_wishlist_template.xml b/addons/website_sale_wishlist/views/website_sale_wishlist_template.xml
index 6be0378297c097eb7270ca49fa621e3022565613..4a051e7241bf8f26443bf8053fdd68e0d7277302 100644
--- a/addons/website_sale_wishlist/views/website_sale_wishlist_template.xml
+++ b/addons/website_sale_wishlist/views/website_sale_wishlist_template.xml
@@ -12,7 +12,7 @@
     <template id="add_to_wishlist" inherit_id="website_sale.products_item" active="True" customize_show="True" name="Wishlist" priority="20">
         <xpath expr="//div[hasclass('product_price')]" position="inside">
             <t t-set="in_wish" t-value="product.product_variant_ids &amp; request.env['product.wishlist'].current().mapped('product_id')"/>
-            <a class="btn btn-default btn-xs o_add_wishlist" t-att-disabled='in_wish or None' title="Add to Wishlist" t-att-data-product-product-id="product.product_variant_ids[0].id" data-action="o_wishlist"><span class="fa fa-heart"></span></a>
+            <a role="button" class="btn btn-default btn-xs o_add_wishlist" t-att-disabled='in_wish or None' title="Add to Wishlist" t-att-data-product-product-id="product.product_variant_ids[0].id" data-action="o_wishlist"><span class="fa fa-heart" role="img" aria-label="Add to wishlist"></span></a>
         </xpath>
     </template>
 
@@ -20,7 +20,7 @@
         <xpath expr="//a[@id='add_to_cart']" position="after">
             <t t-if="product.env.ref('website_sale_wishlist.add_to_wishlist').active">
                 <t t-set="in_wish" t-value="product.product_variant_ids &amp; request.env['product.wishlist'].current().mapped('product_id')"/>
-                <a class="btn btn-default btn-lg mt8 o_add_wishlist_dyn" t-att-disabled='in_wish or None' title="Add to Wishlist" t-att-data-product-product-id="product.product_variant_ids[0].id" data-action="o_wishlist"><span class="fa fa-heart"></span></a>
+                <a role="button" class="btn btn-default btn-lg mt8 o_add_wishlist_dyn" t-att-disabled='in_wish or None' title="Add to Wishlist" t-att-data-product-product-id="product.product_variant_ids[0].id" data-action="o_wishlist"><span class="fa fa-heart" role="img" aria-label="Add to wishlist"></span></a>
             </t>
         </xpath>
     </template>
@@ -31,8 +31,9 @@
                 <t t-set='wishcount' t-value="len(request.env['product.wishlist'].current())"/>
                 <li id="my_wish" t-att-style="not wishcount and 'display:none;'">
                     <a href="/shop/wishlist">
-                        <i class="fa fa-heart"></i>
-                        Wishlist <sup t-attf-class="my_wish_quantity o_animate_blink label label-primary"><t t-esc='wishcount'/></sup>
+                        <span class="fa fa-heart">
+                            Wishlist <sup t-attf-class="my_wish_quantity o_animate_blink label label-primary"><t t-esc='wishcount'/></sup>
+                        </span>
                     </a>
                 </li>
             </t>
@@ -56,13 +57,13 @@
                                     <tr t-att-data-wish-id='wish.id' t-att-data-product-id='wish.product_id.id'>
                                         <td class='td-img'>
                                             <a t-att-href="'/shop/product/%s' % slug(wish.product_id.product_tmpl_id)">
-                                                <img t-attf-src="/web/image/product.product/#{wish.product_id.id}/image/100x100" class="img img-responsive" style="margin:auto;"/>
+                                                <img t-attf-src="/web/image/product.product/#{wish.product_id.id}/image/100x100" class="img img-responsive" style="margin:auto;" alt="Product image"/>
                                             </a>
                                         </td>
                                         <td class='text-left'>
                                             <strong><a t-att-href="'/shop/product/%s' % slug(wish.product_id.product_tmpl_id)"><t t-esc="wish.product_id.display_name" /></a></strong>
                                             <small class='hidden-xs'><p t-field="wish.product_id.description_sale" class="text-muted"/></small>
-                                            <a class="o_wish_rm no-decoration"><small><i class='fa fa-trash-o'></i> Remove</small></a>
+                                            <a class="o_wish_rm no-decoration"><small><span class='fa fa-trash-o'> Remove</span></small></a>
                                         </td>
                                         <td style='width:80px'>
                                             <t t-if='wish.price_new != wish.price'>
@@ -73,7 +74,7 @@
                                         </td>
                                         <td class='text-center td-wish-btn'>
                                             <input name="product_id" t-att-value="wish.product_id.id" type="hidden"/>
-                                            <a class="btn btn-default btn-block o_wish_add mb4" >Add <span class='hidden-xs'>to Cart</span></a>
+                                            <a role="button" class="btn btn-default btn-block o_wish_add mb4" >Add <span class='hidden-xs'>to Cart</span></a>
                                         </td>
                                     </tr>
                                 </t>
diff --git a/addons/website_slides/static/src/js/slides_upload.js b/addons/website_slides/static/src/js/slides_upload.js
index b3953f125715be69e706d6bc385b70e2d044317e..29d5e230ec8b76b384cfc860789d48621fcd5452 100644
--- a/addons/website_slides/static/src/js/slides_upload.js
+++ b/addons/website_slides/static/src/js/slides_upload.js
@@ -355,12 +355,12 @@ var SlideDialog = Widget.extend({
                 values.website_published = true;
             }
             this.$('.oe_slides_upload_loading').show();
-            this.$('.modal-footer, .modal-body').hide();
+            this.$('footer.modal-footer, main.modal-body').hide();
             ajax.jsonRpc("/slides/add_slide", 'call', values).then(function (data) {
                 if (data.error) {
                     self.display_alert(data.error);
                     self.$('.oe_slides_upload_loading').hide();
-                    self.$('.modal-footer, .modal-body').show();
+                    self.$('footer.modal-footer, main.modal-body').show();
 
                 } else {
                     window.location = data.url;
diff --git a/addons/website_slides/static/src/xml/website_slides.xml b/addons/website_slides/static/src/xml/website_slides.xml
index 1944de0c9d89aa0aebcecd4afd75b33c794a4e23..de4fe12a26ea45bc1693ffce8e524e34508095ed 100644
--- a/addons/website_slides/static/src/xml/website_slides.xml
+++ b/addons/website_slides/static/src/xml/website_slides.xml
@@ -1,23 +1,23 @@
 <templates id="template" xml:space="preserve">
 
     <t t-name="website.slide.upload">
-        <div class="modal" tabindex="-1" role="dialog" aria-hidden="true">
+        <div role="dialog" class="modal" tabindex="-1">
             <div class="modal-dialog">
                 <div class="modal-content">
-                    <div class="modal-header">
-                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+                    <header class="modal-header">
+                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
                         <h3 class="modal-title">Upload Presentation</h3>
+                    </header>
+                    <div class="oe_slides_upload_loading text-center" style="display:none" aria-hidden="true" role="status">
+                        <h4><span class='fa fa-spinner fa-spin'> Uploading presentation...  </span></h4>
                     </div>
-                    <div class="oe_slides_upload_loading text-center" style="display:none">
-                        <h4><i class='fa fa-spinner fa-spin'></i> Uploading presentation...  </h4>
-                    </div>
-                    <div class="modal-body">
+                    <main class="modal-body">
                         <form class="clearfix form-horizontal">
                             <div class="form-group">
                                 <div class="col-sm-4">
                                     <div class="img-thumbnail">
                                         <div class="o_slide_preview">
-                                            <img src="/website_slides/static/src/img/document.png" id="slide-image" title="Content Preview" class="img-responsive"/>
+                                            <img src="/website_slides/static/src/img/document.png" id="slide-image" title="Content Preview" alt="Content Preview" class="img-responsive"/>
                                         </div>
                                     </div>
                                 </div>
@@ -64,12 +64,12 @@
                             </div>
                             <canvas id="data_canvas" style="display: none;"></canvas>
                         </form>
-                    </div>
-                    <div class="modal-footer">
+                    </main>
+                    <footer class="modal-footer">
                         <button type="button" data-loading-text="Loading..." class="btn btn-primary save">Save as Draft</button>
                         <button type="button" data-loading-text="Loading..." data-published="true" class="btn btn-primary save">Save and Publish</button>
-                        <button type="button" class="btn btn-default" data-dismiss="modal" aria-hidden="true">Discard</button>
-                    </div>
+                        <button type="button" class="btn btn-default" data-dismiss="modal">Discard</button>
+                    </footer>
                 </div>
             </div>
         </div>
diff --git a/addons/website_slides/views/res_config_settings_views.xml b/addons/website_slides/views/res_config_settings_views.xml
index 597795e2354524d6f4b14d6ab5291093f18fa0f2..2898430659364f4e0959d41f9f9d5fa050cdd559 100644
--- a/addons/website_slides/views/res_config_settings_views.xml
+++ b/addons/website_slides/views/res_config_settings_views.xml
@@ -8,18 +8,17 @@
             <div id="languages_setting" position="after">
                 <div class="col-xs-12 col-md-6 o_setting_box" id="slides_install_setting">
                     <div class="o_setting_right_pane">
-                        <label string="Slides"/>
+                        <span class="o_form_label">Slides</span>
                         <div class="text-muted">
                             Google Drive API Key
                         </div>
                         <div class="content-group">
                             <div class="row mt16">
-                                <label class="col-md-3 o_light_label" string="API Key"/>
+                                <label for="website_slide_google_app_key" class="col-md-3 o_light_label" string="API Key"/>
                                 <field name="website_slide_google_app_key" class="oe_inline"/>
                             </div>
                             <div class="oe_link">
-                                <span class="fa fa-arrow-right"/>
-                                <a href="https://console.developers.google.com/flows/enableapi?apiid=drive,youtube">
+                                <a class="fa fa-arrow-right" href="https://console.developers.google.com/flows/enableapi?apiid=drive,youtube">
                                     Create a Google Project and Get a Key
                                 </a>
                             </div>
diff --git a/addons/website_slides/views/website_slides.xml b/addons/website_slides/views/website_slides.xml
index c4655a2b3d92e7a6af05dda7fda2f0b3a5be41bc..f864795e6955edcaff6ab7f3d059e5e886b4fd45 100644
--- a/addons/website_slides/views/website_slides.xml
+++ b/addons/website_slides/views/website_slides.xml
@@ -15,10 +15,10 @@
 <!-- Tools template: share on social networkds -->
 <template id='slides_share' name="Slides Media Share">
     <div class="form-group">
-        <a t-attf-href="https://www.facebook.com/sharer/sharer.php?u=#{slide.website_url}" class="o_slides_social_share" social-key="facebook"><i class="fa fa-facebook-square fa-2x"/></a>
-        <a t-attf-href="https://twitter.com/intent/tweet?text=#{slide.name}&amp;url=#{slide.website_url}" class="o_slides_social_share"  social-key="twitter"><i class="fa fa-twitter fa-2x"/></a>
-        <a t-attf-href="http://www.linkedin.com/shareArticle?mini=true&amp;url=#{slide.website_url}&amp;title=#{slide.name}&amp;" social-key="linkedin" class="o_slides_social_share"><i class="fa fa-linkedin fa-2x"/></a>
-        <a t-attf-href="https://plus.google.com/share?url=#{slide.website_url}" class="o_slides_social_share" social-key="gplus"><i class="fa fa-google-plus-square fa-2x"/></a>
+        <a t-attf-href="https://www.facebook.com/sharer/sharer.php?u=#{slide.website_url}" class="o_slides_social_share" social-key="facebook" aria-label="Share on Facebook" title="Share on Facebook"><i class="fa fa-facebook-square fa-2x"/></a>
+        <a t-attf-href="https://twitter.com/intent/tweet?text=#{slide.name}&amp;url=#{slide.website_url}" class="o_slides_social_share"  social-key="twitter" aria-label="Share on Twitter" title="Share on Twitter"><i class="fa fa-twitter fa-2x"/></a>
+        <a t-attf-href="http://www.linkedin.com/shareArticle?mini=true&amp;url=#{slide.website_url}&amp;title=#{slide.name}&amp;" social-key="linkedin" class="o_slides_social_share" aria-label="Share on LinkedIn" title="Share on LinkedIn"><i class="fa fa-linkedin fa-2x"/></a>
+        <a t-attf-href="https://plus.google.com/share?url=#{slide.website_url}" class="o_slides_social_share" social-key="gplus" aria-label="Share on Google Plus" title="Share on Google Plus"><i class="fa fa-google-plus-square fa-2x"/></a>
     </div>
 </template>
 
@@ -34,8 +34,8 @@
                         <div class="well well-sm">
                             <div>
                                 <a t-attf-href="/slides/#{slug(channel)}">
-                                    <img t-if="channel.promoted_slide_id" t-attf-src="/web/image/slide.slide/#{channel.promoted_slide_id.id}/image_medium" class="img-responsive oe_slides_channel_thumbnail"/>
-                                    <img t-if="not channel.promoted_slide_id" src="/website_slides/static/src/img/channel-default.jpg" class="img-responsive oe_slides_opacity"/>
+                                    <img t-if="channel.promoted_slide_id" t-attf-src="/web/image/slide.slide/#{channel.promoted_slide_id.id}/image_medium" class="img-responsive oe_slides_channel_thumbnail" alt="Promoted slide"/>
+                                    <img t-if="not channel.promoted_slide_id" src="/website_slides/static/src/img/channel-default.jpg" class="img-responsive oe_slides_opacity" alt="Channel without promoted slide"/>
                                 </a>
                             </div>
                             <div>
@@ -99,7 +99,7 @@
                         </t>
                         <!-- Public user has not right to create/write on slide -->
                         <t t-if="channel.can_upload and not is_public_user">
-                            <a class="btn btn-primary oe_slide_js_upload" title="Upload Presentation" t-attf-channel_id="#{channel.id}">
+                            <a role="button" class="btn btn-primary oe_slide_js_upload" title="Upload Presentation" t-attf-channel_id="#{channel.id}" aria-label="Upload Presentation">
                                 <i class="fa fa-cloud-upload"></i> Upload
                             </a>
                         </t>
@@ -111,7 +111,7 @@
                         <div class="input-group">
                             <input type="text" class="form-control" name="search" t-attf-placeholder="Search in #{channel.name}" t-att-value="search"/>
                             <span class="input-group-btn">
-                                <button class="btn btn-primary" type="submit">
+                                <button class="btn btn-primary" type="submit" aria-label="Search" title="Search">
                                     <i class="fa fa-search"></i>
                                 </button>
                             </span>
@@ -122,9 +122,9 @@
             <div class="row" t-if="not search">
                 <!-- Navigation -->
                 <div class="col-md-8 col-sm-12 col-xs-12">
-                    <ul class="nav nav-tabs nav-tabs-border">
+                    <ul class="nav nav-tabs nav-tabs-border" role="tablist">
                         <li t-attf-class="#{not slide_type and 'active' ''}">
-                            <a  t-attf-href="/slides/#{slug(channel)}#{category and '/category/' + slug(category) or ''}"> <i class="fa fa-home"></i> Home</a>
+                            <a  t-attf-href="/slides/#{slug(channel)}#{category and '/category/' + slug(category) or ''}"> <span class="fa fa-home"> Home</span></a>
                         </li>
                         <li t-if="header_object.nbr_presentations" t-attf-class="#{slide_type == 'presentation' and 'active' ''}">
                             <a t-attf-href="/slides/#{slug(channel)}#{category and '/category/' + slug(category) or ''}/presentation">
@@ -189,7 +189,7 @@
             </t>
             <section t-if="not channel.promoted_slide_id and not tag and not slide_type and not search and not is_public_user and not category and display_channel_settings" class="wrap mt16 mb0" groups="website.group_website_designer">
                 <div class="container">
-                    <div class="alert alert-danger alert-dismissable mb0">
+                    <div class="alert alert-danger alert-dismissable mb0" role="alert">
                         <button type="button" class="close o_slides_hide_channel_settings" t-att-data-channel-id="channel.id" data-dismiss="alert">x</button>
                         <p>
                             Review your channel settings to promote your most viewed or recent published presentation
@@ -205,7 +205,7 @@
                     <div class="row">
                         <div class="col-md-5 mt16 mb16">
                             <a t-attf-href="/slides/slide/#{slug(channel.promoted_slide_id)}">
-                                <img t-attf-src="/web/image/slide.slide/#{channel.promoted_slide_id.id}/image_medium" class="img-responsive shadow oe_slides_promote_image"/>
+                                <img t-attf-src="/web/image/slide.slide/#{channel.promoted_slide_id.id}/image_medium" class="img-responsive shadow oe_slides_promote_image" alt="Promoted slide"/>
                             </a>
                         </div>
                         <div class="col-md-7 mt16 mb16">
@@ -244,7 +244,7 @@
                                 </p>
                                 <p>
                                     <!-- Public user has not right to create/write on slide-->
-                                    <a t-if="can_upload and not is_public_user" class="btn btn-primary oe_slide_js_upload" t-attf-channel_id="#{channel.id}">
+                                    <a role="button" t-if="can_upload and not is_public_user" class="btn btn-primary oe_slide_js_upload" t-attf-channel_id="#{channel.id}" aria-label="Upload Presentation" title="Upload Presentation">
                                         <i class="fa fa-cloud-upload"></i> Upload
                                     </a>
                                 </p>
@@ -252,7 +252,7 @@
                         </div>
 
                         <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" t-if="slide_type or category or tag">
-                            <div class="alert alert-success mb0" role="alert" t-if="tag">
+                            <div class="alert alert-success mb0" role="status" t-if="tag">
                                 Results for <strong t-esc="tag.name"/>
                             </div>
                             <t t-call="website_slides.slides_grid_view"/>
@@ -272,7 +272,7 @@
                                             <t t-esc="category['name']"/>
                                         </span>
                                         <a t-attf-href="/slides/#{slug(channel)}/category/#{category['id']}" class="pull-right" t-if="category['total'] - 4 > 0 and category['id']">
-                                            <i class="fa fa-arrow-right"></i> See all
+                                            <span class="fa fa-arrow-right"> See all</span>
                                         </a>
                                     </div>
                                 </div>
@@ -301,7 +301,7 @@
                     </div>
                 </div>
                 <div class="container mt16" t-if="slides">
-                    <div class="alert alert-success mb0" role="alert">
+                    <div class="alert alert-success mb0" role="status">
                         <b t-esc="len(slides)"/> results found for the given criteria <b><t t-esc="search"/></b>
                     </div>
                     <div class="row mt0">
@@ -321,14 +321,15 @@
     <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12 mt16 mb16" t-foreach="slides" t-as="slide">
         <div class="well well-sm oe_slides_thumbnail_container">
             <a t-attf-href="/slides/slide/#{slug(slide)}">
-                <img t-attf-src="/web/image/slide.slide/#{slide.id}/image_thumb" class="img-responsive img-thumbnail oe_slides_grid_thumbnail"/>
+                <img t-attf-src="/web/image/slide.slide/#{slide.id}/image_thumb" class="img-responsive img-thumbnail oe_slides_grid_thumbnail" alt="slide.name"/>
             </a>
             <span t-if="not slide.website_published" class="label label-danger" style="position: absolute;right: 20px;top: 7px;">Unpublished</span>
             <a t-if="not is_public_user and slide.website_published and slide.channel_id.promote_strategy == 'custom' and slide.channel_id.promoted_slide_id.id != slide.id"
                 groups="base.group_user"
                 t-attf-href="/slides/slide/#{slide.id}/promote"
                 style="position: absolute;right: 20px;top: 7px;"
-                t-attf-title="Promote this #{slide.slide_type}">
+                t-attf-title="Promote this #{slide.slide_type}"
+                t-attf-aria-label="Promote this #{slide.slide_type}">
                 <span class="fa-stack fa-lg">
                   <i class="fa fa-square fa-stack-2x oe_slides_opacity"></i>
                   <i class="fa fa-bullhorn fa-stack-1x fa-inverse"></i>
@@ -375,8 +376,8 @@
             <div class="row">
                 <div class="col-lg-8 col-md-8 col-sm-12 col-xs-12">
                     <div t-if="private" class="mb16">
-                        <h3 class="alert alert-danger">
-                            <i class="fa fa-exclamation-triangle"></i> This <t t-esc="slide.slide_type"/> is private
+                        <h3 class="alert alert-danger" role="alert">
+                            <i class="fa fa-exclamation-triangle" role="img" aria-label="Attention" title="Attention"></i> This <t t-esc="slide.slide_type"/> is private
                         </h3>
                         <t t-if="slide.channel_id.access_error_msg">
                             <div t-field="slide.channel_id.access_error_msg" class="well oe_no_empty"/>
@@ -385,7 +386,7 @@
 
                     <div t-if="not private">
                             <t t-if="slide.datas and slide.slide_type == 'infographic'">
-                                <img t-attf-src="/web/image/slide.slide/#{slide.id}/datas" class="img-responsive" style="width:100%"/>
+                                <img t-attf-src="/web/image/slide.slide/#{slide.id}/datas" class="img-responsive" style="width:100%" alt="Slide image"/>
                             </t>
                         <div t-if="slide.slide_type in ('presentation', 'document')" class="embed-responsive embed-responsive-4by3 embed-responsive-item mb8">
                             <t t-raw="slide.embed_code"/>
@@ -408,7 +409,7 @@
                         <div class="row">
                             <div class="col-sm-8 col-xs-12">
                                 <div class="pull-left">
-                                    <a t-attf-href="/slides/#{slug(slide.channel_id)}">
+                                    <a t-attf-href="/slides/#{slug(slide.channel_id)}" t-attf-title="Channel #{slide.channel_id.name}" t-attf-aria-label="Channel #{slide.channel_id.name}">
                                         <i class="fa fa-circle-o fa-5x" style="color: #875A7B;font-weight: bold;"></i>
                                     </a>
                                 </div>
@@ -456,9 +457,8 @@
                                             t-att-data-slide-id="slide.id"
                                             tabindex="0"
                                             data-toggle="popover">
-                                            <i class="fa fa-thumbs-up fa-1x">
-                                                <t t-esc="slide.likes"/>
-                                            </i>
+                                            <i class="fa fa-thumbs-up fa-1x" role="img" aria-label="Likes" title="Likes"/>
+                                            <t t-esc="slide.likes"/>
                                         </span>
                                         <span
                                             class="oe_slide_js_unlike"
@@ -468,9 +468,8 @@
                                             t-att-data-slide-id="slide.id"
                                             tabindex="0"
                                             data-toggle="popover">
-                                            <i class="fa fa-thumbs-down fa-1x">
-                                                <t t-esc="slide.dislikes"/>
-                                            </i>
+                                            <i class="fa fa-thumbs-down fa-1x" role="img" aria-label="Dislikes" title="Dislikes"/>
+                                            <t t-esc="slide.dislikes"/>
                                         </span>
                                     </div>
                                 </div>
@@ -479,36 +478,36 @@
                         <div class="mt8 mb32">
                             <ul class="nav nav-tabs" role="tablist">
                                 <li t-att-class="not comments and 'active' or None">
-                                    <a href="#about" role="tab" data-toggle="tab">
-                                        <i class="fa fa-home"></i> About
+                                    <a aria-controls="about" href="#about" role="tab" data-toggle="tab">
+                                        <span class="fa fa-home"> About</span>
                                     </a>
                                 </li>
                                 <li>
-                                    <a href="#share" role="tab" data-toggle="tab">
-                                        <i class="fa fa-share-alt"></i> Share
+                                    <a aria-controls="share" href="#share" role="tab" data-toggle="tab">
+                                        <span class="fa fa-share-alt"> Share</span>
                                     </a>
                                 </li>
                                 <li t-att-class="comments and 'active' or None">
-                                    <a href="#discuss" role="tab" data-toggle="tab">
-                                        <i class="fa fa-comments-o"></i> Comments
+                                    <a aria-controls="discuss" href="#discuss" role="tab" data-toggle="tab">
+                                        <span class="fa fa-comments-o"> Comments</span>
                                     </a>
                                 </li>
                                 <li>
-                                    <a href="#transcript" role="tab" data-toggle="tab">
-                                        <i class="fa fa-align-justify"></i> Transcript
+                                    <a aria-controls="transcript" href="#transcript" role="tab" data-toggle="tab">
+                                        <span class="fa fa-align-justify"> Transcript</span>
                                     </a>
                                 </li>
                                 <li>
-                                    <a href="#statistic" role="tab" data-toggle="tab">
-                                        <i class="fa fa-bar-chart"></i> Statistics
+                                    <a aria-controls="statistic" href="#statistic" role="tab" data-toggle="tab">
+                                        <span class="fa fa-bar-chart"> Statistics</span>
                                     </a>
                                 </li>
                             </ul>
                             <div class="tab-content" style="padding: 20px 5px 5px 5px; word-wrap: break-word;">
-                                <div t-att-class="not comments and 'tab-pane fade active in' or 'tab-pane fade'" id="about">
+                                <div role="tabpanel" t-att-class="not comments and 'tab-pane fade active in' or 'tab-pane fade'" id="about">
                                     <div t-field="slide.description"/>
                                 </div>
-                                <div class="tab-pane fade" t-if="slide.website_published" id="share">
+                                <div role="tabpanel" class="tab-pane fade" t-if="slide.website_published" id="share">
                                     <t t-call="website_slides.slide_social_media">
                                         <t t-set="slide" t-value="slide"/>
                                     </t>
@@ -521,39 +520,39 @@
                                         </t>
                                     </t>
                                 </div>
-                                <div class="tab-pane fade" t-if="not slide.website_published" id="share">
-                                    <h4><i class="fa fa-info-circle"></i>
+                                <div role="tabpanel" class="tab-pane fade" t-if="not slide.website_published" id="share">
+                                    <h4 class="fa fa-info-circle">
                                         The social sharing module will be unlocked when a moderator will allow your publication.
                                     </h4>
                                 </div>
-                                <div t-att-class="comments and 'tab-pane fade active in' or 'tab-pane fade'" id="discuss">
+                                <div role="tabpanel" t-att-class="comments and 'tab-pane fade active in' or 'tab-pane fade'" id="discuss">
                                     <t t-call="portal.message_thread">
                                         <t t-set="object" t-value="slide"/>
                                     </t>
                                 </div>
-                                <div class="tab-pane fade oe_slides_transcript" id="transcript">
+                                <div role="tabpanel" class="tab-pane fade oe_slides_transcript" id="transcript">
                                     <t t-if="slide.index_content">
                                         <t t-foreach="slide.index_content.split('\n')" t-as="line">
                                             <p t-esc="line"></p>
                                         </t>
                                     </t>
                                 </div>
-                                <div class="tab-pane fade" id="statistic" t-att-slide-url="slide.website_url">
+                                <div role="tabpanel" class="tab-pane fade" id="statistic" t-att-slide-url="slide.website_url">
                                     <div class="row">
                                         <div class="col-md-4">
                                             <h4 class="mt0 oe_slides_statistics_title">Views</h4>
                                             <ul class="list-group">
                                                 <li class="list-group-item">
                                                     <span class="badge"><t t-esc="slide.total_views"/></span>
-                                                    <i class="fa fa-play"></i> Total Views
+                                                    <span class="fa fa-play"> Total Views</span>
                                                 </li>
                                                 <li class="list-group-item">
                                                     <span class="badge"><t t-esc="slide.slide_views"/></span>
-                                                    <i class="fa fa-circle-o"></i> Website Views
+                                                    <span class="fa fa-circle-o"> Website Views</span>
                                                 </li>
                                                 <li class="list-group-item" t-if="not slide.document_id">
                                                     <span class="badge"><t t-esc="slide.embed_views"/></span>
-                                                    <i class="fa fa-code"></i> Embedded Views
+                                                    <span class="fa fa-code"> Embedded Views</span>
                                                 </li>
                                             </ul>
                                         </div>
@@ -563,19 +562,19 @@
                                             <ul class="list-group">
                                                 <li class="list-group-item">
                                                     <span class="badge" id="total-share">0</span>
-                                                    <i class="fa fa-share-alt"></i> Social Shares
+                                                    <span class="fa fa-share-alt"> Social Shares</span>
                                                 </li>
                                                 <li class="list-group-item">
                                                     <span class="badge"><t t-esc="slide.likes"/></span>
-                                                    <i class="fa fa-thumbs-up"></i> Likes
+                                                    <span class="fa fa-thumbs-up"> Likes</span>
                                                 </li>
                                                 <li class="list-group-item">
                                                     <span class="badge"><t t-esc="slide.dislikes"/></span>
-                                                    <i class="fa fa-thumbs-down"></i> Dislikes
+                                                    <span class="fa fa-thumbs-down"> Dislikes</span>
                                                 </li>
                                                 <li class="list-group-item">
                                                     <span class="badge"><t t-esc="len(slide.website_message_ids)"/></span>
-                                                    <i class="fa fa-comments-o"></i> Comments
+                                                    <span class="fa fa-comments-o"> Comments</span>
                                                 </li>
                                             </ul>
                                         </div>
@@ -585,19 +584,19 @@
                                             <ul class="list-group">
                                                 <li class="list-group-item">
                                                     <span class="badge" id="facebook-badge">0</span>
-                                                    <i class="fa fa-facebook-square"></i> Facebook
+                                                    <span class="fa fa-facebook-square"> Facebook</span>
                                                 </li>
                                                 <li class="list-group-item">
                                                     <span class="badge" id="twitter-badge">0</span>
-                                                    <i class="fa fa-twitter-square"></i> Twitter
+                                                    <span class="fa fa-twitter-square"> Twitter</span>
                                                 </li>
                                                 <li class="list-group-item">
                                                     <span class="badge" id="linkedin-badge">0</span>
-                                                    <i class="fa fa-linkedin-square"></i> LinkedIn
+                                                    <span class="fa fa-linkedin-square"> LinkedIn</span>
                                                 </li>
                                                 <li class="list-group-item">
                                                     <span class="badge" id="google-badge">0</span>
-                                                    <i class="fa fa-google-plus-square"></i> Google+
+                                                    <span class="fa fa-google-plus-square"> Google+</span>
                                                 </li>
                                             </ul>
                                         </div>
@@ -624,11 +623,11 @@
                 </div>
                 <div class="col-lg-4 col-md-4 col-sm-12 col-xs-12">
                     <ul class="nav nav-tabs" role="tablist">
-                        <li class="active"><a href="#related" data-toggle="tab">Related</a></li>
-                        <li><a href="#most_viewed" data-toggle="tab">Most Viewed</a></li>
+                        <li class="active"><a aria-controls="related" href="#related" data-toggle="tab" role="tab">Related</a></li>
+                        <li><a aria-controls="most_viewed" href="#most_viewed" data-toggle="tab" role="tab">Most Viewed</a></li>
                     </ul>
                     <div class="tab-content">
-                        <div id="related" class="tab-pane active mt4">
+                        <div role="tabpanel" id="related" class="tab-pane active mt4">
                             <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 panel panel-default">
                                 <ul class="media-list panel-body">
                                     <t t-set="related_slides_list" t-value="list(related_slides)"/>
@@ -641,7 +640,7 @@
                                 </ul>
                             </div>
                         </div>
-                        <div id="most_viewed" class="tab-pane  mt4">
+                        <div role="tabpanel" id="most_viewed" class="tab-pane  mt4">
                             <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 panel panel-default">
                                 <ul class="media-list panel-body">
                                     <t t-set="most_viewed_slides_list" t-value="list(most_viewed_slides)"/>
@@ -665,7 +664,7 @@
 <template id="related_slides" name="Related Slide">
     <li class="media">
         <a class="media-left pull-left" t-attf-href="/slides/slide/#{slug(slide)}">
-                <img class="media-object oe_slides_apart_small" t-attf-src="/web/image/slide.slide/#{slide.id}/image_thumb"/>
+                <img class="media-object oe_slides_apart_small" t-attf-src="/web/image/slide.slide/#{slide.id}/image_thumb" alt="slide.name"/>
         </a>
         <div class="media-body">
             <a t-attf-href="/slides/slide/#{slug(slide)}"><h5 class="media-heading" t-esc="slide.name"/></a>
@@ -699,8 +698,7 @@
                         data-loading-text="Sending..."
                         t-attf-data-slide-id="#{slide.id}"
                         style="border-top-right-radius: 4px;border-bottom-right-radius: 4px;">
-                        <i class="fa fa-envelope-o"></i>
-                        Send Email
+                        <span class="fa fa-envelope-o">Send Email</span>
                     </button>
                 </span>
             </div>
diff --git a/addons/website_slides/views/website_slides_backend.xml b/addons/website_slides/views/website_slides_backend.xml
index 14457005244852d108dcfa9dc658d5a9c54a985f..db5672c095e71093718b17947d128d6b97fe73b8 100644
--- a/addons/website_slides/views/website_slides_backend.xml
+++ b/addons/website_slides/views/website_slides_backend.xml
@@ -256,7 +256,7 @@
                                     <field name="group_ids" widget="many2many_tags" attrs="{'invisible':[('visibility', '=', 'public')], 'required':[('visibility', 'in',('private', 'partial'))]}"/>
                                 </group>
                                 <group attrs="{'invisible':[('visibility','in',('public'))]}" colspan="4">
-                                        <label string="Error Message"/>
+                                        <label for="access_error_msg" string="Error Message"/>
                                         <field name="access_error_msg" colspan="4" nolabel="1"/>
                                 </group>
                             </page>
diff --git a/addons/website_slides/views/website_slides_embed.xml b/addons/website_slides/views/website_slides_embed.xml
index bcffd50db43fa296cc1b70c71a40d1fac75a87d0..89f64d63f93bf189acc781743823bf88b7ceb7ac 100644
--- a/addons/website_slides/views/website_slides_embed.xml
+++ b/addons/website_slides/views/website_slides_embed.xml
@@ -27,7 +27,7 @@
                 <body t-if="private" style="position: inherit;">
                     <title><t t-esc="slide.name"/></title>
                     <div class="slide-private-view">
-                        <h3 style="border-bottom: 1px solid !important;padding-bottom: 10px;"><i class="fa fa-exclamation-triangle"></i> This <t t-esc="slide.slide_type"/> is private.</h3>
+                        <h3 style="border-bottom: 1px solid !important;padding-bottom: 10px;"><i class="fa fa-exclamation-triangle" role="img" aria-label="Attention" title="Attention"></i> This <t t-esc="slide.slide_type"/> is private.</h3>
                         <div t-field="slide.channel_id.access_error_msg" />
                     </div>
                 </body>
@@ -45,13 +45,13 @@
                                     </div>
                                 </div>
                                 <div class="col-lg-1 col-md-1 col-sm-2 col-xs-2 text-right">
-                                    <b class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_share"><i class="fa fa-share-alt"></i> Share</b>
+                                    <b class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_share"><span class="fa fa-share-alt"> Share</span></b>
                                 </div>
                                 <div class="col-lg-1 col-md-1 col-sm-2 col-xs-2 text-right">
-                                    <b class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_email"><i class="fa fa-envelope"></i> Email</b>
+                                    <b class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_email"><span class="fa fa-envelope"> Email</span></b>
                                 </div>
                                 <div class="col-lg-1 col-md-1 col-sm-2 col-xs-2 text-right">
-                                    <b class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_embed"><i class="fa fa-code"></i> Embed</b>
+                                    <b class="oe_slide_js_embed_option_link" data-slide-option-id="#slide_embed"><span class="fa fa-code"> Embed</span></b>
                                 </div>
                             </div>
                         </div>
@@ -90,15 +90,15 @@
                         </div>
                         <t t-if="slide.slide_type in ('presentation', 'document')">
                             <div id="PDFViewerLoader" class="oe_slides_loader">
-                                <img class="img-responsive" t-attf-src="/web/image/slide.slide/#{slide.id}/image_medium" style="margin:auto;height:100%"/>
+                                <img class="img-responsive" t-attf-src="/web/image/slide.slide/#{slide.id}/image_medium" style="margin:auto;height:100%" alt="suggest_slide.name"/>
                                 <h4 class="text-center">
-                                    <i class="fa fa-spinner fa-spin"></i> Loading ...
+                                    <span class="fa fa-spinner fa-spin"> Loading ...</span>
                                 </h4>
                             </div>
                             <canvas id="PDFViewerCanvas" class="img-responsive" style="margin:auto;height:100%;display:none;"></canvas>
                         </t>
                         <t t-if="slide.slide_type in ('infographic')">
-                            <img t-attf-src="/web/image/slide.slide/#{slide.id}/datas" class="img-responsive" style="width:100%"/>
+                            <img t-attf-src="/web/image/slide.slide/#{slide.id}/datas" class="img-responsive" style="width:100%" alt="Slide image"/>
                         </t>
                     </div>
                     <!-- Fixed bottom navbar -->
@@ -111,32 +111,32 @@
                                 <div class="col-lg-8 col-md-8 col-sm-8 col-xs-8 hide o_slide_navigation_buttons">
                                     <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4 text-center"></div>
                                     <div class="col-lg-1 col-md-1 col-sm-1 col-xs-1 text-center">
-                                        <span id="first" title="First slide">
+                                        <span id="first" title="First slide" role="img" aria-label="First slide">
                                             <i class="fa fa-step-backward fa-2x"></i>
                                         </span>
                                     </div>
                                     <div class="col-lg-1 col-md-1 col-sm-1 col-xs-1 text-center">
-                                        <span id="previous" title="Previous slide" role="button">
+                                        <a id="previous" title="Previous slide" aria-label="Previous slide"  role="button">
                                             <i class="fa fa-arrow-circle-left fa-2x"></i>
-                                        </span>
+                                        </a>
                                     </div>
                                     <div class="col-lg-1 col-md-1 col-sm-1 col-xs-1 text-center">
-                                        <span id="next" title="Next slide" role="button">
+                                        <a id="next" title="Next slide" aria-label="Next slide" role="button">
                                             <i class="fa fa-arrow-circle-right fa-2x"></i>
-                                        </span>
+                                        </a>
                                     </div>
                                     <div class="col-lg-1 col-md-1 col-sm-1 col-xs-1 text-center">
-                                        <span id="last" title="Last slide" role="button">
+                                        <a id="last" title="Last slide" aria-label="Last slide" role="button">
                                             <i class="fa fa-step-forward fa-2x"></i>
-                                        </span>
+                                        </a>
                                     </div>
                                     <div class="col-lg-4 col-md-4 col-sm-4 col-xs-4 text-center"></div>
                                 </div>
                                 <div class="col-lg-2 col-md-2 col-sm-2 col-xs-2 pull-right text-right">
                                     <a t-if="slide.download_security and not is_embedded" target="_top" t-attf-href="/slides/slide/#{slug(slide)}/download" title="Download" id="download">
-                                        <i class="fa fa-download fa-2x"></i>
+                                        <i class="fa fa-download fa-2x" role="img" aria-label="Download"></i>
                                     </a>
-                                    <span id="fullscreen" title="View fullscreen">
+                                    <span id="fullscreen" title="View fullscreen" role="img" aria-label="Fullscreen">
                                         <i class="fa fa-arrows-alt fa-2x"></i>
                                     </span>
                                 </div>
@@ -161,7 +161,7 @@
                 <body>
                     <title><t t-esc="slide.name"/></title>
                     <div class="slide-private-view">
-                        <h3 style="border-bottom: 1px solid !important;padding-bottom: 10px;"><i class="fa fa-exclamation-triangle"></i> This <t t-esc="slide.slide_type"/> is private.</h3>
+                        <h3 style="border-bottom: 1px solid !important;padding-bottom: 10px;"><i class="fa fa-exclamation-triangle" role="img" aria-label="Attention" title="Attention"></i> This <t t-esc="slide.slide_type"/> is private.</h3>
                         <div t-field="slide.channel_id.access_error_msg" />
                     </div>
                 </body>
diff --git a/addons/website_theme_install/views/views.xml b/addons/website_theme_install/views/views.xml
index f080ee9600550b1a101cd123854fa8de9a65d358..243e00f01a4a82cb8a9540ce30f5b0d9b393cd30 100644
--- a/addons/website_theme_install/views/views.xml
+++ b/addons/website_theme_install/views/views.xml
@@ -21,17 +21,17 @@
 
                         <div class="o_theme_preview_top bg-white mb4">
                             <div class="o_browser_bar"/>
-                            <i states="installed" class="text-center bg-white text-success img-circle fa fa-check-circle"/>
+                            <i states="installed" class="text-center bg-white text-success img-circle fa fa-check-circle" role="img" aria-label="Installed" title="Installed"/>
                             <div t-attf-class="bg-gray-lighter #{has_screenshot? 'o_theme_screenshot' : (has_image ? 'o_theme_cover' : 'o_theme_logo')}" t-attf-style="background-image: url(#{image_url});"/>
                             <div states="uninstalled" class="o_button_area">
                                 <button type="object" name="button_choose_theme" class="btn btn-primary">Use this theme</button>
                                 <hr t-if="record.url.value"/>
-                                <a t-if="record.url.value" class="btn btn-default" t-att-href="record.url.value" target="_blank">Live Preview</a>
+                                <a role="button" t-if="record.url.value" class="btn btn-default" t-att-href="record.url.value" target="_blank">Live Preview</a>
                             </div>
                         </div>
                         <div class="o_theme_preview_bottom clearfix">
                             <h5 t-if="record.display_name.value" class="text-uppercase pull-left">
-                                <img class="pull-left mr4"  t-att-src="record.icon.value" height="16" width="16"/>
+                                <img class="pull-left mr4"  t-att-src="record.icon.value" height="16" width="16" alt="Theme preview"/>
                                 <b><t t-esc="record.display_name.value.replace(('Theme'), '').replace(('theme'), '')"/></b>
                             </h5>
                             <h6 t-if="record.category_id.value" class="text-muted pull-right">
@@ -91,7 +91,7 @@ action = {
 
     <!-- Add link to theme install in default customize modal -->
     <template id="customize_modal" inherit_id="website.theme_customize" priority="1">
-        <xpath expr="//div[hasclass('modal-header')]" position="inside">
+        <xpath expr='//*[@role="dialog"]//header' position="inside">
             <a href="/web#action=website_theme_install.theme_install_kanban_action">See themes here</a>
         </xpath>
     </template>
diff --git a/addons/website_twitter/static/src/xml/website.twitter.xml b/addons/website_twitter/static/src/xml/website.twitter.xml
index 1a18831e298c21a80f8618623d986e531f5b519f..8b8ace63595cf04f86c57e9951ef522c6fa09081 100644
--- a/addons/website_twitter/static/src/xml/website.twitter.xml
+++ b/addons/website_twitter/static/src/xml/website.twitter.xml
@@ -3,7 +3,7 @@
     <t t-name="website.Twitter.Tweet">
         <div class="tweet" t-attf-data-url="http://twitter.com/#{tweet.user.screen_name}/status/#{tweet.id_str}" t-attf-data-tweet-id="#{tweet.id_str}">
             <div class="left">
-                <img t-att-src="tweet.user.profile_image_url_https"/>
+                <img t-att-src="tweet.user.profile_image_url_https" alt="Twitter's user"/>
             </div>
             <div class="right">
                 <div class="top">
@@ -34,10 +34,10 @@
     </t>
     <t t-name="website.Twitter.Error">
         <div class="container" contenteditable="false">
-            <div class="alert alert-warning">
+            <div class="alert alert-warning" role="alert">
                 <t t-esc="data.error"/>
                 <t t-if='!data.nodata'>
-                    <a class="lnk_configure" href="/web#action=website.action_website_configuration"><i class="fa fa-plus-circle"/> Twitter Configuration</a>
+                    <a class="lnk_configure fa fa-plus-circle" href="/web#action=website.action_website_configuration"> Twitter Configuration</a>
                 </t>
             </div>
         </div>
diff --git a/addons/website_twitter/views/res_config_settings_views.xml b/addons/website_twitter/views/res_config_settings_views.xml
index e33043ab3652c90203ea0718a2d531d29f5ee729..3ea04ac6e5f6fcfee4ff2ff6be1e9ec3b5ce0f61 100644
--- a/addons/website_twitter/views/res_config_settings_views.xml
+++ b/addons/website_twitter/views/res_config_settings_views.xml
@@ -8,7 +8,7 @@
             <div id="languages_setting" position="after">
                 <div class="col-xs-12 col-md-6 o_setting_box" id="twitter_roller_install_setting">
                     <div class="o_setting_right_pane">
-                        <label string="Twitter Roller"/>
+                        <span class="o_form_label">Twitter Roller</span>
                         <div class="text-muted">
                             Twitter API Credentials
                         </div>
@@ -26,7 +26,7 @@
                                 <field name="twitter_screen_name" class="oe_inline"/>
                             </div>
                             <div>
-                                <a data-toggle="modal" class="fa fa-arrow-right" href="#" data-target="#twitter_tutorial">
+                                <a data-toggle="modal" class="fa fa-arrow-right" href="#" data-target="#twitter_tutorial" aria-label="Twitter tutorial">
                                     Tutorial
                                 </a>
                             </div>
diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py
index 02f48a00c86105d0c391cd8dcbc2a5a44d8df92a..d813af46efa7a0f2778b5f26dda08ff50859aafb 100644
--- a/odoo/addons/base/models/ir_ui_view.py
+++ b/odoo/addons/base/models/ir_ui_view.py
@@ -338,8 +338,11 @@ actual arch.
                     # A <data> element is a wrapper for multiple root nodes
                     view_docs = view_docs[0]
                 for view_arch in view_docs:
-                    if not valid_view(view_arch):
-                        raise ValidationError(_('Invalid view definition'))
+                    check = valid_view(view_arch)
+                    if not check:
+                        raise ValidationError(_('Invalid view %s definition in %s') % (view.name, view.arch_fs))
+                    if check == "Warning":
+                        _logger.warning(_('Invalid view %s definition in %s \n%s'), view.name, view.arch_fs, view.arch)
         return True
 
     @api.constrains('type', 'groups_id')
diff --git a/odoo/addons/base/rng/common.rng b/odoo/addons/base/rng/common.rng
index 78002b08999b1d9815ecae068749863a338c2e47..cd6bb78a073c5034c5997d315b1b4929350143e1 100644
--- a/odoo/addons/base/rng/common.rng
+++ b/odoo/addons/base/rng/common.rng
@@ -335,6 +335,9 @@
             <rng:optional><rng:attribute name="help"/></rng:optional>
             <rng:optional><rng:attribute name="class"/></rng:optional>
             <rng:optional><rng:attribute name="default_focus"/></rng:optional>
+            <rng:optional><rng:attribute name="title"/></rng:optional>
+            <rng:optional><rng:attribute name="aria-label"/></rng:optional>
+            <rng:optional><rng:attribute name="aria-pressed"/></rng:optional>
             <rng:zeroOrMore>
                 <rng:choice>
                     <rng:ref name="field" />
diff --git a/odoo/addons/base/tests/test_view_validation.py b/odoo/addons/base/tests/test_view_validation.py
index 524a53609e409b27162bb42c337e3e136618eca8..c3ac8020c271ae1959cefe873bedb820ee48643f 100644
--- a/odoo/addons/base/tests/test_view_validation.py
+++ b/odoo/addons/base/tests/test_view_validation.py
@@ -9,29 +9,45 @@ from odoo.tests.common import tagged
 from odoo.tools.view_validation import (
     valid_page_in_book, valid_att_in_form, valid_type_in_colspan,
     valid_type_in_col, valid_att_in_field, valid_att_in_label,
-    valid_field_in_graph, valid_field_in_tree,
+    valid_field_in_graph, valid_field_in_tree, valid_alternative_image_text,
+    valid_alternative_icon_text, valid_title_icon, valid_simili_button,
+    valid_simili_progressbar, valid_dialog, valid_simili_dropdown,
+    valid_focusable_button, valid_prohibited_none_role, valid_simili_tabpanel,
+    valid_simili_tab, valid_simili_tablist, valid_alerts
 )
 
 invalid_form = etree.parse(io.BytesIO(b'''\
 <form>
     <label></label>
+    <ul class="dropdown-menu"><li/><li/></ul>
+    <div role="presentation"/>
     <group>
         <div>
             <page></page>
-            <label colspan="True"></label>
+            <label colspan="True" string=""></label>
             <field></field>
         </div>
     </group>
     <notebook>
         <page>
             <group col="Two">
-            <div>
-                <label></label>
-                <field colspan="Five"> </field>
+                <div>
+                    <div class="o_progressbar">100%</div>
+                    <label string=""></label>
+                    <img/>
+                    <span class="fa fa-warning"/>
+                    <field colspan="Five"> </field>
                 </div>
             </group>
+            <a class="btn"/>
+            <div class="btn"/>
+            <div class="tab-pane"/>
         </page>
     </notebook>
+    <div class="modal"/>
+    <a data-toggle="tab"/>
+    <div class="nav-tabs"/>
+    <div class="alert alert-success"/>
 </form>
 ''')).getroot()
 
@@ -39,19 +55,36 @@ valid_form = etree.parse(io.BytesIO(b'''\
 <form string="">
     <field name=""></field>
     <field name=""></field>
+    <ul class="dropdown-menu" role="menu"></ul>
     <notebook>
         <page>
             <field name=""></field>
-            <label string=""></label>
+            <label for="" string=""></label>
             <field name=""></field>
         </page>
         <page>
             <group colspan="5" col="2">
+                <div class="o_progressbar" role="progressbar" aria-valuenow="14" aria-valuemin="0" aria-valuemax="100">14%</div>
                 <label for=""></label>
-                <label string="" colspan="5"></label>
+                <label for="" string="" colspan="5"></label>
+                <img alt="Test image"/>
+                <span class="fa fa-success" aria-label="Test span" title="Test span"/>
+                <a class="fa fa-success"><span aria-label="test" title="test"/></a>
+                <a class="btn" role="button"/>
             </group>
         </page>
     </notebook>
+    <div role="dialog" class="modal">
+        <header class="modal-header"/>
+        <main class="modal-body"/>
+        <footer class="modal-footer"/>
+    </div>
+    <div class="tab-pane" role="tabpanel"/>
+    <a data-toggle="tab" role="tab" aria-selected="true" aria-controls="test"/>
+    <div class="nav-tabs" role="tablist"/>
+    <div class="alert alert-success" role="alert"/>
+    <div class="alert alert-success" role="alertdialog"/>
+    <div class="alert alert-success" role="status"/>
 </form>
 ''')).getroot()
 
@@ -129,3 +162,31 @@ class TestViewValidation(unittest.TestCase):
     def test_col_datatype_validation(self):
         assert not valid_type_in_col(invalid_form)
         assert valid_type_in_col(valid_form)
+
+    def test_a11y_validation(self):
+        assert valid_alternative_image_text(invalid_form) == "Warning"
+        assert valid_alternative_image_text(valid_form) is True
+        assert valid_alternative_icon_text(invalid_form) == "Warning"
+        assert valid_alternative_icon_text(valid_form) is True
+        assert valid_title_icon(invalid_form) == "Warning"
+        assert valid_title_icon(valid_form) is True
+        assert valid_simili_button(invalid_form) == "Warning"
+        assert valid_simili_button(valid_form) is True
+        assert valid_dialog(invalid_form) == "Warning"
+        assert valid_dialog(valid_form) is True
+        assert valid_simili_dropdown(invalid_form) == "Warning"
+        assert valid_simili_dropdown(valid_form) is True
+        assert valid_simili_progressbar(invalid_form) == "Warning"
+        assert valid_simili_progressbar(valid_form) is True
+        assert valid_simili_tabpanel(invalid_form) == "Warning"
+        assert valid_simili_tabpanel(valid_form) is True
+        assert valid_simili_tablist(invalid_form) == "Warning"
+        assert valid_simili_tablist(valid_form) is True
+        assert valid_simili_tab(invalid_form) == "Warning"
+        assert valid_simili_tab(valid_form) is True
+        assert valid_focusable_button(invalid_form) == "Warning"
+        assert valid_focusable_button(valid_form) is True
+        assert valid_prohibited_none_role(invalid_form) == "Warning"
+        assert valid_prohibited_none_role(valid_form) is True
+        assert valid_alerts(invalid_form) == "Warning"
+        assert valid_alerts(valid_form) is True
diff --git a/odoo/addons/base/views/ir_module_views.xml b/odoo/addons/base/views/ir_module_views.xml
index 53768df481bb9833312a79a29f644aa2e59aa696..9ca6a61f441b690e81a6b6ed51a11b7602721f8b 100644
--- a/odoo/addons/base/views/ir_module_views.xml
+++ b/odoo/addons/base/views/ir_module_views.xml
@@ -157,7 +157,7 @@
                     <t t-name="kanban-box">
                       <div class="oe_module_vignette oe_kanban_global_click">
                         <t t-set="installed" t-value="record.state.raw_value == 'installed'"/>
-                        <img t-attf-src="#{record.icon.value}" class="oe_module_icon"/>
+                        <img t-attf-src="#{record.icon.value}" class="oe_module_icon" alt="Icon"/>
                         <div class="oe_module_desc" t-att-title="record.shortdesc.value">
                           <h4 class="o_kanban_record_title"><field name="shortdesc"/></h4>
                           <p class="oe_module_name">
diff --git a/odoo/addons/base/views/ir_qweb_widget_templates.xml b/odoo/addons/base/views/ir_qweb_widget_templates.xml
index 1fc0e5d921a8b586a44947d43f6d8845cd2be266..afb3c08ec41ece9022012aa027851855cb7b1aa4 100644
--- a/odoo/addons/base/views/ir_qweb_widget_templates.xml
+++ b/odoo/addons/base/views/ir_qweb_widget_templates.xml
@@ -22,21 +22,21 @@
         </t>
         <div itemprop="address" itemscope="itemscope" itemtype="http://schema.org/PostalAddress">
             <div t-if="address and 'address' in fields">
-                <i t-if="not options.get('no_marker')" class='fa fa-map-marker fa-fw'/> <span itemprop="streetAddress" t-raw="address.replace('\n', options.get('no_tag_br') and ', ' or ('&lt;br/&gt;%s' % ('' if options.get('no_marker') else '&amp;nbsp; &amp;nbsp; ')))"/>
+                <i t-if="not options.get('no_marker')" class='fa fa-map-marker fa-fw' role="img" aria-label="Address" title="Address"/> <span itemprop="streetAddress" t-raw="address.replace('\n', options.get('no_tag_br') and ', ' or ('&lt;br/&gt;%s' % ('' if options.get('no_marker') else '&amp;nbsp; &amp;nbsp; ')))"/>
             </div>
             <div t-if="city and 'city' in fields">
-                <i t-if="not options.get('no_marker')" class='fa fa-map-marker fa-fw'/>
+                <i t-if="not options.get('no_marker')" class='fa fa-map-marker fa-fw' role="img" aria-label="Address" title="Address"/>
                 <span itemprop="addressLocality" t-raw="city"/>,
                 <span itemprop="addressCountry" t-raw="country_id"/>
             </div>
-            <div t-if="phone and 'phone' in fields"><i t-if="not options.get('no_marker') or options.get('phone_icons')" class='fa fa-phone fa-fw'/> <span itemprop="telephone" t-esc="phone"/></div>
-            <div t-if="mobile and 'mobile' in fields"><i t-if="not options.get('no_marker') or options.get('phone_icons')" class='fa fa-mobile fa-fw'/> <span itemprop="telephone" t-esc="mobile"/></div>
-            <div t-if="fax and 'fax' in fields"><i t-if="not options.get('no_marker') or options.get('phone_icons')" class='fa fa-fax fa-fw'/> <span itemprop="faxNumber" t-esc="fax"/></div>
+            <div t-if="phone and 'phone' in fields"><i t-if="not options.get('no_marker') or options.get('phone_icons')" class='fa fa-phone fa-fw' role="img" aria-label="Phone" title="Phone"/> <span itemprop="telephone" t-esc="phone"/></div>
+            <div t-if="mobile and 'mobile' in fields"><i t-if="not options.get('no_marker') or options.get('phone_icons')" class='fa fa-mobile fa-fw' role="img" aria-label="Mobile" title="Mobile"/> <span itemprop="telephone" t-esc="mobile"/></div>
+            <div t-if="fax and 'fax' in fields"><i t-if="not options.get('no_marker') or options.get('phone_icons')" class='fa fa-fax fa-fw' role="img" aria-label="Fax" title="Fax"/> <span itemprop="faxNumber" t-esc="fax"/></div>
             <div t-if="website and 'website' in fields">
-                <i t-if="not options.get('no_marker')" class='fa fa-globe'/>
+                <i t-if="not options.get('no_marker')" class='fa fa-globe' role="img" aria-label="Website" title="Website"/>
                 <a t-att-href="website and '%s%s' % ('http://' if '://' not in website else '',website)"><span itemprop="website" t-esc="website"/></a>
             </div>
-            <div t-if="email and 'email' in fields"><i t-if="not options.get('no_marker')" class='fa fa-envelope fa-fw'/> <span itemprop="email" t-esc="email"/></div>
+            <div t-if="email and 'email' in fields"><i t-if="not options.get('no_marker')" class='fa fa-envelope fa-fw' role="img" aria-label="Email" title="Email"/> <span itemprop="email" t-esc="email"/></div>
         </div>
         <t t-if="object.country_id and object.country_id.name_position == 'after'">
             <t t-call="base.contact_name"/>
diff --git a/odoo/addons/base/views/ir_rule_views.xml b/odoo/addons/base/views/ir_rule_views.xml
index be8bd917785dcdba49147bebad49ac356162558d..54f9193297510801bf9f31be68090cca37498968 100644
--- a/odoo/addons/base/views/ir_rule_views.xml
+++ b/odoo/addons/base/views/ir_rule_views.xml
@@ -29,7 +29,7 @@
                         <field name="global"/>
                         <field name="groups" nolabel="1" colspan="4"/>
                     </group>
-                    <i class="fa fa-info fa-3x text-info pull-left"/>
+                    <i class="fa fa-info fa-3x text-info pull-left" role="img" aria-label="Info" title="Info"/>
                     <h3>Interaction between rules</h3>
                     <div>
                       <p>
diff --git a/odoo/addons/base/views/ir_sequence_views.xml b/odoo/addons/base/views/ir_sequence_views.xml
index d53570cc79a38b67fdfa08f59132db764e1733d5..d55e8d7d1d9f18a2a437cf9c0b72748f94f4be56 100644
--- a/odoo/addons/base/views/ir_sequence_views.xml
+++ b/odoo/addons/base/views/ir_sequence_views.xml
@@ -40,21 +40,21 @@
                         </field>
                         <group col="3" string="Legend (for prefix, suffix)">
                             <group>
-                                <label colspan="2" string="Current Year with Century: %%(year)s"/>
-                                <label colspan="2" string="Current Year without Century: %%(y)s"/>
-                                <label colspan="2" string="Month: %%(month)s"/>
-                                <label colspan="2" string="Day: %%(day)s"/>
+                                <span colspan="2">Current Year with Century: %%(year)s</span>
+                                <span colspan="2">Current Year without Century: %%(y)s</span>
+                                <span colspan="2">Month: %%(month)s</span>
+                                <span colspan="2">Day: %%(day)s</span>
                             </group>
                             <group>
-                                <label colspan="2" string="Day of the Year: %%(doy)s"/>
-                                <label colspan="2" string="Week of the Year: %%(woy)s"/>
-                                <label colspan="2" string="Day of the Week (0:Monday): %%(weekday)s"/>
+                                <span colspan="2">Day of the Year: %%(doy)s</span>
+                                <span colspan="2">Week of the Year: %%(woy)s</span>
+                                <span colspan="2">Day of the Week (0:Monday): %%(weekday)s</span>
                             </group>
                             <group>
-                                <label colspan="2" string="Hour 00->24: %%(h24)s"/>
-                                <label colspan="2" string="Hour 00->12: %%(h12)s"/>
-                                <label colspan="2" string="Minute: %%(min)s"/>
-                                <label colspan="2" string="Second: %%(sec)s"/>
+                                <span colspan="2">Hour 00->24: %%(h24)s</span>
+                                <span colspan="2">Hour 00->12: %%(h12)s</span>
+                                <span colspan="2">Minute: %%(min)s</span>
+                                <span colspan="2">Second: %%(sec)s</span>
                             </group>
                         </group>
                         <group attrs="{'invisible': [('use_date_range', '=', False)]}">
diff --git a/odoo/addons/base/views/res_company_views.xml b/odoo/addons/base/views/res_company_views.xml
index 57b08a2eaef1d091ffec76a9f7357171c36028b1..90e4a0b2d97be86cf598c94c1ee75898cf61ef82 100644
--- a/odoo/addons/base/views/res_company_views.xml
+++ b/odoo/addons/base/views/res_company_views.xml
@@ -73,7 +73,7 @@
                         <t t-name="kanban-box">
                             <div t-attf-class="oe_kanban_global_click">
                                 <div class="text-center">
-                                    <i class="fa fa-building" aria-hidden="true"></i> <strong><field name="name"/></strong>
+                                    <i class="fa fa-building" role="img" aria-label="Enterprise" title="Enterprise"></i> <strong><field name="name"/></strong>
                                 </div>
                                 <hr class="mt4 mb4"/>
                                 <div class="row">
@@ -129,7 +129,7 @@
             <field name="arch" type="xml">
                 <field name="logo" position="before">
                     <div class="row">
-                        <div class="alert alert-warning ml8 mr8" role="alert" attrs="{'invisible': [('logo','!=',False)]}">
+                        <div class="alert alert-warning ml8 mr8" role="status" attrs="{'invisible': [('logo','!=',False)]}">
                             Update your company details and upload your logo to get a beautiful document.
                         </div>
                     </div>
diff --git a/odoo/addons/base/views/res_config_settings_views.xml b/odoo/addons/base/views/res_config_settings_views.xml
index 74ce361e96b72ee2028e726665d6b09ababd906e..2d119ee5af666356e755d48cb18f736b894989dd 100644
--- a/odoo/addons/base/views/res_config_settings_views.xml
+++ b/odoo/addons/base/views/res_config_settings_views.xml
@@ -11,7 +11,7 @@
                             <div class="title h2 mb0 mt4 text-muted hidden-xs">Settings</div>
                             <div class="o_setting_search">
                                 <input type="text" class="searchInput" placeholder="Search..."/>
-                                <span class="searchIcon"><i class="fa fa-search"/></span>
+                                <span class="searchIcon"><i class="fa fa-search" role="img" aria-label="Search" title="Search"/></span>
                             </div>
                         </div>
                         <header>
diff --git a/odoo/addons/base/views/res_partner_views.xml b/odoo/addons/base/views/res_partner_views.xml
index 5ded79d3e67bc589fd06a00b60715d7d3895a300..f7657ccb4750648fb6f89f305ac7a2081921b579 100644
--- a/odoo/addons/base/views/res_partner_views.xml
+++ b/odoo/addons/base/views/res_partner_views.xml
@@ -292,15 +292,15 @@
                                         <t t-name="kanban-box">
                                             <t t-set="color" t-value="kanban_color(record.color.raw_value)"/>
                                             <div t-att-class="color + (record.title.raw_value == 1 ? ' oe_kanban_color_alert' : '') + ' oe_kanban_global_click'">
-                                                <a t-if="!read_only_mode" type="delete" class="fa fa-times pull-right"/>
+                                                <a t-if="!read_only_mode" type="delete" class="fa fa-times pull-right" title="Delete" aria-label="Delete"/>
                                                 <div class="o_kanban_image">
-                                                    <img t-if="record.image_small.raw_value" t-att-src="'data:image/png;base64,'+record.image_small.raw_value"/>
+                                                    <img alt="" t-if="record.image_small.raw_value" t-att-src="'data:image/png;base64,'+record.image_small.raw_value"/>
                                                     <t t-if="!record.image_small.raw_value">
-                                                        <img t-if="record.type.raw_value === 'delivery'" t-att-src='_s + "/base/static/img/truck.png"'/>
-                                                        <img t-if="record.type.raw_value === 'invoice'" t-att-src='_s + "/base/static/img/money.png"'/>
+                                                        <img alt="Delivery" t-if="record.type.raw_value === 'delivery'" t-att-src='_s + "/base/static/img/truck.png"'/>
+                                                        <img alt="Invoice" t-if="record.type.raw_value === 'invoice'" t-att-src='_s + "/base/static/img/money.png"'/>
                                                         <t t-if="record.type.raw_value !== 'invoice' &amp;&amp; record.type.raw_value !== 'delivery'">
-                                                            <img t-if="record.is_company.raw_value === true" t-att-src='_s + "/base/static/img/company_image.png"'/>
-                                                            <img t-if="record.is_company.raw_value === false" t-att-src='_s + "/base/static/img/avatar.png"'/>
+                                                            <img alt="Logo" t-if="record.is_company.raw_value === true" t-att-src='_s + "/base/static/img/company_image.png"'/>
+                                                            <img alt="Avatar" t-if="record.is_company.raw_value === false" t-att-src='_s + "/base/static/img/avatar.png"'/>
                                                         </t>
                                                     </t>
                                                 </div>
@@ -495,21 +495,21 @@
                             <div class="oe_kanban_global_click o_res_partner_kanban">
                                 <div class="o_kanban_image">
                                     <t t-if="record.image_small.raw_value">
-                                        <img t-att-src="kanban_image('res.partner', 'image_small', record.id.raw_value)"/>
+                                        <img alt="Partner" t-att-src="kanban_image('res.partner', 'image_small', record.id.raw_value)"/>
                                     </t>
                                     <t t-if="!record.image_small.raw_value">
                                         <t t-if="record.type.raw_value === 'delivery'">
-                                            <img t-att-src='_s + "/base/static/img/truck.png"' class="o_kanban_image oe_kanban_avatar_smallbox"/>
+                                            <img alt="Delivery" t-att-src='_s + "/base/static/img/truck.png"' class="o_kanban_image oe_kanban_avatar_smallbox"/>
                                         </t>
                                         <t t-if="record.type.raw_value === 'invoice'">
-                                            <img t-att-src='_s + "/base/static/img/money.png"' class="o_kanban_image oe_kanban_avatar_smallbox"/>
+                                            <img alt="Invoice" t-att-src='_s + "/base/static/img/money.png"' class="o_kanban_image oe_kanban_avatar_smallbox"/>
                                          </t>
                                         <t t-if="record.type.raw_value != 'invoice' &amp;&amp; record.type.raw_value != 'delivery'">
                                             <t t-if="record.is_company.raw_value === true">
-                                                <img t-att-src='_s + "/base/static/img/company_image.png"'/>
+                                                <img alt="Logo" t-att-src='_s + "/base/static/img/company_image.png"'/>
                                             </t>
                                             <t t-if="record.is_company.raw_value === false">
-                                                <img t-att-src='_s + "/base/static/img/avatar.png"'/>
+                                                <img alt="Avatar" t-att-src='_s + "/base/static/img/avatar.png"'/>
                                             </t>
                                         </t>
                                     </t>
diff --git a/odoo/addons/base/views/res_users_views.xml b/odoo/addons/base/views/res_users_views.xml
index ebf1f72479f3f35a628d4a73c1500eee5d1a921d..ddeb9ba91eed2867d74fd608de1f47b7d706f990 100644
--- a/odoo/addons/base/views/res_users_views.xml
+++ b/odoo/addons/base/views/res_users_views.xml
@@ -64,7 +64,7 @@
                             <field name="users" context="{'search_default_no_share':1}"/>
                         </page>
                         <page string="Inherited">
-                            <label string="Users added to this group are automatically added in the following groups."/>
+                            <label for="implied_ids" string="Users added to this group are automatically added in the following groups."/>
                             <field name="implied_ids"/>
                         </page>
                         <page string="Menus">
@@ -162,7 +162,7 @@
                                 <field name="active" widget="boolean_button" options='{"terminology": "active"}'/>
                             </button>
                         </div>
-                        <div class="alert alert-info text-center o_form_header" attrs="{'invisible': [('active', '=', True)]}">
+                        <div class="alert alert-info text-center o_form_header" attrs="{'invisible': [('active', '=', True)]}" role="alert">
                           <a class="close" data-dismiss="alert" href="#" aria-hidden="true">x</a>
                           <div>
                             <strong>The contact linked to this user is still active</strong>
@@ -283,17 +283,17 @@
                         <t t-name="kanban-box">
                             <div t-attf-class="oe_kanban_global_click">
                                 <div class="o_kanban_image">
-                                    <img t-att-src="kanban_image('res.users', 'image_medium', record.id.raw_value)"/>
+                                    <img alt="Avatar" t-att-src="kanban_image('res.users', 'image_medium', record.id.raw_value)"/>
                                 </div>
                                 <div class="oe_kanban_details">
                                     <ul>
-                                        <li class="text-success pull-right mb4" t-if="record.active.raw_value"><i class="fa fa-circle" aria-hidden="true"></i></li>
-                                        <li class="text-danger pull-right mb4" t-if="!record.active.raw_value"><i class="fa fa-circle"></i></li>
+                                        <li class="text-success pull-right mb4" t-if="record.active.raw_value"><i class="fa fa-circle" role="img" aria-label="Ok" title="Ok"></i></li>
+                                        <li class="text-danger pull-right mb4" t-if="!record.active.raw_value"><i class="fa fa-circle" role="img" aria-label="Invalid" title="Invalid"></i></li>
                                         <li class="mb4">
                                             <strong><field name="name"/></strong>
                                         </li>
                                         <li class="badge pull-right mb4" t-if="record.lang.raw_value"><field name="lang"/></li>
-                                        <li class="mb4" t-if="record.login.raw_value"><i class="fa fa-envelope"/> <field name="login"/></li>
+                                        <li class="mb4" t-if="record.login.raw_value" title="Login"><i class="fa fa-envelope" role="img" aria-label="Login"/> <field name="login"/></li>
                                     </ul>
                                 </div>
                             </div>
diff --git a/odoo/addons/base/wizard/base_language_install_views.xml b/odoo/addons/base/wizard/base_language_install_views.xml
index 5a82cb5d7ec9963888804d16e311a72518a64ec0..936197d810e3f5998336752a5ddb6e1c977806a7 100644
--- a/odoo/addons/base/wizard/base_language_install_views.xml
+++ b/odoo/addons/base/wizard/base_language_install_views.xml
@@ -13,8 +13,8 @@
                         <field name="overwrite"/>
                     </group>
                     <group states="done" colspan="4">
-                        <label string="The selected language has been successfully installed.
-You must change the preferences of the user to view the changes."/>
+                        <span class="o_form_label">The selected language has been successfully installed.
+You must change the preferences of the user to view the changes.</span>
                     </group>
                     <footer states="init">
                         <button name="lang_install" string="Load" type="object" class="btn-primary"/>
diff --git a/odoo/addons/base/wizard/base_module_uninstall_views.xml b/odoo/addons/base/wizard/base_module_uninstall_views.xml
index aa945029b001e0c5c6c203bd67d5096a3a8d69d3..4f10bebc2763fc66b693cd591078787e4e7047fe 100644
--- a/odoo/addons/base/wizard/base_module_uninstall_views.xml
+++ b/odoo/addons/base/wizard/base_module_uninstall_views.xml
@@ -19,7 +19,7 @@
                             <templates>
                                 <t t-name="kanban-box">
                                     <div class="oe_module_vignette">
-                                        <img t-attf-src="#{record.icon.value}"
+                                        <img t-attf-src="#{record.icon.value}" alt="Icon"
                                              class="oe_module_icon" style="width: 60px; height: 60px"/>
                                         <div class="oe_module_desc" style="padding-left: 70px">
                                             <h4><field name="shortdesc"/></h4>
diff --git a/odoo/addons/base/wizard/base_module_update_views.xml b/odoo/addons/base/wizard/base_module_update_views.xml
index c50d1a261aee6bfde970a455972f9b531e7ac0c5..e465479e6ffc3afdc9ba26f995edb699c72ce4a9 100644
--- a/odoo/addons/base/wizard/base_module_update_views.xml
+++ b/odoo/addons/base/wizard/base_module_update_views.xml
@@ -10,7 +10,7 @@
                     <field name="state" invisible="1"/>
                     <separator string="Module Update Result"/>
                     <group states="init">
-                        <label string="Click on Update below to start the process..." />
+                        <span class="o_form_label">Click on Update below to start the process...</span>
                     </group>
                     <group states="done" >
                         <field name="updated"/>
diff --git a/odoo/addons/base/wizard/base_module_upgrade_views.xml b/odoo/addons/base/wizard/base_module_upgrade_views.xml
index 63c85fbe7aa97de2c057e7c8ec78e8d3c034f895..53bf47d409f5d691517c8287770928b3a6406e8a 100644
--- a/odoo/addons/base/wizard/base_module_upgrade_views.xml
+++ b/odoo/addons/base/wizard/base_module_upgrade_views.xml
@@ -43,8 +43,8 @@
             <field name="priority" eval="20"/>
             <field name="arch" type="xml">
                 <form string="Apply Schedule Upgrade">
-                    <div><label string="The selected modules have been updated / installed !"/></div>
-                    <div><label string="We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)."/></div>
+                    <div><span class="o_form_label">The selected modules have been updated / installed !</span></div>
+                    <div><span class="o_form_label">We suggest to reload the menu tab to see the new menus (Ctrl+T then Ctrl+R)."</span></div>
                     <footer>
                         <button name="config" string="Start configuration" type="object" class="btn-primary"/>
                         <button string="Cancel" class="btn-default" special="cancel"/>
diff --git a/odoo/addons/test_exceptions/view.xml b/odoo/addons/test_exceptions/view.xml
index dd0aa97b7f121b47c2fadcfcae7b7f9194f1a096..7979425befd0871534eaed5a2412bb2275a180a0 100644
--- a/odoo/addons/test_exceptions/view.xml
+++ b/odoo/addons/test_exceptions/view.xml
@@ -7,97 +7,97 @@
             <field name="model">test.exceptions.model</field>
             <field name="arch" type="xml">
                 <form string="Test exceptions">
-                    <label string="Each button generates a specific exception on the server. The text on the right is the expected representation of the exception when displayed on the client. Button marked with a '*' use safe_eval()."/>
+                    <p>Each button generates a specific exception on the server. The text on the right is the expected representation of the exception when displayed on the client. Button marked with a '*' use safe_eval().</p>
                     <separator/>
                     <group>
                         <div>
                             <button name="generate_except_osv" string="except_osv" type="object" icon="fa-refresh text-primary" />
-                            <label string="Warning-description"/>
+                            <label for="generate_except_osv" string="Warning-description"/>
                         </div>
                         <div>
                             <button name="generate_except_orm" string="except_orm" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Warning-description"/>
+                            <label for="generate_except_orm" string="Warning-description"/>
                         </div>
                         <div>
                             <button name="generate_warning" string="Warning" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Warning-description"/>
+                            <label for="generate_warning" string="Warning-description"/>
                         </div>
                         <div>
                             <button name="generate_redirect_warning" string="RedirectWarning" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Warning-description-redirection button"/>
+                            <label for="generate_redirect_warning" string="Warning-description-redirection button"/>
                         </div>
                         <div>
                             <button name="generate_access_denied" string="AccessDenied" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Access denied-traceback"/>
+                            <label for="generate_access_denied" string="Access denied-traceback"/>
                         </div>
                         <div>
                             <button name="generate_access_error" string="AccessError" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Access rights error-description" class="oe_inline"/>
+                            <label for="generate_access_error" string="Access rights error-description" class="oe_inline"/>
                         </div>
                         <div>
                             <button name="generate_exc_access_denied" string="Exc AccessDenied" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Access denied-traceback"/>
+                            <label for="generate_exc_access_denied" string="Access denied-traceback"/>
                         </div>
                         <div>
                             <button name="generate_undefined" string="Undefined" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Server error-traceback"/>
+                            <label for="generate_undefined" string="Server error-traceback"/>
                         </div>
                         <div>
                             <button name="generate_user_error" string="UserError" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Warning-description"/>
+                            <label for="generate_user_error" string="Warning-description"/>
                         </div>
                         <div>
                             <button name="generate_missing_error" string="MissingError" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Missing Error-description"/>
+                            <label for="generate_missing_error" string="Missing Error-description"/>
                         </div>
                         <div>
                             <button name="generate_validation_error" string="ValidationError" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Validation Error-description"/>
+                            <label for="generate_validation_error" string="Validation Error-description"/>
                         </div>
 
                         <div>
                             <button name="generate_except_osv_safe_eval" string="except_osv*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Warning-description"/>
+                            <label for="generate_except_osv_safe_eval" string="Warning-description"/>
                         </div>
                         <div>
                             <button name="generate_except_orm_safe_eval" string="except_orm*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Warning-description"/>
+                            <label for="generate_except_orm_safe_eval" string="Warning-description"/>
                         </div>
                         <div>
                             <button name="generate_warning_safe_eval" string="Warning*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Warning-description"/>
+                            <label for="generate_warning_safe_eval" string="Warning-description"/>
                         </div>
                         <div>
                             <button name="generate_redirect_warning_safe_eval" string="RedirectWarning*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Warning-description-redirection button" class="oe_inline"/>
+                            <label for="generate_redirect_warning_safe_eval" string="Warning-description-redirection button" class="oe_inline"/>
                         </div>
                         <div>
                             <button name="generate_access_denied_safe_eval" string="AccessDenied*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Access denied-traceback"/>
+                            <label for="generate_access_denied_safe_eval" string="Access denied-traceback"/>
                         </div>
                         <div>
                             <button name="generate_access_error_safe_eval" string="AccessError*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Access rights error-description"/>
+                            <label for="generate_access_error_safe_eval" string="Access rights error-description"/>
                         </div>
                         <div>
                             <button name="generate_exc_access_denied_safe_eval" string="Exc AccessDenied*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Access denied-traceback"/>
+                            <label for="generate_exc_access_denied_safe_eval" string="Access denied-traceback"/>
                         </div>
                         <div>
                             <button name="generate_undefined_safe_eval" string="Undefined*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Server error-traceback"/>
+                            <label for="generate_undefined_safe_eval" string="Server error-traceback"/>
                         </div>
                         <div>
                             <button name="generate_user_error_safe_eval" string="UserError*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Warning-description"/>
+                            <label for="generate_user_error_safe_eval" string="Warning-description"/>
                         </div>
                         <div>
                             <button name="generate_missing_error_safe_eval" string="MissingError*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Missing Error-description"/>
+                            <label for="generate_missing_error_safe_eval" string="Missing Error-description"/>
                         </div>
                         <div>
                             <button name="generate_validation_error_safe_eval" string="ValidationError*" type="object" icon="fa-refresh text-primary"/>
-                            <label string="Validation Error-description"/>
+                            <label for="generate_validation_error_safe_eval" string="Validation Error-description"/>
                         </div>
                     </group>
                 </form>
diff --git a/odoo/addons/test_main_flows/static/src/js/tour.js b/odoo/addons/test_main_flows/static/src/js/tour.js
index 925e86c9bef0387794ceddd2f556f5d49c2c4650..c74d473fcbc369904c2b072233ff0fe6031b61b5 100644
--- a/odoo/addons/test_main_flows/static/src/js/tour.js
+++ b/odoo/addons/test_main_flows/static/src/js/tour.js
@@ -122,7 +122,7 @@ tour.register('main_flow_tour', {
     position: 'right',
 }, {
     trigger:  ".o_field_widget[name=name] input",
-    extra_trigger: ".modal-dialog",
+    extra_trigger: "[role=\"dialog\"]",
     content: _t('Select a seller'),
     position: 'top',
     run: "text the_flow.vendor",
@@ -135,12 +135,12 @@ tour.register('main_flow_tour', {
     position: 'right',
     run: "text 1",
 }, {
-    trigger:  ".modal-footer .btn-primary:first",
+    trigger:  "footer.modal-footer .btn-primary:first",
     extra_trigger: ".o_field_widget[name=name] > .o_external_button", // Wait name_create
     content: _t('Save & Close'),
     position: 'bottom',
 }, {
-    trigger: ".modal-footer .btn-primary",
+    trigger: "footer.modal-footer .btn-primary",
     content: _t('Save'),
     position: 'bottom',
 },
@@ -176,7 +176,7 @@ tour.register('main_flow_tour', {
     position: 'right',
 }, {
     trigger:  ".o_field_widget[name=name] input",
-    extra_trigger: ".modal-dialog",
+    extra_trigger: "[role=\"dialog\"]",
     content: _t('Select a seller'),
     position: 'top',
     run: "text the_flow.vendor",
@@ -190,11 +190,11 @@ tour.register('main_flow_tour', {
     position: 'right',
     run: "text 1",
 }, {
-    trigger:  ".modal-footer .btn-primary:first",
+    trigger:  "footer.modal-footer .btn-primary:first",
     content: _t('Save & Close'),
     position: 'bottom',
 }, {
-    trigger: ".modal-footer .btn-primary",
+    trigger: "footer.modal-footer .btn-primary",
     // Wait Save & Close and check value
     extra_trigger: ".o_field_widget[name=seller_ids] .o_data_row td:nth-child(2):contains('the_flow.vendor')",
     content: _t('Save'),
@@ -326,8 +326,8 @@ tour.register('main_flow_tour', {
     run: function (actions) {
         actions.auto();
         // if the one2many isn't editable, we have to close the dialog
-        if ($(".modal-footer .btn-primary").length) {
-            actions.auto(".modal-footer .btn-primary");
+        if ($("footer.modal-footer .btn-primary").length) {
+            actions.auto("footer.modal-footer .btn-primary");
         }
     },
 }, {
@@ -338,7 +338,7 @@ tour.register('main_flow_tour', {
     trigger: ".o_field_widget[name=product_id] input",
     // the one2many may be editable or not according to the modules installed, so
     // we have to handle both cases
-    extra_trigger: '.o_field_widget[name=order_line] .o_data_row:nth(1).o_selected_row, .modal-dialog',
+    extra_trigger: '.o_field_widget[name=order_line] .o_data_row:nth(1).o_selected_row, [role="dialog"]',
     content: _t("Select a product"),
     position: "right",
     run: "text the_flow.service",
@@ -349,8 +349,8 @@ tour.register('main_flow_tour', {
     run: function (actions) {
         actions.auto();
         // if the one2many isn't editable, we have to close the dialog
-        if ($(".modal-footer .btn-primary").length) {
-            actions.auto(".modal-footer .btn-primary");
+        if ($("footer.modal-footer .btn-primary").length) {
+            actions.auto("footer.modal-footer .btn-primary");
         }
     },
 }, {
@@ -368,11 +368,11 @@ tour.register('main_flow_tour', {
     position: "right",
     run: "text test@the_flow.com",
 },{
-    trigger: ".modal-footer .btn-primary",
+    trigger: "footer.modal-footer .btn-primary",
     content: _t("Save your changes"),
     position: "bottom",
 },  {
-    trigger: ".modal-footer .btn-primary span:contains('Send')",
+    trigger: "footer.modal-footer .btn-primary span:contains('Send')",
     content: _t("Try to send it to email"),
     position: "bottom",
 }, {
@@ -440,8 +440,8 @@ tour.register('main_flow_tour', {
     content: _t("Click on schedulers"),
     position: "bottom"
 }, {
-    trigger: ".modal-footer .btn-primary",
-    extra_trigger: ".modal-dialog",
+    trigger: "footer.modal-footer .btn-primary",
+    extra_trigger: "[role=\"dialog\"]",
     content: _t("Run Schedulers"),
     position: "bottom",
 }, {
@@ -471,8 +471,8 @@ tour.register('main_flow_tour', {
     content: _t("Validate"),
     position: "bottom",
 }, {
-    trigger: ".modal-footer .btn-primary",
-    extra_trigger: ".modal-dialog",
+    trigger: "footer.modal-footer .btn-primary",
+    extra_trigger: "[role=\"dialog\"]",
     content: _t("Apply"),
     position: "bottom",
 }, {
@@ -497,12 +497,12 @@ tour.register('main_flow_tour', {
     position: "bottom",
 }, {
     trigger: "select.o_field_widget[name=journal_id]",
-    extra_trigger: ".modal-dialog",
+    extra_trigger: "[role=\"dialog\"]",
     content: _t("Select Journal"),
     position: "bottom",
     run: 'text(Bank (USD))',
 }, {
-    trigger: ".modal-footer .btn-primary",
+    trigger: "footer.modal-footer .btn-primary",
     extra_trigger: ".o_field_widget[name=payment_method_id]", // FIXME: Wait onchange
     content: _t("Validate"),
     position: "bottom",
@@ -528,7 +528,7 @@ tour.register('main_flow_tour', {
     content: _t("Produce"),
     position: "bottom",
 }, {
-    trigger:  ".modal-footer .btn-primary:first",
+    trigger:  "footer.modal-footer .btn-primary:first",
     content: _t('Record Production'),
     position: 'bottom',
 }, {
@@ -607,7 +607,7 @@ tour.register('main_flow_tour', {
     content: _t("Validate"),
     position: "bottom",
 }, {
-    trigger: ".modal-footer .btn-primary",
+    trigger: "footer.modal-footer .btn-primary",
     content: _t("Create and View Invoices"),
     position: "bottom",
 }, {
@@ -620,12 +620,12 @@ tour.register('main_flow_tour', {
     position: "bottom",
 }, {
     trigger: "select.o_field_widget[name=journal_id]",
-    extra_trigger: ".modal-dialog",
+    extra_trigger: "[role=\"dialog\"]",
     content: _t("Select Journal"),
     position: "bottom",
     run: 'text(Bank (USD))',
 }, {
-    trigger: ".modal-footer .btn-primary",
+    trigger: "footer.modal-footer .btn-primary",
     content: _t("Validate"),
     position: "bottom",
 }, {
diff --git a/odoo/addons/test_new_api/static/tests/x2many.js b/odoo/addons/test_new_api/static/tests/x2many.js
index d256d0263253bd4e41b86aa9b69ada022d311002..4a088576050e0fca1ee6fda8fc2f04420da44f9e 100644
--- a/odoo/addons/test_new_api/static/tests/x2many.js
+++ b/odoo/addons/test_new_api/static/tests/x2many.js
@@ -31,7 +31,7 @@ odoo.define('web.test.x2many', function (require) {
     }, {
         content: "insert a name into the modal form",
         trigger: 'input.o_field_widget.o_required_modifier:first',
-        extra_trigger: '.modal:visible',
+        extra_trigger: '[role="dialog"]:visible',
         run: function (action_helper) {
             action_helper.text('user_test_' + (inc = new Date().getTime()));
         }
@@ -44,7 +44,7 @@ odoo.define('web.test.x2many', function (require) {
         }
     }, {
         content: "save the modal content and create the new moderator",
-        trigger: '.modal-footer button:contains(Save):first',
+        trigger: 'footer.modal-footer button:contains(Save):first',
         extra_trigger: 'input.o_field_widget.o_required_modifier:propValueContains(@test)',
     }, {
         content: "check if the modal is saved",
@@ -82,12 +82,12 @@ odoo.define('web.test.x2many', function (require) {
         trigger: '.tab-pane:eq(0) .o_field_x2many_list_row_add a'
     }, {
         content: "insert body a",
-        trigger: '.modal-body textarea:first',
+        trigger: 'main.modal-body textarea:first',
         run: 'text a',
     }, {
         content: "save new message a",
-        trigger: '.modal-footer button:contains(Save):first',
-        extra_trigger: '.modal-body textarea:first:propValue(a)',
+        trigger: 'footer.modal-footer button:contains(Save):first',
+        extra_trigger: 'main.modal-body textarea:first:propValue(a)',
     }, { // add message b
         content: "create new message b",
         trigger: '.tab-pane:eq(0) .o_field_x2many_list_row_add a',
@@ -98,7 +98,7 @@ odoo.define('web.test.x2many', function (require) {
         run: 'text b',
     }, {
         content: "save new message b",
-        trigger: '.modal-footer button:contains(Save):first',
+        trigger: 'footer.modal-footer button:contains(Save):first',
         extra_trigger: 'textarea[name="body"]:first:propValue(b)',
     }, { // change content to trigger on change
         content: "insert content",
@@ -123,7 +123,7 @@ odoo.define('web.test.x2many', function (require) {
         run: 'text bbb',
     }, {
         content: "save changes",
-        trigger: '.modal-footer button:contains(Save):first',
+        trigger: 'footer.modal-footer button:contains(Save):first',
         extra_trigger: 'textarea[name="body"]:first:propValue(bbb)',
     }, { // add message c
         content: "create new message c",
@@ -135,7 +135,7 @@ odoo.define('web.test.x2many', function (require) {
         run: 'text c',
     }, {
         content: "save new message c",
-        trigger: '.modal-footer button:contains(Save):first',
+        trigger: 'footer.modal-footer button:contains(Save):first',
         extra_trigger: 'textarea[name="body"]:first:propValue(c)',
     }, { // add participants
         content: "change tab to Participants",
@@ -186,7 +186,7 @@ odoo.define('web.test.x2many', function (require) {
         run: 'text d',
     }, {
         content: "save new message d",
-        trigger: '.modal-footer button:contains(Save):first',
+        trigger: 'footer.modal-footer button:contains(Save):first',
         extra_trigger: 'textarea[name="body"]:first:propValue(d)',
     }, { // add message e
         content: "create new message e",
@@ -198,7 +198,7 @@ odoo.define('web.test.x2many', function (require) {
         run: 'text e',
     }, {
         content: "save new message e",
-        trigger: '.modal-footer button:contains(Save):first',
+        trigger: 'footer.modal-footer button:contains(Save):first',
         extra_trigger: 'textarea[name="body"]:first:propValue(e)',
     }, { // change message a
         content: "edit message a",
@@ -210,7 +210,7 @@ odoo.define('web.test.x2many', function (require) {
         run: 'text aaa',
     }, {
         content: "save changes",
-        trigger: '.modal-footer button:contains(Save):first',
+        trigger: 'footer.modal-footer button:contains(Save):first',
         extra_trigger: 'textarea[name="body"]:first:propValue(aaa)',
     }, { // change message e
         content: "edit message e",
@@ -235,7 +235,7 @@ odoo.define('web.test.x2many', function (require) {
         run: function () {}, // don't change texarea content
     }, {
         content: "save changes",
-        trigger: '.modal-footer button:contains(Save):contains(Close)'
+        trigger: 'footer.modal-footer button:contains(Save):contains(Close)'
     }, {
         content: "test one2many triggered the onchange on save for the line",
         trigger: '.o_content:has(.tab-pane:eq(0) .o_field_widget tbody tr td.o_readonly_modifier:contains([test_trigger] Demo User))',
@@ -283,7 +283,7 @@ odoo.define('web.test.x2many', function (require) {
     }, {
         content: "select another user",
         trigger: '.o_field_many2one .o_input_dropdown > input',
-        extra_trigger: 'body:has(.modal) .tab-pane:eq(0) .o_field_widget tbody tr:has(td:containsExact(d))',
+        extra_trigger: 'body:has([role="dialog"]) .tab-pane:eq(0) .o_field_widget tbody tr:has(td:containsExact(d))',
         run: 'text Demo',
     }, {
         content: "select demo user",
@@ -299,7 +299,7 @@ odoo.define('web.test.x2many', function (require) {
         run: 'text ddd',
     }, {
         content: "save new message ddd",
-        trigger: '.modal-footer button:contains(Save):first',
+        trigger: 'footer.modal-footer button:contains(Save):first',
         extra_trigger: 'textarea[name="body"]:first:propValue(ddd)',
     }, { // trigger onchange
         content: "blur the one2many",
@@ -321,7 +321,7 @@ odoo.define('web.test.x2many', function (require) {
         run: 'click',
     }, {
         content: "confirm cancel change",
-        trigger: '.modal-footer button:contains(Ok)',
+        trigger: 'footer.modal-footer button:contains(Ok)',
     },
 
     /////////////////////////////////////////////////////////////////////////////////////////////
@@ -516,6 +516,6 @@ odoo.define('web.test.x2many', function (require) {
         run: 'click',
     }, {
         content: "confirm cancel change",
-        trigger: '.modal-footer button:contains(Ok)',
+        trigger: 'footer.modal-footer button:contains(Ok)',
     }]);
 });
diff --git a/odoo/api.py b/odoo/api.py
index d1b1872e7f5d058f33ba6c4ddb5ed8094fdfe3a3..2d2bae74e1a6d363e936267c2036e688b67b9ec4 100644
--- a/odoo/api.py
+++ b/odoo/api.py
@@ -56,6 +56,7 @@ from decorator import decorator
 from werkzeug.local import Local, release_local
 
 from odoo.tools import frozendict, classproperty, StackMap
+from odoo.exceptions import CacheMiss
 
 _logger = logging.getLogger(__name__)
 
@@ -958,7 +959,11 @@ class Cache(object):
     def get(self, record, field):
         """ Return the value of ``field`` for ``record``. """
         key = field.cache_key(record)
-        value = self._data[field][record.id][key]
+        try:
+            value = self._data[field][record.id][key]
+        except KeyError:
+            raise CacheMiss(record, field)
+
         return value.get() if isinstance(value, SpecialValue) else value
 
     def set(self, record, field, value):
diff --git a/odoo/exceptions.py b/odoo/exceptions.py
index c318f9ecdac1cca66ed0d6ac8be327349346a058..e1689ffd27f8b9301312f08bd7adf57f416b0204 100644
--- a/odoo/exceptions.py
+++ b/odoo/exceptions.py
@@ -63,6 +63,13 @@ class AccessError(except_orm):
         super(AccessError, self).__init__(msg)
 
 
+class CacheMiss(except_orm, KeyError):
+    """ Missing value(s) in cache.
+    Example: When you try to read a value in a flushed cache."""
+    def __init__(self, record, field):
+        super(CacheMiss, self).__init__("%s.%s" % (str(record), field.name))
+
+
 class MissingError(except_orm):
     """ Missing record(s).
     Example: When you try to write on a deleted record."""
diff --git a/odoo/tools/translate.py b/odoo/tools/translate.py
index f69d37214bdc6a9c06a1ad0547723d1247eb2961..6b785c0d47a55eba8801f0a02f5a3849a8ad69be 100644
--- a/odoo/tools/translate.py
+++ b/odoo/tools/translate.py
@@ -143,9 +143,12 @@ TRANSLATED_ELEMENTS = {
 
 # which attributes must be translated
 TRANSLATED_ATTRS = {
-    'string', 'help', 'sum', 'avg', 'confirm', 'placeholder', 'alt', 'title',
+    'string', 'help', 'sum', 'avg', 'confirm', 'placeholder', 'alt', 'title', 'aria-label',
+    'aria-keyshortcuts', 'aria-placeholder', 'aria-roledescription', 'aria-valuetext',
 }
 
+TRANSLATED_ATTRS = TRANSLATED_ATTRS | {'t-attf-' + attr for attr in TRANSLATED_ATTRS}
+
 avoid_pattern = re.compile(r"\s*<!DOCTYPE", re.IGNORECASE | re.MULTILINE | re.UNICODE)
 node_pattern = re.compile(r"<[^>]*>(.*)</[^<]*>", re.DOTALL | re.MULTILINE | re.UNICODE)
 
diff --git a/odoo/tools/view_validation.py b/odoo/tools/view_validation.py
index 1ffdd43e58b331e1afc0554911cfe40261573f62..7c69906220d8a514c7ca9eb1ecd186e122113d85 100644
--- a/odoo/tools/view_validation.py
+++ b/odoo/tools/view_validation.py
@@ -15,9 +15,13 @@ _relaxng_cache = {}
 
 def valid_view(arch):
     for pred in _validators[arch.tag]:
-        if not pred(arch):
+        check = pred(arch)
+        if not check:
             _logger.error("Invalid XML: %s", pred.__doc__)
             return False
+        if check == "Warning":
+            _logger.warning("Invalid XML: %s", pred.__doc__)
+            return "Warning"
     return True
 
 
@@ -88,8 +92,8 @@ def valid_att_in_field(arch):
 
 @validate('form')
 def valid_att_in_label(arch):
-    """ ``label`` nodes must have a ``@for`` or a ``@string`` """
-    return not arch.xpath('//label[not(@for or @string)]')
+    """ ``label`` nodes must have a ``@for`` """
+    return not arch.xpath('//label[not(@for) and not(descendant::input)]')
 
 
 @validate('form')
@@ -113,3 +117,235 @@ def valid_type_in_col(arch):
         attrib.isdigit()
         for attrib in arch.xpath('//@col')
     )
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_alternative_image_text(arch):
+    """An `img` tag must have an alt value."""
+    if arch.xpath('//img[not(@alt or @t-att-alt or @t-attf-alt)]'):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_alternative_icon_text(arch):
+    """An icon with fa- class or in a button must have aria-label in its tag, parents, descendants or have text."""
+    valid_aria_attrs = {
+        'aria-label', 'aria-labelledby', 't-att-aria-label', 't-attf-aria-label',
+        't-att-aria-labelledby', 't-attf-aria-labelledby'}
+    valid_t_attrs = {'t-value', 't-raw', 't-field', 't-esc'}
+    valid_attrs = valid_aria_attrs | valid_t_attrs
+    valid_aria_attrs_xpath = ' or '.join('@' + attr for attr in valid_aria_attrs)
+    valid_attrs_xpath = ' or '.join('@' + attr for attr in valid_attrs)
+
+    # Select elements with class begining by 'fa-'
+    xpath = '(//*[contains(concat(" ", @class), " fa-")'
+    xpath += ' or contains(concat(" ", @t-att-class), " fa-")'
+    xpath += ' or contains(concat(" ", @t-attf-class), " fa-")]'
+    xpath += ' | //button[@icon])'
+    # Elements with accessibility or string attrs are good
+    xpath += '[not(' + valid_attrs_xpath + ')]'
+    # And we ignore all elements with describing in children
+    xpath += '[not(//*[' + valid_attrs_xpath + '])]'
+    # Aria label can be on ancestors
+    xpath += '[not(ancestor[' + valid_aria_attrs_xpath + '])]'
+    # Labels provide text by definition
+    xpath += '[not(descendant-or-self::label)]'
+    # Buttons can have a string attribute
+    xpath += '[not(descendant-or-self::button[@string])]'
+    # Fields have labels
+    xpath += '[not(descendant-or-self::field)]'
+    # And finally, if there is some text, it's good too
+    xpath += '[not(descendant-or-self::*[text()])]'
+
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_title_icon(arch):
+    """An icon with fa- class or in a button must have title in its tag, parents, descendants or have text."""
+    valid_title_attrs = {'title', 't-att-title', 't-attf-title'}
+    valid_t_attrs = {'t-value', 't-raw', 't-field', 't-esc'}
+    valid_attrs = valid_title_attrs | valid_t_attrs
+    valid_title_attrs_xpath = ' or '.join('@' + attr for attr in valid_title_attrs)
+    valid_attrs_xpath = ' or '.join('@' + attr for attr in valid_attrs)
+
+    # Select elements with class begining by 'fa-'
+    xpath = '(//*[contains(concat(" ", @class), " fa-")'
+    xpath += ' or contains(concat(" ", @t-att-class), " fa-")'
+    xpath += ' or contains(concat(" ", @t-attf-class), " fa-")]'
+    xpath += ' | //button[@icon])'
+    # Elements with accessibility or string attrs are good
+    xpath += '[not(' + valid_attrs_xpath + ')]'
+    # And we ignore all elements with describing in children
+    xpath += '[not(//*[' + valid_attrs_xpath + '])]'
+    # Aria label can be on ancestors
+    xpath += '[not(ancestor[' + valid_title_attrs_xpath + '])]'
+    # Labels provide text by definition
+    xpath += '[not(descendant-or-self::label)]'
+    # Buttons can have a string attribute
+    xpath += '[not(descendant-or-self::button[@string])]'
+    # Fields have labels
+    xpath += '[not(descendant-or-self::field)]'
+    # And finally, if there is some text, it's good too
+    xpath += '[not(descendant-or-self::*[text()])]'
+
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_simili_button(arch):
+    """A simili button must be tagged with "role='button'"."""
+    # Select elements with class 'btn'
+    xpath = '//a[contains(concat(" ", @class), " btn")'
+    xpath += ' or contains(concat(" ", @t-att-class), " btn")'
+    xpath += ' or contains(concat(" ", @t-attf-class), " btn")]'
+    xpath += '[not(@role="button")]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_simili_dropdown(arch):
+    """A simili dropdown must be tagged with "role='menu'"."""
+    xpath = '//*[contains(concat(" ", @class, " "), " dropdown-menu ")'
+    xpath += ' or contains(concat(" ", @t-att-class, " "), " dropdown-menu ")'
+    xpath += ' or contains(concat(" ", @t-attf-class, " "), " dropdown-menu ")]'
+    xpath += '[not(@role="menu")]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_simili_progressbar(arch):
+    """A simili progressbar must be tagged with "role='progressbar'" and have
+    aria-valuenow, aria-valuemin and aria-valuemax attributes."""
+    # Select elements with class 'btn'
+    xpath = '//*[contains(concat(" ", @class, " "), " o_progressbar ")'
+    xpath += ' or contains(concat(" ", @t-att-class, " "), " o_progressbar ")'
+    xpath += ' or contains(concat(" ", @t-attf-class, " "), " o_progressbar ")]'
+    xpath += '[not(self::progress)]'
+    xpath += '[not(@role="progressbar")]'
+    xpath += '[not(@aria-valuenow or @t-att-aria-valuenow or @t-attf-aria-valuenow)]'
+    xpath += '[not(@aria-valuemin or @t-att-aria-valuemin or @t-attf-aria-valuemin)]'
+    xpath += '[not(@aria-valuemax or @t-att-aria-valuemax or @t-attf-aria-valuemax)]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_dialog(arch):
+    """A dialog must use role="dialog" and its header, body and footer contents must use <header/>, <main/> and <footer/>."""
+    # Select elements with class 'btn'
+    xpath = '//*[contains(concat(" ", @class, " "), " modal ")'
+    xpath += ' or contains(concat(" ", @t-att-class, " "), " modal ")'
+    xpath += ' or contains(concat(" ", @t-attf-class, " "), " modal ")]'
+    xpath += '[not(@role="dialog")]'
+    if arch.xpath(xpath):
+        return "Warning"
+
+    xpath = '//*[contains(concat(" ", @class, " "), " modal-header ")'
+    xpath += ' or contains(concat(" ", @t-att-class, " "), " modal-header ")'
+    xpath += ' or contains(concat(" ", @t-attf-class, " "), " modal-header ")]'
+    xpath += '[not(self::header)]'
+    if arch.xpath(xpath):
+        return "Warning"
+
+    xpath = '//*[contains(concat(" ", @class, " "), " modal-body ")'
+    xpath += ' or contains(concat(" ", @t-att-class, " "), " modal-body ")'
+    xpath += ' or contains(concat(" ", @t-attf-class, " "), " modal-body ")]'
+    xpath += '[not(self::main)]'
+    if arch.xpath(xpath):
+        return "Warning"
+
+    xpath = '//*[contains(concat(" ", @class, " "), " modal-footer ")'
+    xpath += ' or contains(concat(" ", @t-att-class, " "), " modal-footer ")'
+    xpath += ' or contains(concat(" ", @t-attf-class, " "), " modal-footer ")]'
+    xpath += '[not(self::footer)]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_simili_tabpanel(arch):
+    """A tab panel with tab-pane class must have role="tabpanel"."""
+    # Select elements with class 'btn'
+    xpath = '//*[contains(concat(" ", @class, " "), " tab-pane ")'
+    xpath += ' or contains(concat(" ", @t-att-class, " "), " tab-pane ")'
+    xpath += ' or contains(concat(" ", @t-attf-class, " "), " tab-pane ")]'
+    xpath += '[not(@role="tabpanel")]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_simili_tab(arch):
+    """A tab link must have role="tab", a link to an id (without #) by aria-controls."""
+    # Select elements with class 'btn'
+    xpath = '//*[@data-toggle="tab"]'
+    xpath += '[not(@role="tab")'
+    xpath += 'or not(@aria-controls or @t-att-aria-controls or @t-attf-aria-controls)'
+    xpath += 'or contains(@aria-controls, "#") or contains(@t-att-aria-controls, "#")]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_simili_tablist(arch):
+    """A tab list with class nav-tabs must have role="tablist"."""
+    # Select elements with class 'btn'
+    xpath = '//*[contains(concat(" ", @class, " "), " nav-tabs ")'
+    xpath += ' or contains(concat(" ", @t-att-class, " "), " nav-tabs ")'
+    xpath += ' or contains(concat(" ", @t-attf-class, " "), " nav-tabs ")]'
+    xpath += '[not(@role="tablist")]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_focusable_button(arch):
+    """A simili button must be with a `button`, an `input` (with type `button`, `submit` or `reset`) or a `a` tag."""
+    xpath = '//*[contains(concat(" ", @class), " btn")'
+    xpath += ' or contains(concat(" ", @t-att-class), " btn")'
+    xpath += ' or contains(concat(" ", @t-attf-class), " btn")]'
+    xpath += '[not(self::a)]'
+    xpath += '[not(self::button)]'
+    xpath += '[not(self::select)]'
+    xpath += '[not(self::input[@type="button"])]'
+    xpath += '[not(self::input[@type="submit"])]'
+    xpath += '[not(self::input[@type="reset"])]'
+    xpath += '[not(contains(@class, "btn-group"))]'
+    xpath += '[not(contains(@t-att-class, "btn-group"))]'
+    xpath += '[not(contains(@t-attf-class, "btn-group"))]'
+    xpath += '[not(contains(@class, "btn-toolbar"))]'
+    xpath += '[not(contains(@t-att-class, "btn-toolbar"))]'
+    xpath += '[not(contains(@t-attf-class, "btn-toolbar"))]'
+    xpath += '[not(contains(@class, "btn-ship"))]'
+    xpath += '[not(contains(@t-att-class, "btn-ship"))]'
+    xpath += '[not(contains(@t-attf-class, "btn-ship"))]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_prohibited_none_role(arch):
+    """A role can't be `none` or `presentation`. All your elements must be accessible with screen readers, describe it."""
+    xpath = '//*[@role="none" or @role="presentation"]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True
+
+@validate('calendar', 'diagram', 'form', 'graph', 'kanban', 'pivot', 'search', 'tree')
+def valid_alerts(arch):
+    """An alert (class alert-*) must have an alert, alertdialog or status role. Please use alert and alertdialog only for what expects to stop any activity to be read immediatly."""
+    xpath = '//*[contains(concat(" ", @class), " alert-")'
+    xpath += ' or contains(concat(" ", @t-att-class), " alert-")'
+    xpath += ' or contains(concat(" ", @t-attf-class), " alert-")]'
+    xpath += '[not(contains(@class, "alert-link") or contains(@t-att-class, "alert-link")'
+    xpath += ' or contains(@t-attf-class, "alert-link"))]'
+    xpath += '[not(@role="alert")]'
+    xpath += '[not(@role="alertdialog")]'
+    xpath += '[not(@role="status")]'
+    if arch.xpath(xpath):
+        return "Warning"
+    return True