diff --git a/firmware/rust1/Cargo.lock b/firmware/rust1/Cargo.lock
index cad3501ee83190e952d33627698bd789b97b22b3..1826c0d37baec39b756e34c094e36fb9b5770356 100644
--- a/firmware/rust1/Cargo.lock
+++ b/firmware/rust1/Cargo.lock
@@ -1027,7 +1027,6 @@ name = "heizung"
 version = "0.1.0"
 dependencies = [
  "byte-slice-cast 1.2.2",
- "byteorder",
  "cortex-m",
  "cortex-m-rt",
  "crc",
diff --git a/firmware/rust1/Cargo.toml b/firmware/rust1/Cargo.toml
index 3ea67b9473f3ed25c70a997f5696eca58746186a..d2db0ff56b5059dba886271b197a64c6bfae76be 100644
--- a/firmware/rust1/Cargo.toml
+++ b/firmware/rust1/Cargo.toml
@@ -56,7 +56,6 @@ pio = "0.2.1"
 
 heapless = "0.7.16"
 crc = "3.0.1"
-byteorder = "1.4.3"
 
 [profile.release]
 debug = true
diff --git a/firmware/rust1/src/modbus_server.rs b/firmware/rust1/src/modbus_server.rs
index 14511a68f1da8c2999634181fc80c52256f642f4..be277c41b565c11f8741c333c9d276a1379c958f 100644
--- a/firmware/rust1/src/modbus_server.rs
+++ b/firmware/rust1/src/modbus_server.rs
@@ -4,8 +4,6 @@ use futures::Future;
 use heapless::Vec;
 use crc::{Crc, CRC_16_MODBUS, Digest};
 use embassy_rp::uart;
-use core::fmt::Write;
-use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
 
 use crate::rs485::{RS485Handler};
 
@@ -102,18 +100,20 @@ impl<REGS: ModbusRegisters> ModbusServer<REGS> {
         txbuf.clear();
         let capacity = txbuf.capacity();
 
-        let map_err = |x: Result<(), ()> | x.or(Err(ServerDeviceFailure));
+        fn map_err<T>(x: Result<(), T>) -> Result<(), ModbusErrorCode> {
+            x.or(Err(ServerDeviceFailure))
+        }
         fn push(txbuf: &mut Vec<u8, BUF_LENGTH>, x: u8) -> Result<(), ModbusErrorCode> {
-            map_err(txbuf.push(x));
+            map_err(txbuf.push(x))
         }
         fn push_many(txbuf: &mut Vec<u8, BUF_LENGTH>, xs: &[u8]) -> Result<(), ModbusErrorCode> {
             for x in xs {
-                push(txbuf, x)?;
+                push(txbuf, *x)?;
             }
             Ok(())
         }
         fn push_u16be(txbuf: &mut Vec<u8, BUF_LENGTH>, x: u16) -> Result<(), ModbusErrorCode> {
-            map_err(txbuf.write_u16::<BigEndian>(x));
+            push_many(txbuf, &x.to_be_bytes())
         }
     
         // see https://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf
@@ -210,7 +210,7 @@ impl<REGS: ModbusRegisters> ModbusServer<REGS> {
                 let actual_new_value = self.regs.write_register(rxbuf[0], start, value)?;
                 if should_reply {
                     push_many(txbuf, &rxbuf[0..4])?;
-                    push_u16be(txbuf, value)?;
+                    push_u16be(txbuf, actual_new_value)?;
                 }
                 Ok(())
             },