diff --git a/src/sand-wedge.cc b/src/sand-wedge.cc
index 6f7dff09cb1482ad859ec6bfd3cb0de0da37bd66..0e71cefceca0dd43da071a46025412534eed4ee3 100644
--- a/src/sand-wedge.cc
+++ b/src/sand-wedge.cc
@@ -213,6 +213,9 @@ int main(int argc, char *argv[]) {
     auto const firstRestart = parset.get<size_t>("restarts.first");
     auto const restartSpacing = parset.get<size_t>("restarts.spacing");
     auto const restartTemplate = parset.get<std::string>("restarts.template");
+    auto const restartDirectory =
+        boost::filesystem::path(restartTemplate).parent_path();
+
     if (firstRestart != 0)
       DataIO::loadData(programState,
                        str(boost::format(restartTemplate) % firstRestart));
@@ -282,9 +285,12 @@ int main(int argc, char *argv[]) {
       specialVelocityWriter.write(velocity);
       specialDisplacementWriter.write(displacement);
 
-      if (programState.timeStep % restartSpacing == 0)
+      if (programState.timeStep % restartSpacing == 0) {
+        if (!boost::filesystem::is_directory(restartDirectory))
+          boost::filesystem::create_directories(restartDirectory);
         DataIO::writeData(programState, str(boost::format(restartTemplate) %
                                             programState.timeStep));
+      }
 
       if (parset.get<bool>("io.writeVTK")) {
         ScalarVector stress;