diff --git a/addons/point_of_sale/data/point_of_sale_data.xml b/addons/point_of_sale/data/point_of_sale_data.xml
index a1dc7f0e071f534701e8d60717388342576f6e27..0dfa33f862a169d5f4ebc3c0229595c4d4305975 100644
--- a/addons/point_of_sale/data/point_of_sale_data.xml
+++ b/addons/point_of_sale/data/point_of_sale_data.xml
@@ -42,16 +42,9 @@
             <field name="image" type="base64" file="point_of_sale/static/img/product_product_49-image.jpg"/>
         </record>
 
-        <record id="pos_sale_journal" model="account.journal">
-            <field name="name">Point of Sale</field>
-            <field name="code">POSS</field>
-            <field name="type">sale</field>
-            <!-- avoid being selected as default journal -->
-            <field name="sequence">20</field>
-        </record>
-
         <record id="uom.product_uom_categ_unit" model="uom.category">
             <field name="is_pos_groupable">True</field>
         </record>
+        <function model="pos.config" name="post_install_pos_localisation" />
     </data>
 </odoo>
diff --git a/addons/point_of_sale/models/__init__.py b/addons/point_of_sale/models/__init__.py
index 70d1073b2e5668753eab2f26924463f83726d632..5cc88b2c693ea76f70462a7378bf9d5ca3605127 100644
--- a/addons/point_of_sale/models/__init__.py
+++ b/addons/point_of_sale/models/__init__.py
@@ -5,6 +5,7 @@ from . import account_bank_statement
 from . import account_journal
 from . import account_tax
 from . import barcode_rule
+from . import chart_template
 from . import digest
 from . import pos_category
 from . import pos_config
diff --git a/addons/point_of_sale/models/chart_template.py b/addons/point_of_sale/models/chart_template.py
new file mode 100644
index 0000000000000000000000000000000000000000..a1a97c01ffebcaa883e9a145dfefd9ab9747e679
--- /dev/null
+++ b/addons/point_of_sale/models/chart_template.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from odoo import api, models
+
+
+class AccountChartTemplate(models.Model):
+    _inherit = 'account.chart.template'
+
+    def _create_bank_journals(self, company, acc_template_ref):
+        """
+        Add the payment journals to the existing pos config
+        """
+        journals = super(AccountChartTemplate, self)._create_bank_journals(company, acc_template_ref)
+        self.env['pos.config'].assign_payment_journals(companies=company)
+        return journals
+
+    @api.model
+    def generate_journals(self, acc_template_ref, company, journals_dict=None):
+        res = super(AccountChartTemplate, self).generate_journals(acc_template_ref, company, journals_dict)
+        self.env['pos.config'].generate_pos_journal(companies=company)
+        return res
diff --git a/addons/point_of_sale/models/pos_config.py b/addons/point_of_sale/models/pos_config.py
index e9f3c4e40f69287cf276cad5fa3f1466bf372eb2..8fd60d0f66288a5fbe6ffff674e88044b78e937f 100644
--- a/addons/point_of_sale/models/pos_config.py
+++ b/addons/point_of_sale/models/pos_config.py
@@ -508,3 +508,41 @@ class PosConfig(models.Model):
             'view_id': False,
             'type': 'ir.actions.act_window',
         }
+
+    # All following methods are made to create data needed in POS, when a localisation
+    # is installed, or if POS is installed on database having companies that already have
+    # a localisation installed
+    @api.model
+    def post_install_pos_localisation(self):
+        self.assign_payment_journals()
+        self.generate_pos_journal()
+
+    @api.model
+    def assign_payment_journals(self, companies=False):
+        self = self.sudo()
+        if not companies:
+            companies = self.env['res.company'].search([])
+        for company in companies:
+            if company.chart_template_id:
+                cash_journal = self.env['account.journal'].search([('company_id', '=', company.id), ('type', '=', 'cash')], limit=1)
+                cash_journal.write({'journal_user':True})
+                existing_pos_config = self.env['pos.config'].search([('company_id', '=', company.id), ('journal_ids', '=', False)])
+                existing_pos_config.write({'journal_ids': [(6, 0, cash_journal.ids)]})
+
+    @api.model
+    def generate_pos_journal(self, companies=False):
+        self = self.sudo()
+        if not companies:
+            companies = self.env['res.company'].search([])
+        for company in companies:
+            pos_journal = self.env['account.journal'].search([('company_id', '=', company.id), ('code', '=', 'POSS')])
+            if company.chart_template_id and not pos_journal:
+                pos_journal = self.env['account.journal'].create({
+                    'type': 'sale',
+                    'name': 'Point of Sale',
+                    'code': 'POSS',
+                    'company_id': company.id,
+                    'sequence': 20
+                })
+                existing_pos_config = self.env['pos.config'].search([('company_id', '=', company.id), ('journal_id', '=', False)])
+                existing_pos_config.write({'journal_id': pos_journal.id})