diff --git a/var/spack/repos/builtin/packages/libmesh/package.py b/var/spack/repos/builtin/packages/libmesh/package.py
index ea81f5da73171e447fe0d043f4113c1e5fa0f4fe..6ceef8dbf634a1687390706f09ecdd6335f6239c 100644
--- a/var/spack/repos/builtin/packages/libmesh/package.py
+++ b/var/spack/repos/builtin/packages/libmesh/package.py
@@ -35,8 +35,22 @@ class Libmesh(Package):
 
     version('1.0.0', 'cb464fc63ea0b71b1e69fa3f5d4f93a4')
 
+    variant('mpi', default=True, description='Enables MPI parallelism')
+
+    depends_on('mpi', when='+mpi')
+
+    # Parallel version of libmesh needs parallel solvers
+    depends_on('petsc+mpi', when='+mpi')
+
     def install(self, spec, prefix):
-        configure('--prefix={0}'.format(prefix))
+        config_args = ["--prefix=%s" % prefix]
+
+        if '+mpi' in spec:
+            config_args.append('CC=%s' % spec['mpi'].mpicc)
+            config_args.append('CXX=%s' % spec['mpi'].mpicxx)
+            config_args.append('PETSC_DIR=%s' % spec['petsc'].prefix)
+
+        configure(*config_args)
 
         make()
         make('install')