diff --git a/addons/point_of_sale/doc/barcode_test_sheet2.svg b/addons/point_of_sale/doc/barcode_test_sheet2.svg
new file mode 100644
index 00000000000..11f852bd5c9
--- /dev/null
+++ b/addons/point_of_sale/doc/barcode_test_sheet2.svg
@@ -0,0 +1,1108 @@
+
+
+
+
diff --git a/addons/point_of_sale/doc/barcode_test_sheet4.pdf b/addons/point_of_sale/doc/barcode_test_sheet4.pdf
new file mode 100644
index 00000000000..aff24aefd9d
Binary files /dev/null and b/addons/point_of_sale/doc/barcode_test_sheet4.pdf differ
diff --git a/addons/point_of_sale/doc/barcode_test_sheet4.svg b/addons/point_of_sale/doc/barcode_test_sheet4.svg
new file mode 100644
index 00000000000..671d862519c
--- /dev/null
+++ b/addons/point_of_sale/doc/barcode_test_sheet4.svg
@@ -0,0 +1,1210 @@
+
+
+
+
diff --git a/addons/point_of_sale/doc/barcode_test_sheet_new.svg b/addons/point_of_sale/doc/barcode_test_sheet_new.svg
new file mode 100644
index 00000000000..57dce3dc013
--- /dev/null
+++ b/addons/point_of_sale/doc/barcode_test_sheet_new.svg
@@ -0,0 +1,506 @@
+
+
+
+
diff --git a/addons/point_of_sale/static/src/img/icons/bancontact.svg b/addons/point_of_sale/static/src/img/icons/bancontact.svg
new file mode 100644
index 00000000000..70604078014
--- /dev/null
+++ b/addons/point_of_sale/static/src/img/icons/bancontact.svg
@@ -0,0 +1,1114 @@
+
+
\ No newline at end of file
diff --git a/addons/point_of_sale/static/src/img/icons/scan.svg b/addons/point_of_sale/static/src/img/icons/scan.svg
new file mode 100644
index 00000000000..4d753acf638
--- /dev/null
+++ b/addons/point_of_sale/static/src/img/icons/scan.svg
@@ -0,0 +1,984 @@
+
+
\ No newline at end of file
diff --git a/addons/point_of_sale/static/src/js/TODO.txt b/addons/point_of_sale/static/src/js/TODO.txt
new file mode 100644
index 00000000000..2742a0ffa49
--- /dev/null
+++ b/addons/point_of_sale/static/src/js/TODO.txt
@@ -0,0 +1,35 @@
+- Affichage Catégories doivent respecter le poids
+- Affichage Catégories par poids doivent avoir une hiérarchie plate
+- Le Onscreen keyboard ne fonctionne plus
+- Scrolling dans la sélection produit et dans
+ la liste de courses
+- Réductions
+- Redesign liste de courses
+- Redesign du receipt
+- générer les données de printing
+- popups d'erreur certainement buggés
+- bugs scans produits par prix par poids
+- si pas photo photo par defaut
+- WebSQL
+- Redesign header, bouton retour aux backend en mode caissière
+- bouton exit en mode caissière doit retourner au backend.
+- user preferences : désactiver la balance etc.
+- posting orders
+- login alternatif
+- bug ajout ligne payment à zero + curseur dedans + suppression + design plus grand
+- si case print via proxy cochée, alors on skip l'ecran receipt
+- bouton exit self checkout
+- demarrage en mode self-checkout si self-checkout
+- produits poid code barre non reconnus
+- activer popup client aux écrans self-checkout
+- discount pas plus grand que 100
+- numpad state parfois sans state
+- numpad state en mode pesée ?? le cacher ?
+- numpad dans l'écran payment pour pouvoir entrer le montant
+- différence de total. Methode d'arrondis
+Bellevue Kriek
+Chaufontaine pétillante 33
+Boon Framboise
+Chaufontaine pétillante 50 avec discount 50%
+- mettre toutes les lignes de payement dans l'order
+
diff --git a/addons/point_of_sale/tools/eanmaker b/addons/point_of_sale/tools/eanmaker
new file mode 100755
index 00000000000..463bd3dedfd
--- /dev/null
+++ b/addons/point_of_sale/tools/eanmaker
@@ -0,0 +1,56 @@
+#!/usr/bin/python
+
+import sys
+import re
+import math
+
+def ean_checksum(eancode):
+ """returns the checksum of an ean string of length 13, returns -1 if the string has the wrong length"""
+ if len(eancode) <> 13:
+ return -1
+ oddsum=0
+ evensum=0
+ total=0
+ eanvalue=eancode
+ reversevalue = eanvalue[::-1]
+ finalean=reversevalue[1:]
+
+ for i in range(len(finalean)):
+ if i % 2 == 0:
+ oddsum += int(finalean[i])
+ else:
+ evensum += int(finalean[i])
+ total=(oddsum * 3) + evensum
+
+ check = int(10 - math.ceil(total % 10.0)) %10
+ return check
+
+def check_ean(eancode):
+ """returns True if eancode is a valid ean13 string, or null"""
+ if not eancode:
+ return True
+ if len(eancode) <> 13:
+ return False
+ try:
+ int(eancode)
+ except:
+ return False
+ return ean_checksum(eancode) == int(eancode[-1])
+
+def sanitize_ean13(ean13):
+ """Creates and returns a valid ean13 from an invalid one"""
+ if not ean13:
+ return "0000000000000"
+ ean13 = re.sub("[A-Za-z]","0",ean13);
+ ean13 = re.sub("[^0-9]","",ean13);
+ ean13 = ean13[:13]
+ if len(ean13) < 13:
+ ean13 = ean13 + '0' * (13-len(ean13))
+ return ean13[:-1] + str(ean_checksum(ean13))
+
+def main():
+ for arg in sys.argv[1:]:
+ print sanitize_ean13(arg)
+
+if __name__ == '__main__':
+ main()