diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 40f3f88..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*.pyc
-/build/
-/dist/
-easydict.egg-info/
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index fae779b..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: python
-python: 2.7
-sudo: false
-script: python easydict/__init__.py
diff --git a/CHANGES b/CHANGES
index 7fedc2b..5cd4234 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,12 @@
 CHANGELOG
 =========
 
+1.10 (unreleased)
+=================
+
+- Nothing changed yet.
+
+
 1.9 (2018-10-18)
 ================
 
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..47f184e
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,181 @@
+Metadata-Version: 2.1
+Name: easydict
+Version: 1.10.dev0
+Summary: Access dict values as attributes (works recursively).
+Home-page: https://github.com/makinacorpus/easydict
+Author: Mathieu Leplatre
+Author-email: mathieu.leplatre@makina-corpus.com
+License: LGPL-3.0
+Download-URL: http://pypi.python.org/pypi/easydict/
+Keywords: MBTiles,Mapnik
+Platform: UNKNOWN
+Classifier: Topic :: Utilities
+Classifier: Natural Language :: English
+Classifier: Operating System :: OS Independent
+Classifier: Intended Audience :: Developers
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
+Classifier: Programming Language :: Python :: 2.5
+Classifier: Programming Language :: Python :: 3.6
+License-File: LICENSE
+
+*EasyDict* allows to access dict values as attributes (works recursively). 
+A Javascript-like properties dot notation for python dicts.
+
+=====
+USAGE
+=====
+
+::
+
+    >>> from easydict import EasyDict as edict
+    >>> d = edict({'foo':3, 'bar':{'x':1, 'y':2}})
+    >>> d.foo
+    3
+    >>> d.bar.x
+    1
+    
+    >>> d = edict(foo=3)
+    >>> d.foo
+    3
+
+
+Very useful when exploiting parsed JSON content ! 
+
+::
+
+    >>> from easydict import EasyDict as edict
+    >>> from simplejson import loads
+    >>> j = """{
+    "Buffer": 12,
+    "List1": [
+        {"type" : "point", "coordinates" : [100.1,54.9] },
+        {"type" : "point", "coordinates" : [109.4,65.1] },
+        {"type" : "point", "coordinates" : [115.2,80.2] },
+        {"type" : "point", "coordinates" : [150.9,97.8] }
+    ]
+    }"""
+    >>> d = edict(loads(j))
+    >>> d.Buffer
+    12
+    >>> d.List1[0].coordinates[1]
+    54.9
+
+Can set attributes as easily as getting them :
+
+::
+
+    >>> d = EasyDict()
+    >>> d.foo = 3
+    >>> d.foo
+    3
+
+It is still a ``dict`` !
+
+::
+
+    >>> d = EasyDict(log=False)
+    >>> d.debug = True
+    >>> d.items()
+    [('debug', True), ('log', False)]
+
+Instance and class attributes are accessed like usual objects...
+
+::
+
+    >>> class Flower(EasyDict):
+    ...     power = 1
+    ...
+    >>> f = Flower({'height': 12})
+    >>> f.power
+    1
+    >>> f['power']
+    1
+
+=======
+LICENSE
+=======
+
+* Lesser GNU Public License
+
+=======
+AUTHORS
+=======
+
+* Mathieu Leplatre <mathieu.leplatre@makina-corpus.com>
+
+|makinacom|_
+
+.. |makinacom| image:: http://depot.makina-corpus.org/public/logo.gif
+.. _makinacom:  http://www.makina-corpus.com
+
+Similar tools
+=============
+
+* `TreeDict <http://pypi.python.org/pypi/treedict>`_, a fast and full-featured dict-like tree container.
+* `addict <https://github.com/mewwts/addict>`_
+
+
+=========
+CHANGELOG
+=========
+
+1.10 (unreleased)
+=================
+
+- Nothing changed yet.
+
+
+1.9 (2018-10-18)
+================
+
+* Fix issue #3 that update and pop now work correctly on EasyDicts.
+
+
+1.8 (2018-08-17)
+================
+
+* Update package classifiers.
+
+
+1.7 (2017-04-27)
+================
+
+* Prevent copying sub-EasyDicts on assignment to fix unpickling (#7, thanks @Chronos-Sk)
+
+1.6 (2015-01-27)
+================
+
+* Allow setting attributes via setting items (thanks phivos)
+
+1.5 (2014-08-07)
+================
+
+* Allow subclassing using self instead of class name (thanks Steve Engledow)
+
+1.4 (2011-03-13)
+================
+
+* Access class attributes like instance attributes
+
+1.3 (2012-02-08)
+================
+
+* Better documentation and tests
+
+1.2 (2011-06-08)
+================
+
+* Fix inclusion of README
+
+1.1 (2012-04-21)
+================
+
+* Switch to distutils2
+
+1.0 (2011-04-18)
+================
+
+* Initial working version
+
+
diff --git a/easydict.egg-info/PKG-INFO b/easydict.egg-info/PKG-INFO
new file mode 100644
index 0000000..47f184e
--- /dev/null
+++ b/easydict.egg-info/PKG-INFO
@@ -0,0 +1,181 @@
+Metadata-Version: 2.1
+Name: easydict
+Version: 1.10.dev0
+Summary: Access dict values as attributes (works recursively).
+Home-page: https://github.com/makinacorpus/easydict
+Author: Mathieu Leplatre
+Author-email: mathieu.leplatre@makina-corpus.com
+License: LGPL-3.0
+Download-URL: http://pypi.python.org/pypi/easydict/
+Keywords: MBTiles,Mapnik
+Platform: UNKNOWN
+Classifier: Topic :: Utilities
+Classifier: Natural Language :: English
+Classifier: Operating System :: OS Independent
+Classifier: Intended Audience :: Developers
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
+Classifier: Programming Language :: Python :: 2.5
+Classifier: Programming Language :: Python :: 3.6
+License-File: LICENSE
+
+*EasyDict* allows to access dict values as attributes (works recursively). 
+A Javascript-like properties dot notation for python dicts.
+
+=====
+USAGE
+=====
+
+::
+
+    >>> from easydict import EasyDict as edict
+    >>> d = edict({'foo':3, 'bar':{'x':1, 'y':2}})
+    >>> d.foo
+    3
+    >>> d.bar.x
+    1
+    
+    >>> d = edict(foo=3)
+    >>> d.foo
+    3
+
+
+Very useful when exploiting parsed JSON content ! 
+
+::
+
+    >>> from easydict import EasyDict as edict
+    >>> from simplejson import loads
+    >>> j = """{
+    "Buffer": 12,
+    "List1": [
+        {"type" : "point", "coordinates" : [100.1,54.9] },
+        {"type" : "point", "coordinates" : [109.4,65.1] },
+        {"type" : "point", "coordinates" : [115.2,80.2] },
+        {"type" : "point", "coordinates" : [150.9,97.8] }
+    ]
+    }"""
+    >>> d = edict(loads(j))
+    >>> d.Buffer
+    12
+    >>> d.List1[0].coordinates[1]
+    54.9
+
+Can set attributes as easily as getting them :
+
+::
+
+    >>> d = EasyDict()
+    >>> d.foo = 3
+    >>> d.foo
+    3
+
+It is still a ``dict`` !
+
+::
+
+    >>> d = EasyDict(log=False)
+    >>> d.debug = True
+    >>> d.items()
+    [('debug', True), ('log', False)]
+
+Instance and class attributes are accessed like usual objects...
+
+::
+
+    >>> class Flower(EasyDict):
+    ...     power = 1
+    ...
+    >>> f = Flower({'height': 12})
+    >>> f.power
+    1
+    >>> f['power']
+    1
+
+=======
+LICENSE
+=======
+
+* Lesser GNU Public License
+
+=======
+AUTHORS
+=======
+
+* Mathieu Leplatre <mathieu.leplatre@makina-corpus.com>
+
+|makinacom|_
+
+.. |makinacom| image:: http://depot.makina-corpus.org/public/logo.gif
+.. _makinacom:  http://www.makina-corpus.com
+
+Similar tools
+=============
+
+* `TreeDict <http://pypi.python.org/pypi/treedict>`_, a fast and full-featured dict-like tree container.
+* `addict <https://github.com/mewwts/addict>`_
+
+
+=========
+CHANGELOG
+=========
+
+1.10 (unreleased)
+=================
+
+- Nothing changed yet.
+
+
+1.9 (2018-10-18)
+================
+
+* Fix issue #3 that update and pop now work correctly on EasyDicts.
+
+
+1.8 (2018-08-17)
+================
+
+* Update package classifiers.
+
+
+1.7 (2017-04-27)
+================
+
+* Prevent copying sub-EasyDicts on assignment to fix unpickling (#7, thanks @Chronos-Sk)
+
+1.6 (2015-01-27)
+================
+
+* Allow setting attributes via setting items (thanks phivos)
+
+1.5 (2014-08-07)
+================
+
+* Allow subclassing using self instead of class name (thanks Steve Engledow)
+
+1.4 (2011-03-13)
+================
+
+* Access class attributes like instance attributes
+
+1.3 (2012-02-08)
+================
+
+* Better documentation and tests
+
+1.2 (2011-06-08)
+================
+
+* Fix inclusion of README
+
+1.1 (2012-04-21)
+================
+
+* Switch to distutils2
+
+1.0 (2011-04-18)
+================
+
+* Initial working version
+
+
diff --git a/easydict.egg-info/SOURCES.txt b/easydict.egg-info/SOURCES.txt
new file mode 100644
index 0000000..0f174b3
--- /dev/null
+++ b/easydict.egg-info/SOURCES.txt
@@ -0,0 +1,11 @@
+CHANGES
+LICENSE
+MANIFEST.in
+README.rst
+setup.py
+easydict/__init__.py
+easydict.egg-info/PKG-INFO
+easydict.egg-info/SOURCES.txt
+easydict.egg-info/dependency_links.txt
+easydict.egg-info/not-zip-safe
+easydict.egg-info/top_level.txt
\ No newline at end of file
diff --git a/easydict.egg-info/dependency_links.txt b/easydict.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/easydict.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/easydict.egg-info/not-zip-safe b/easydict.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/easydict.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/easydict.egg-info/top_level.txt b/easydict.egg-info/top_level.txt
new file mode 100644
index 0000000..66799b7
--- /dev/null
+++ b/easydict.egg-info/top_level.txt
@@ -0,0 +1 @@
+easydict
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..8bfd5a1
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,4 @@
+[egg_info]
+tag_build = 
+tag_date = 0
+
diff --git a/setup.py b/setup.py
index e83c84d..752ae8f 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ here = os.path.abspath(os.path.dirname(__file__))
 
 setup(
     name='easydict',
-    version='1.9',
+    version='1.10.dev0',
     author='Mathieu Leplatre',
     author_email='mathieu.leplatre@makina-corpus.com',
     url='https://github.com/makinacorpus/easydict',
@@ -15,7 +15,7 @@ setup(
     description="Access dict values as attributes (works recursively).",
     long_description=open(os.path.join(here, 'README.rst')).read() + '\n\n' +
                      open(os.path.join(here, 'CHANGES')).read(),
-    license='LPGL, see LICENSE file.',
+    license='LGPL-3.0',
     install_requires=[],
     packages=find_packages(),
     include_package_data=True,
@@ -26,6 +26,7 @@ setup(
                  'Operating System :: OS Independent',
                  'Intended Audience :: Developers',
                  'Development Status :: 5 - Production/Stable',
+                 'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)',
                  'Programming Language :: Python :: 2.5',
                  'Programming Language :: Python :: 3.6'],
 )