diff --git a/lightmotif-io/src/error.rs b/lightmotif-io/src/error.rs
index bfd5a2f30d0826abef9bc3e15e8a1436de636832..38944abc32bc262a5cad212d6fcbece98d3f6276 100644
--- a/lightmotif-io/src/error.rs
+++ b/lightmotif-io/src/error.rs
@@ -1,13 +1,14 @@
 use std::fmt::Display;
 use std::fmt::Formatter;
+use std::sync::Arc;
 
 use nom::error::Error as NomError;
 
-#[derive(Debug)]
+#[derive(Clone, Debug)]
 pub enum Error {
     InvalidData,
-    Io(std::io::Error),
-    Nom(NomError<String>),
+    Io(Arc<std::io::Error>),
+    Nom(Arc<NomError<String>>),
 }
 
 impl From<lightmotif::err::InvalidData> for Error {
@@ -18,13 +19,13 @@ impl From<lightmotif::err::InvalidData> for Error {
 
 impl From<std::io::Error> for Error {
     fn from(error: std::io::Error) -> Self {
-        Error::Io(error)
+        Error::Io(Arc::new(error))
     }
 }
 
 impl From<NomError<&'_ str>> for Error {
     fn from(error: NomError<&'_ str>) -> Self {
-        Error::Nom(NomError::new(error.input.to_string(), error.code))
+        Error::Nom(Arc::new(NomError::new(error.input.to_string(), error.code)))
     }
 }
 
diff --git a/lightmotif-io/src/jaspar/mod.rs b/lightmotif-io/src/jaspar/mod.rs
index 5154cd97959b583923c96722e86f21c5e2f250af..4c69a67963f9777d872a5aab2c406ea5824a1eef 100644
--- a/lightmotif-io/src/jaspar/mod.rs
+++ b/lightmotif-io/src/jaspar/mod.rs
@@ -96,7 +96,7 @@ impl<B: BufRead> Iterator for Reader<B> {
                 let text = match std::str::from_utf8(bytes) {
                     Ok(text) => text,
                     Err(_) => {
-                        return Some(Err(Error::Io(std::io::Error::new(
+                        return Some(Err(Error::from(std::io::Error::new(
                             std::io::ErrorKind::InvalidData,
                             "decoding error",
                         ))));
diff --git a/lightmotif-io/src/jaspar16/mod.rs b/lightmotif-io/src/jaspar16/mod.rs
index 702f42f09756aaf9e40f46a5be485ba86f20c24d..e1ec1d54d3acb118d54a2a65b4e35cd4922c241d 100644
--- a/lightmotif-io/src/jaspar16/mod.rs
+++ b/lightmotif-io/src/jaspar16/mod.rs
@@ -94,7 +94,7 @@ impl<B: BufRead, A: Alphabet> Iterator for Reader<B, A> {
                 let text = match std::str::from_utf8(bytes) {
                     Ok(text) => text,
                     Err(_) => {
-                        return Some(Err(Error::Io(std::io::Error::new(
+                        return Some(Err(Error::from(std::io::Error::new(
                             std::io::ErrorKind::InvalidData,
                             "decoding error",
                         ))));