diff --git a/src/ecss.rs b/src/ecss.rs
index 5eec1d0..c7140d9 100644
--- a/src/ecss.rs
+++ b/src/ecss.rs
@@ -41,7 +41,13 @@ pub enum PusError {
     NoRawData,
     /// CRC16 needs to be calculated first
     CrcCalculationMissing,
-    PacketError(ByteConversionError),
+    ByteConversionError(ByteConversionError),
+}
+
+impl From<ByteConversionError> for PusError {
+    fn from(e: ByteConversionError) -> Self {
+        PusError::ByteConversionError(e)
+    }
 }
 
 pub trait PusPacket: CcsdsPacket {
diff --git a/src/tc.rs b/src/tc.rs
index 722627c..5708a38 100644
--- a/src/tc.rs
+++ b/src/tc.rs
@@ -336,22 +336,21 @@ impl<'slice> PusTc<'slice> {
         let tc_header_len = size_of::<zc::PusTcSecondaryHeader>();
         let total_size = self.len_packed();
         if total_size > slice.len() {
-            return Err(PusError::PacketError(ByteConversionError::ToSliceTooSmall(
-                SizeMissmatch {
-                    found: slice.len(),
-                    expected: total_size,
-                },
-            )));
+            return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch {
+                found: slice.len(),
+                expected: total_size,
+            })
+            .into());
         }
         sph_zc
             .to_bytes(&mut slice[curr_idx..curr_idx + CCSDS_HEADER_LEN])
-            .ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
+            .ok_or(ByteConversionError::ZeroCopyToError)?;
 
         curr_idx += CCSDS_HEADER_LEN;
         let sec_header = zc::PusTcSecondaryHeader::try_from(self.sec_header).unwrap();
         sec_header
             .write_to_bytes(&mut slice[curr_idx..curr_idx + tc_header_len])
-            .ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
+            .ok_or(ByteConversionError::ZeroCopyToError)?;
 
         curr_idx += tc_header_len;
         if let Some(app_data) = self.app_data {
@@ -410,9 +409,7 @@ impl<'slice> PusTc<'slice> {
         let mut current_idx = 0;
         let sph =
             crate::zc::SpHeader::from_bytes(&slice[current_idx..current_idx + CCSDS_HEADER_LEN])
-                .ok_or(PusError::PacketError(
-                    ByteConversionError::ZeroCopyFromError,
-                ))?;
+                .ok_or(ByteConversionError::ZeroCopyFromError)?;
         current_idx += CCSDS_HEADER_LEN;
         let total_len = sph.total_len();
         if raw_data_len < total_len || total_len < PUS_TC_MIN_LEN_WITHOUT_APP_DATA {
@@ -421,9 +418,7 @@ impl<'slice> PusTc<'slice> {
         let sec_header = zc::PusTcSecondaryHeader::from_bytes(
             &slice[current_idx..current_idx + PUC_TC_SECONDARY_HEADER_LEN],
         )
-        .ok_or(PusError::PacketError(
-            ByteConversionError::ZeroCopyFromError,
-        ))?;
+        .ok_or(ByteConversionError::ZeroCopyFromError)?;
         current_idx += PUC_TC_SECONDARY_HEADER_LEN;
         let raw_data = &slice[0..total_len];
         let pus_tc = PusTc {
@@ -636,7 +631,7 @@ mod tests {
         assert!(res.is_err());
         let err = res.unwrap_err();
         match err {
-            PusError::PacketError(err) => match err {
+            PusError::ByteConversionError(err) => match err {
                 ByteConversionError::ToSliceTooSmall(missmatch) => {
                     assert_eq!(missmatch.expected, pus_tc.len_packed());
                     assert_eq!(missmatch.found, 12);
diff --git a/src/tm.rs b/src/tm.rs
index debc676..a56337a 100644
--- a/src/tm.rs
+++ b/src/tm.rs
@@ -314,23 +314,22 @@ impl<'slice> PusTm<'slice> {
         let sph_zc = crate::zc::SpHeader::from(self.sp_header);
         let total_size = self.len_packed();
         if total_size > slice.len() {
-            return Err(PusError::PacketError(ByteConversionError::ToSliceTooSmall(
-                SizeMissmatch {
-                    found: slice.len(),
-                    expected: total_size,
-                },
-            )));
+            return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch {
+                found: slice.len(),
+                expected: total_size,
+            })
+            .into());
         }
         sph_zc
             .to_bytes(&mut slice[curr_idx..curr_idx + CCSDS_HEADER_LEN])
-            .ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
+            .ok_or(ByteConversionError::ZeroCopyToError)?;
 
         curr_idx += CCSDS_HEADER_LEN;
         let sec_header_len = size_of::<zc::PusTmSecHeaderWithoutTimestamp>();
         let sec_header = zc::PusTmSecHeaderWithoutTimestamp::try_from(self.sec_header).unwrap();
         sec_header
             .write_to_bytes(&mut slice[curr_idx..curr_idx + sec_header_len])
-            .ok_or(PusError::PacketError(ByteConversionError::ZeroCopyToError))?;
+            .ok_or(ByteConversionError::ZeroCopyToError)?;
         curr_idx += sec_header_len;
         let timestamp_len = self.sec_header.time_stamp.len();
         slice[curr_idx..curr_idx + timestamp_len].copy_from_slice(self.sec_header.time_stamp);
@@ -399,9 +398,7 @@ impl<'slice> PusTm<'slice> {
         let mut current_idx = 0;
         let sph =
             crate::zc::SpHeader::from_bytes(&slice[current_idx..current_idx + CCSDS_HEADER_LEN])
-                .ok_or(PusError::PacketError(
-                    ByteConversionError::ZeroCopyFromError,
-                ))?;
+                .ok_or(ByteConversionError::ZeroCopyFromError)?;
         current_idx += 6;
         let total_len = sph.total_len();
         if raw_data_len < total_len || total_len < PUS_TM_MIN_LEN_WITHOUT_SOURCE_DATA {
@@ -410,9 +407,7 @@ impl<'slice> PusTm<'slice> {
         let sec_header_zc = zc::PusTmSecHeaderWithoutTimestamp::from_bytes(
             &slice[current_idx..current_idx + PUC_TM_MIN_SEC_HEADER_LEN],
         )
-        .ok_or(PusError::PacketError(
-            ByteConversionError::ZeroCopyFromError,
-        ))?;
+        .ok_or(ByteConversionError::ZeroCopyFromError)?;
         current_idx += PUC_TM_MIN_SEC_HEADER_LEN;
         let zc_sec_header_wrapper = zc::PusTmSecHeader {
             zc_header: sec_header_zc,
@@ -580,9 +575,9 @@ mod tests {
         let res = pus_tm.write_to_bytes(&mut buf);
         assert!(res.is_err());
         let error = res.unwrap_err();
-        assert!(matches!(error, PusError::PacketError { .. }));
+        assert!(matches!(error, PusError::ByteConversionError { .. }));
         match error {
-            PusError::PacketError(err) => match err {
+            PusError::ByteConversionError(err) => match err {
                 ByteConversionError::ToSliceTooSmall(size_missmatch) => {
                     assert_eq!(size_missmatch.expected, 22);
                     assert_eq!(size_missmatch.found, 16);