diff --git a/var/spack/repos/builtin/packages/dia/package.py b/var/spack/repos/builtin/packages/dia/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..1cb5910e46db8d049bb357e2db7447ea80a50abb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dia/package.py
@@ -0,0 +1,34 @@
+from spack import *
+
+class Dia(Package):
+    """Dia is a program for drawing structured diagrams."""
+    homepage  = 'https://wiki.gnome.org/Apps/Dia'
+    url       = 'https://ftp.gnome.org/pub/gnome/sources/dia/0.97/dia-0.97.3.tar.xz'
+
+    version('0.97.3',    '0e744a0f6a6c4cb6a089e4d955392c3c')
+
+    depends_on('gtkplus@2.6.0:')
+    depends_on('cairo')
+    #depends_on('libart') # optional dependency, not yet supported by spack.
+    depends_on('libpng')
+    depends_on('libxslt')
+    depends_on('python')
+    depends_on('swig')
+    # depends_on('py-gtk') # optional dependency, not yet supported by spack.
+
+    def url_for_version(self, version):
+        """Handle Dia's version-based custom URLs."""
+        return 'https://ftp.gnome.org/pub/gnome/source/dia/%s/dia-%s.tar.xz' % (version.up_to(2), version)
+
+    def install(self, spec, prefix):
+
+        # configure, build, install:
+        options = ['--prefix=%s' % prefix,
+                   '--with-cairo',
+                   '--with-xslt-prefix=%s' % spec['libxslt'].prefix,
+                   '--with-python',
+                   '--with-swig']
+
+        configure(*options)
+        make()
+        make('install')
diff --git a/var/spack/repos/builtin/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py
index 513a38ee8a49f931cd282a76109a1efd828b069f..f26e225b83eab20dc8a2b617e23d1c73833106a5 100644
--- a/var/spack/repos/builtin/packages/hdf5/package.py
+++ b/var/spack/repos/builtin/packages/hdf5/package.py
@@ -37,6 +37,7 @@ class Hdf5(Package):
     list_url = "http://www.hdfgroup.org/ftp/HDF5/releases"
     list_depth = 3
 
+    version('1.10.0', 'bdc935337ee8282579cd6bc4270ad199')
     version('1.8.16', 'b8ed9a36ae142317f88b0c7ef4b9c618')
     version('1.8.15', '03cccb5b33dbe975fdcd8ae9dc021f24')
     version('1.8.13', 'c03426e9e77d7766944654280b467289')
@@ -80,10 +81,16 @@ def install(self, spec, prefix):
         # sanity check in configure, so this doesn't merit a variant.
         extra_args.append("--enable-unsupported")
 
-        if '+debug' in spec:
-            extra_args.append('--enable-debug=all')
+        if spec.satisfies('@1.10:'):
+            if '+debug' in spec:
+                extra_args.append('--enable-build-mode=debug')
+            else:
+                extra_args.append('--enable-build-mode=production')
         else:
-            extra_args.append('--enable-production')
+            if '+debug' in spec:
+                extra_args.append('--enable-debug=all')
+            else:
+                extra_args.append('--enable-production')
 
         if '+shared' in spec:
             extra_args.append('--enable-shared')
@@ -139,5 +146,7 @@ def url_for_version(self, version):
             return "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-" + v + ".tar.gz"
         elif version < Version("1.7"):
             return "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-" + version.up_to(2) + "/hdf5-" + v + ".tar.gz"
-        else:
+        elif version < Version("1.10"):
             return "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-" + v + "/src/hdf5-" + v + ".tar.gz"
+        else:
+            return "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-" + version.up_to(2) + "/hdf5-" + v + "/src/hdf5-" + v + ".tar.gz"
diff --git a/var/spack/repos/builtin/packages/netlib-scalapack/package.py b/var/spack/repos/builtin/packages/netlib-scalapack/package.py
index d59f8e41fec200b3aeb0fe8841e5bd05d3c1b42f..276876d197b3dcef556252484231c1449dc3e7eb 100644
--- a/var/spack/repos/builtin/packages/netlib-scalapack/package.py
+++ b/var/spack/repos/builtin/packages/netlib-scalapack/package.py
@@ -18,6 +18,7 @@ class NetlibScalapack(Package):
 
     provides('scalapack')
 
+    depends_on('cmake')
     depends_on('mpi')
     depends_on('lapack')
 
diff --git a/var/spack/repos/builtin/packages/py-dask/package.py b/var/spack/repos/builtin/packages/py-dask/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..cf0a16f21e355dfd5a7d0ef888b955d78fad89d2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dask/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyDask(Package):
+    """Minimal task scheduling abstraction"""
+    homepage = "https://github.com/dask/dask/"
+    url      = "https://pypi.python.org/packages/source/d/dask/dask-0.8.1.tar.gz"
+
+    version('0.8.1', '5dd8e3a3823b3bc62c9a6d192e2cb5b4')
+
+    extends('python')
+
+    depends_on('py-setuptools')
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/repos/builtin/packages/py-decorator/package.py b/var/spack/repos/builtin/packages/py-decorator/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..abbd9f43d14f9536e433d9d072c1ce1486f8272b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-decorator/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyDecorator(Package):
+    """The aim of the decorator module it to simplify the usage of decorators for the average programmer, and to popularize decorators by showing various non-trivial examples."""
+    homepage = "https://github.com/micheles/decorator"
+    url      = "https://pypi.python.org/packages/source/d/decorator/decorator-4.0.9.tar.gz"
+
+    version('4.0.9', 'f12c5651ccd707e12a0abaa4f76cd69a')
+
+    extends('python')
+
+    depends_on('py-setuptools')
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/repos/builtin/packages/py-networkx/package.py b/var/spack/repos/builtin/packages/py-networkx/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..893146ec3ea86891275cb779dc74dae7ee195dba
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-networkx/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class PyNetworkx(Package):
+    """NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks."""
+    homepage = "http://networkx.github.io/"
+    url      = "https://pypi.python.org/packages/source/n/networkx/networkx-1.11.tar.gz"
+
+    version('1.11', '6ef584a879e9163013e9a762e1cf7cd1')
+
+    extends('python')
+
+    depends_on('py-decorator')
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/repos/builtin/packages/py-scikit-image/package.py b/var/spack/repos/builtin/packages/py-scikit-image/package.py
new file mode 100644
index 0000000000000000000000000000000000000000..22ce1f837407b52bdad258af0b9ee61991251ca3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-scikit-image/package.py
@@ -0,0 +1,20 @@
+from spack import *
+
+class PyScikitImage(Package):
+    """Image processing algorithms for SciPy, including IO, morphology, filtering, warping, color manipulation, object detection, etc."""
+    homepage = "http://scikit-image.org/"
+    url      = "https://pypi.python.org/packages/source/s/scikit-image/scikit-image-0.12.3.tar.gz"
+
+    version('0.12.3', '04ea833383e0b6ad5f65da21292c25e1')
+
+    extends('python', ignore=r'bin/.*\.py$|bin/f2py$')
+
+    depends_on('py-dask')
+    depends_on('py-pillow')
+    depends_on('py-networkx')
+    depends_on('py-six')
+    depends_on('py-scipy')
+    depends_on('py-matplotlib')
+
+    def install(self, spec, prefix):
+        python('setup.py', 'install', '--prefix=%s' % prefix)
diff --git a/var/spack/repos/builtin/packages/py-scikit-learn/package.py b/var/spack/repos/builtin/packages/py-scikit-learn/package.py
index 5b078ce9011ae4788abd1b6103f48ae63a3bcb91..2d7985b98c3bf67b7faeb41dedab0f27044cf626 100644
--- a/var/spack/repos/builtin/packages/py-scikit-learn/package.py
+++ b/var/spack/repos/builtin/packages/py-scikit-learn/package.py
@@ -7,8 +7,13 @@ class PyScikitLearn(Package):
 
     version('0.15.2', 'd9822ad0238e17b382a3c756ea94fe0d')
     version('0.16.1', '363ddda501e3b6b61726aa40b8dbdb7e')
+    version('0.17.1', 'a2f8b877e6d99b1ed737144f5a478dfc')
 
     extends('python')
 
+    depends_on('py-setuptools')
+    depends_on('py-numpy')
+    depends_on('py-scipy')
+
     def install(self, spec, prefix):
         python('setup.py', 'install', '--prefix=%s' % prefix)