Repository: c410-f3r/wtx (language: rust)

Issue:
[ClientApiFramework] It is currently impossible to call sending methods with references
Due to how types are arranged, it is currently impossible to call a sending method using references.

```rust
let mut pkgs_aux = PkgsAux::from_minimum(&mut api, &mut deserializer, &mut transport_params);
let _ = trans.send(&mut pkgs_aux.custom_method().build(), &mut pkgs_aux);
```

```mermaid
flowchart TD;
    CustomPkg -- Implements --> HttpParams["Package&lt;A, DRSR, HttpParams&gt;"]
    CustomPkg -- Implements --> WsParams["Package&lt;A, DRSR, WsParams&gt;"]
```

```rust
pub trait SendingTransport: Transport {
  /// Sends a request without trying to retrieve any counterpart data.
  fn send<A, DRSR, P>(
    &mut self,
    pkg: &mut P,
    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
  ) -> impl Future<Output = Result<(), A::Error>>
  where
    A: Api,
    P: Package<A, DRSR, Self::Params>;
}
```

#### Observations

1. Endpoints should be placed under the API's struct.
2. Packages should define their de-serializers 
3. All `before_sending` should probably pass `PkgsAux`.


Discussion / hints:

Fix patch:
diff --git a/Cargo.lock b/Cargo.lock
index 74e78a42..55d79403 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -92,7 +92,7 @@ version = "0.7.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
 dependencies = [
- "getrandom",
+ "getrandom 0.2.15",
  "once_cell",
  "version_check",
 ]
@@ -183,9 +183,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
 
 [[package]]
 name = "aws-lc-rs"
-version = "1.12.1"
+version = "1.12.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ea835662a0af02443aa1396d39be523bbf8f11ee6fad20329607c480bea48c3"
+checksum = "4c2b7ddaa2c56a367ad27a094ad8ef4faacf8a617c2575acb2ba88949df999ca"
 dependencies = [
  "aws-lc-sys",
  "paste",
@@ -241,9 +241,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
 
 [[package]]
 name = "bcder"
-version = "0.7.4"
+version = "0.7.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c627747a6774aab38beb35990d88309481378558875a41da1a4b2e373c906ef0"
+checksum = "89ffdaa8c6398acd07176317eb6c1f9082869dd1cc3fee7c72c6354866b928cc"
 dependencies = [
  "bytes",
  "smallvec",
@@ -268,7 +268,7 @@ dependencies = [
  "regex",
  "rustc-hash",
  "shlex",
- "syn 2.0.96",
+ "syn 2.0.97",
  "which",
 ]
 
@@ -343,14 +343,14 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
 ]
 
 [[package]]
 name = "bumpalo"
-version = "3.16.0"
+version = "3.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
 
 [[package]]
 name = "bytecheck"
@@ -388,9 +388,9 @@ checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b"
 
 [[package]]
 name = "cc"
-version = "1.2.10"
+version = "1.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229"
+checksum = "e4730490333d58093109dc02c23174c3f4d490998c3fed3cc8e82d57afedb9cf"
 dependencies = [
  "jobserver",
  "libc",
@@ -474,9 +474,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "4.5.26"
+version = "4.5.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783"
+checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -484,9 +484,9 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.5.26"
+version = "4.5.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121"
+checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7"
 dependencies = [
  "anstyle",
  "clap_lex",
@@ -501,7 +501,7 @@ dependencies = [
  "heck",
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
 ]
 
 [[package]]
@@ -512,9 +512,9 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
 
 [[package]]
 name = "cmake"
-version = "0.1.52"
+version = "0.1.53"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e"
+checksum = "e24a03c8b52922d68a1589ad61032f2c1aa5a8158d2aa0d93c6e9534944bbad6"
 dependencies = [
  "cc",
 ]
@@ -533,9 +533,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.16"
+version = "0.2.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3"
+checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
 dependencies = [
  "libc",
 ]
@@ -562,7 +562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
 dependencies = [
  "generic-array 0.14.7",
- "rand_core",
+ "rand_core 0.6.4",
  "subtle",
  "zeroize",
 ]
@@ -583,9 +583,9 @@ version = "0.2.0-rc.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b0b8ce8218c97789f16356e7896b3714f26c2ee1079b79c0b7ae7064bb9089fa"
 dependencies = [
- "getrandom",
+ "getrandom 0.2.15",
  "hybrid-array",
- "rand_core",
+ "rand_core 0.6.4",
 ]
 
 [[package]]
@@ -624,7 +624,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
 ]
 
 [[package]]
@@ -678,7 +678,7 @@ dependencies = [
  "generic-array 0.14.7",
  "group",
  "hkdf",
- "rand_core",
+ "rand_core 0.6.4",
  "sec1",
  "subtle",
  "zeroize",
@@ -830,7 +830,7 @@ dependencies = [
  "hkdf",
  "hmac",
  "p256",
- "rand_core",
+ "rand_core 0.6.4",
  "sha2",
  "typenum",
 ]
@@ -863,7 +863,7 @@ version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
 dependencies = [
- "rand_core",
+ "rand_core 0.6.4",
  "subtle",
 ]
 
@@ -963,7 +963,19 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
 dependencies = [
  "cfg-if",
  "libc",
- "wasi",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.13.3+wasi-0.2.2",
+ "windows-targets",
 ]
 
 [[package]]
@@ -1005,7 +1017,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
 dependencies = [
  "ff",
- "rand_core",
+ "rand_core 0.6.4",
  "subtle",
 ]
 
@@ -1108,9 +1120,9 @@ dependencies = [
 
 [[package]]
 name = "httparse"
-version = "1.9.5"
+version = "1.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
+checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a"
 
 [[package]]
 name = "hybrid-array"
@@ -1146,9 +1158,9 @@ dependencies = [
 
 [[package]]
 name = "indexmap"
-version = "2.7.0"
+version = "2.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f"
+checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652"
 dependencies = [
  "equivalent",
  "hashbrown 0.15.2",
@@ -1227,9 +1239,9 @@ checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a"
 
 [[package]]
 name = "libfuzzer-sys"
-version = "0.4.8"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b9569d2f74e257076d8c6bfa73fb505b46b851e51ddaecc825944aa3bed17fa"
+checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75"
 dependencies = [
  "arbitrary",
  "cc",
@@ -1321,7 +1333,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
 dependencies = [
  "libc",
- "wasi",
+ "wasi 0.11.0+wasi-snapshot-preview1",
  "windows-sys 0.52.0",
 ]
 
@@ -1406,7 +1418,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
 dependencies = [
  "base64ct",
- "rand_core",
+ "rand_core 0.6.4",
  "subtle",
 ]
 
@@ -1493,7 +1505,7 @@ version = "0.2.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
 dependencies = [
- "zerocopy",
+ "zerocopy 0.7.35",
 ]
 
 [[package]]
@@ -1503,7 +1515,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac"
 dependencies = [
  "proc-macro2",
- "syn 2.0.96",
+ "syn 2.0.97",
 ]
 
 [[package]]
@@ -1584,8 +1596,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
 dependencies = [
  "libc",
- "rand_chacha",
- "rand_core",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
 ]
 
 [[package]]
@@ -1595,7 +1607,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
 dependencies = [
  "ppv-lite86",
- "rand_core",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
+dependencies = [
+ "ppv-lite86",
+ "rand_core 0.9.0",
 ]
 
 [[package]]
@@ -1604,7 +1626,17 @@ version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
 dependencies = [
- "getrandom",
+ "getrandom 0.2.15",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b08f3c9802962f7e1b25113931d94f43ed9725bebc59db9d0c3e9a23b67e15ff"
+dependencies = [
+ "getrandom 0.3.1",
+ "zerocopy 0.8.14",
 ]
 
 [[package]]
@@ -1668,7 +1700,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d"
 dependencies = [
  "cc",
  "cfg-if",
- "getrandom",
+ "getrandom 0.2.15",
  "libc",
  "spin",
  "untrusted",
@@ -1734,9 +1766,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
 
 [[package]]
 name = "rustix"
-version = "0.38.43"
+version = "0.38.44"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6"
+checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
 dependencies = [
  "bitflags 2.8.0",
  "errno",
@@ -1747,9 +1779,9 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.23.21"
+version = "0.23.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f287924602bf649d949c63dc8ac8b235fa5387d394020705b80c4eb597ce5b8"
+checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7"
 dependencies = [
  "aws-lc-rs",
  "once_cell",
@@ -1771,9 +1803,9 @@ dependencies = [
 
 [[package]]
 name = "rustls-pki-types"
-version = "1.10.1"
+version = "1.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37"
+checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
 
 [[package]]
 name = "rustls-webpki"
@@ -1795,9 +1827,9 @@ checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4"
 
 [[package]]
 name = "ryu"
-version = "1.0.18"
+version = "1.0.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd"
 
 [[package]]
 name = "seahash"
@@ -1835,14 +1867,14 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.136"
+version = "1.0.138"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "336a0c23cf42a38d9eaa7cd22c7040d04e1228a19a933890805ffd00a16437d2"
+checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949"
 dependencies = [
  "itoa",
  "memchr",
@@ -1902,7 +1934,7 @@ version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
 dependencies = [
- "rand_core",
+ "rand_core 0.6.4",
 ]
 
 [[package]]
@@ -1981,9 +2013,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.96"
+version = "2.0.97"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80"
+checksum = "5dabd04e3b9a8c3c03d5e743f5ef5e1207befc9de704d477f7198cc28049763e"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2028,7 +2060,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
 ]
 
 [[package]]
@@ -2080,7 +2112,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
 ]
 
 [[package]]
@@ -2116,9 +2148,9 @@ dependencies = [
 
 [[package]]
 name = "toml_edit"
-version = "0.22.22"
+version = "0.22.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5"
+checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee"
 dependencies = [
  "indexmap",
  "serde",
@@ -2146,7 +2178,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
 ]
 
 [[package]]
@@ -2187,9 +2219,9 @@ dependencies = [
 
 [[package]]
 name = "trybuild"
-version = "1.0.101"
+version = "1.0.103"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8dcd332a5496c026f1e14b7f3d2b7bd98e509660c04239c58b0ba38a12daded4"
+checksum = "b812699e0c4f813b872b373a4471717d9eb550da14b311058a4d9cf4173cbca6"
 dependencies = [
  "glob",
  "serde",
@@ -2208,9 +2240,9 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.14"
+version = "1.0.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
+checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034"
 
 [[package]]
 name = "universal-hash"
@@ -2240,9 +2272,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
 
 [[package]]
 name = "uuid"
-version = "1.12.0"
+version = "1.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "744018581f9a3454a9e15beb8a33b017183f1e7c0cd170232a2d1453b23a51c4"
+checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b"
 
 [[package]]
 name = "valuable"
@@ -2268,6 +2300,15 @@ version = "0.11.0+wasi-snapshot-preview1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
+[[package]]
+name = "wasi"
+version = "0.13.3+wasi-0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2"
+dependencies = [
+ "wit-bindgen-rt",
+]
+
 [[package]]
 name = "wasm-bindgen"
 version = "0.2.100"
@@ -2290,7 +2331,7 @@ dependencies = [
  "log",
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
  "wasm-bindgen-shared",
 ]
 
@@ -2312,7 +2353,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -2328,9 +2369,9 @@ dependencies = [
 
 [[package]]
 name = "webpki-roots"
-version = "0.26.7"
+version = "0.26.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e"
+checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9"
 dependencies = [
  "rustls-pki-types",
 ]
@@ -2449,13 +2490,22 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
 
 [[package]]
 name = "winnow"
-version = "0.6.24"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8d71a593cc5c42ad7876e2c1fda56f314f3754c084128833e64f1345ff8a03a"
+checksum = "7e49d2d35d3fad69b39b94139037ecfb4f359f08958b9c11e7315ce770462419"
 dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "wit-bindgen-rt"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c"
+dependencies = [
+ "bitflags 2.8.0",
+]
+
 [[package]]
 name = "wtx"
 version = "0.27.0"
@@ -2477,6 +2527,7 @@ dependencies = [
  "fastrand",
  "flate2",
  "foldhash",
+ "getrandom 0.3.1",
  "hashbrown 0.15.2",
  "hmac",
  "httparse",
@@ -2485,8 +2536,7 @@ dependencies = [
  "portable-atomic",
  "portable-atomic-util",
  "quick-protobuf",
- "rand_chacha",
- "rand_core",
+ "rand_chacha 0.9.0",
  "ring",
  "rust_decimal",
  "rustls",
@@ -2522,8 +2572,7 @@ version = "0.0.0"
 dependencies = [
  "pb-rs",
  "quick-protobuf",
- "rand_chacha",
- "rand_core",
+ "rand_chacha 0.9.0",
  "serde",
  "serde_json",
  "tokio",
@@ -2588,7 +2637,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
 dependencies = [
  "byteorder",
- "zerocopy-derive",
+ "zerocopy-derive 0.7.35",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a367f292d93d4eab890745e75a778da40909cab4d6ff8173693812f79c4a2468"
+dependencies = [
+ "zerocopy-derive 0.8.14",
 ]
 
 [[package]]
@@ -2599,7 +2657,18 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3931cb58c62c13adec22e38686b559c86a30565e16ad6e8510a337cedc611e1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.97",
 ]
 
 [[package]]
@@ -2619,7 +2688,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.96",
+ "syn 2.0.97",
 ]
 
 [[package]]
diff --git a/wtx-instances/Cargo.toml b/wtx-instances/Cargo.toml
index eb6caab6..03c9b436 100644
--- a/wtx-instances/Cargo.toml
+++ b/wtx-instances/Cargo.toml
@@ -89,7 +89,7 @@ required-features = ["wtx/http-server-framework"]
 [[example]]
 name = "http-server-framework-session"
 path = "http-server-framework-examples/http-server-framework-session.rs"
-required-features = ["rand_chacha", "rand_core", "serde", "serde_json", "wtx/argon2", "wtx/http-server-framework", "wtx/http-session", "wtx/pool", "wtx/postgres", "wtx/rand_chacha", "wtx-macros"]
+required-features = ["rand_chacha", "serde", "serde_json", "wtx/argon2", "wtx/http-server-framework", "wtx/http-session", "wtx/pool", "wtx/postgres", "wtx/rand_chacha", "wtx-macros"]
 
 # HTTP/2 Examples
 
@@ -130,8 +130,7 @@ pb-rs = { default-features = false, optional = true, version = "0.10" }
 
 [dependencies]
 quick-protobuf = { default-features = false, optional = true, version = "0.8" }
-rand_chacha = { default-features = false, optional = true, version = "0.3" }
-rand_core = { default-features = false, features = ["getrandom"], optional = true, version = "0.6" }
+rand_chacha = { default-features = false, features = ["os_rng"], optional = true, version = "0.9" }
 serde = { default-features = false, optional = true, version = "1.0" }
 serde_json = { default-features = false, features = ["alloc"], optional = true, version = "1.0" }
 tokio = { default-features = false, features = ["macros", "net", "rt-multi-thread"], version = "1.0" }
diff --git a/wtx-instances/generic-examples/client-api-framework.rs b/wtx-instances/generic-examples/client-api-framework.rs
index c56f5f55..b5379d8f 100644
--- a/wtx-instances/generic-examples/client-api-framework.rs
+++ b/wtx-instances/generic-examples/client-api-framework.rs
@@ -16,7 +16,7 @@ use tokio::net::TcpStream;
 use wtx::{
   client_api_framework::{
     misc::{Pair, RequestLimit, RequestThrottling},
-    network::{transport::SendingRecievingTransport, HttpParams, WsParams},
+    network::{transport::SendingReceivingTransport, HttpParams, WsParams},
     Api,
   },
   data_transformation::dnsn::SerdeJson,
diff --git a/wtx-instances/http-server-framework-examples/http-server-framework-session.rs b/wtx-instances/http-server-framework-examples/http-server-framework-session.rs
index 51232212..0dae349c 100644
--- a/wtx-instances/http-server-framework-examples/http-server-framework-session.rs
+++ b/wtx-instances/http-server-framework-examples/http-server-framework-session.rs
@@ -40,7 +40,7 @@ type SessionManager = SessionManagerTokio<u32, wtx::Error>;
 async fn main() -> wtx::Result<()> {
   let uri = "postgres://USER:PASSWORD@localhost/DB_NAME";
   let pool = Pool::new(4, PostgresRM::tokio(uri.into()));
-  let mut rng = ChaCha20Rng::from_entropy();
+  let mut rng = ChaCha20Rng::try_from_os_rng()?;
   let (expired, sm) = SessionManager::builder().build_generating_key(&mut rng, pool.clone());
   let router = Router::new(
     wtx::paths!(("/login", post(login)), ("/logout", get(logout))),
diff --git a/wtx-macros/src/client_api_framework/api.rs b/wtx-macros/src/client_api_framework/api.rs
index 10092600..6bd1c0b7 100644
--- a/wtx-macros/src/client_api_framework/api.rs
+++ b/wtx-macros/src/client_api_framework/api.rs
@@ -71,8 +71,8 @@ pub(crate) fn api(
   let generic_pair_tt = quote::quote_spanned!(api_ident.span() =>
     #[allow(unused_qualifications)]
     #[doc = concat!("[wtx::client_api_framework::misc::Pair] with [", stringify!(#api_ident), "] as the API.")]
-    pub type #generic_pair_ident<DRSR, T, #api_params> = wtx::client_api_framework::misc::Pair<
-      #pkgs_aux_path<#api_ident<#api_params>, DRSR, <T as wtx::client_api_framework::network::transport::Transport>::Params>,
+    pub type #generic_pair_ident<DRSR, T, TP, #api_params> = wtx::client_api_framework::misc::Pair<
+      #pkgs_aux_path<#api_ident<#api_params>, DRSR, TP>,
       T
     >;
   );
@@ -100,8 +100,6 @@ pub(crate) fn api(
       }
       TransportGroup::Http => ["Http", "HttpParams"],
       TransportGroup::Stub => ["Stub", "()"],
-      TransportGroup::Tcp => ["Tcp", "TcpParams"],
-      TransportGroup::Udp => ["Udp", "UdpParams"],
       TransportGroup::WebSocket => ["Ws", "WsParams"],
     };
     let local_tp_ident = Ident::new(params, Span::mixed_site());
diff --git a/wtx-macros/src/client_api_framework/pkg/data_format.rs b/wtx-macros/src/client_api_framework/pkg/data_format.rs
index 8aebeb0c..6a4ad2cd 100644
--- a/wtx-macros/src/client_api_framework/pkg/data_format.rs
+++ b/wtx-macros/src/client_api_framework/pkg/data_format.rs
@@ -17,17 +17,19 @@ impl DataFormat {
   pub(crate) fn before_sending_defaults(&self, tg: &TransportGroup) -> TokenStream {
     macro_rules! http_method_and_mime_type {
       ($method:ident, $mime:ident) => {
-        quote::quote!(
-          _ext_req_params.method = wtx::http::Method::$method;
-          _ext_req_params.mime = Some(wtx::http::Mime::$mime);
-        )
+        quote::quote!({
+          use wtx::client_api_framework::network::transport::TransportParams;
+          _trans_params.ext_req_params_mut().method = wtx::http::Method::$method;
+          _trans_params.ext_req_params_mut().mime = Some(wtx::http::Mime::$mime);
+        })
       };
     }
     macro_rules! http_mime_type {
       ($mime:ident) => {
-        quote::quote!(
-          _ext_req_params.mime = Some(wtx::http::Mime::$mime);
-        )
+        quote::quote!({
+          use wtx::client_api_framework::network::transport::TransportParams;
+          _trans_params.ext_req_params_mut().mime = Some(wtx::http::Mime::$mime);
+        })
       };
     }
     macro_rules! rslt {
diff --git a/wtx-macros/src/client_api_framework/pkg/fir/fir_after_sending_item_values.rs b/wtx-macros/src/client_api_framework/pkg/fir/fir_after_sending_item_values.rs
index 08b1082a..6b6d8606 100644
--- a/wtx-macros/src/client_api_framework/pkg/fir/fir_after_sending_item_values.rs
+++ b/wtx-macros/src/client_api_framework/pkg/fir/fir_after_sending_item_values.rs
@@ -2,11 +2,16 @@ create_fir_hook_item_values!(
   FirAfterSendingItemValues,
   fasiv_fn_call_idents,
   fasiv_item,
+  _fasiv_params,
+  fasiv_where_predicates,
   |arg| {
     Some(match arg {
       "api" => quote::quote!(_api.lease_mut()),
+      "bytes" => quote::quote!(_bytes),
+      "drsr" => quote::quote!(_drsr),
       "params" => quote::quote!(&mut self.params),
-      "res_params" => quote::quote!(_ext_res_params),
+      "trans" => quote::quote!(_trans),
+      "trans_params" => quote::quote!(_trans_params),
       _ => return None,
     })
   },
diff --git a/wtx-macros/src/client_api_framework/pkg/fir/fir_before_sending_item_values.rs b/wtx-macros/src/client_api_framework/pkg/fir/fir_before_sending_item_values.rs
index 63e5ffd0..fca85237 100644
--- a/wtx-macros/src/client_api_framework/pkg/fir/fir_before_sending_item_values.rs
+++ b/wtx-macros/src/client_api_framework/pkg/fir/fir_before_sending_item_values.rs
@@ -2,12 +2,16 @@ create_fir_hook_item_values!(
   FirBeforeSendingItemValues,
   fbsiv_fn_call_idents,
   fbsiv_item,
+  _fasiv_params,
+  fbsiv_where_predicates,
   |arg| {
     Some(match arg {
       "api" => quote::quote!(_api.lease_mut()),
+      "bytes" => quote::quote!(_bytes),
+      "drsr" => quote::quote!(_drsr),
       "params" => quote::quote!(&mut self.params),
-      "req_bytes" => quote::quote!(_req_bytes),
-      "req_params" => quote::quote!(_ext_req_params),
+      "trans" => quote::quote!(_trans),
+      "trans_params" => quote::quote!(_trans_params),
       _ => return None,
     })
   },
diff --git a/wtx-macros/src/client_api_framework/pkg/fir/fir_hook_item_values.rs b/wtx-macros/src/client_api_framework/pkg/fir/fir_hook_item_values.rs
index 0794256e..ddaa45b9 100644
--- a/wtx-macros/src/client_api_framework/pkg/fir/fir_hook_item_values.rs
+++ b/wtx-macros/src/client_api_framework/pkg/fir/fir_hook_item_values.rs
@@ -3,16 +3,24 @@ macro_rules! create_fir_hook_item_values {
     $struct:ident,
     $fn_call_idents:ident,
     $item:ident,
+    $params:ident,
+    $where_predicates:ident,
     $fn_args_idents:expr,
     $error:ident,
   ) => {
-    use crate::client_api_framework::item_with_attr_span::ItemWithAttrSpan;
+    use crate::{
+      client_api_framework::item_with_attr_span::ItemWithAttrSpan, misc::parts_from_generics,
+    };
     use proc_macro2::TokenStream;
-    use syn::{punctuated::Punctuated, FnArg, Item, ItemFn, Pat, Token};
+    use syn::{
+      punctuated::Punctuated, FnArg, GenericParam, Item, ItemFn, Pat, Token, WherePredicate,
+    };
 
     pub(crate) struct $struct<'module> {
   pub(crate) $fn_call_idents: Punctuated<TokenStream, Token![,]>,
       pub(crate) $item: &'module ItemFn,
+  pub(crate) $params: &'module Punctuated<GenericParam, Token![,]>,
+  pub(crate) $where_predicates: &'module Punctuated<WherePredicate, Token![,]>,
     }
 
     impl<'others> TryFrom<ItemWithAttrSpan<(), &'others Item>> for $struct<'others> {
@@ -33,10 +41,12 @@ macro_rules! create_fir_hook_item_values {
             let tt = call_idents_cb(pat_ident.ident.to_string().as_str())?;
             call_idents.push(tt);
           }
-          Some((call_idents, item_fn))
+          let (params, where_predicates) = parts_from_generics(&&item_fn.sig.generics);
+          Some((call_idents, item_fn, params, where_predicates))
         };
-        let ($fn_call_idents, $item) = fun().ok_or(crate::Error::$error(from.span))?;
-        Ok(Self { $fn_call_idents, $item })
+        let ($fn_call_idents, $item, $params, $where_predicates) =
+          fun().ok_or(crate::Error::$error(from.span))?;
+        Ok(Self { $fn_call_idents, $item, $params, $where_predicates })
       }
     }
   };
diff --git a/wtx-macros/src/client_api_framework/pkg/sir/sir_final_values.rs b/wtx-macros/src/client_api_framework/pkg/sir/sir_final_values.rs
index 6b92cf4f..d70ec9ed 100644
--- a/wtx-macros/src/client_api_framework/pkg/sir/sir_final_values.rs
+++ b/wtx-macros/src/client_api_framework/pkg/sir/sir_final_values.rs
@@ -31,15 +31,12 @@ impl SirFinalValues {
     let (b_lts, b_tys) = split_params(freqdiv.freqdiv_params);
     (a_lts.chain(b_lts), a_tys.chain(b_tys))
   }
+
   fn transport_params(transport_group: &TransportGroup) -> TokenStream {
     match transport_group {
-      TransportGroup::Custom(tt) => {
-        quote::quote!(<#tt as wtx::client_api_framework::network::transport::Transport>::Params)
-      }
+      TransportGroup::Custom(tt) => tt.clone(),
       TransportGroup::Http => quote::quote!(wtx::client_api_framework::network::HttpParams),
       TransportGroup::Stub => quote::quote!(()),
-      TransportGroup::Tcp => quote::quote!(wtx::client_api_framework::network::TcpParams),
-      TransportGroup::Udp => quote::quote!(wtx::client_api_framework::network::UdpParams),
       TransportGroup::WebSocket => quote::quote!(wtx::client_api_framework::network::WsParams),
     }
   }
@@ -80,7 +77,7 @@ impl<'attrs, 'module, 'others>
       let mut iter = fresdiv_params.iter();
       if let Some(elem) = iter.next() {
         if matches!(elem, GenericParam::Lifetime(_)) && iter.next().is_none() {
-          Some(quote::quote!('de))
+          Some(quote::quote!('__de))
         } else {
           // FIXME(STABLE): non_lifetime_binders
           return Err(crate::Error::ResponsesCanHaveAtMostOneLt(fresdiv_ident.span()));
@@ -99,7 +96,11 @@ impl<'attrs, 'module, 'others>
     };
 
     let fasiv_fn_call_idents = fasiv_opt.as_ref().map(|el| &el.fasiv_fn_call_idents);
+    let fasiv_fn_where_predicates = fasiv_opt.as_ref().map(|el| &el.fasiv_where_predicates);
+
     let fbsiv_fn_call_idents = fbsiv_opt.as_ref().map(|el| &el.fbsiv_fn_call_idents);
+    let fbsiv_fn_where_predicates = fbsiv_opt.as_ref().map(|el| &el.fbsiv_where_predicates);
+
     let saiv_tts = faiv_opt
       .as_ref()
       .map(|elem| {
@@ -120,7 +121,11 @@ impl<'attrs, 'module, 'others>
     for data_format in data_formats {
       let DataFormatElems { dfe_ext_req_ctnt_wrapper, dfe_ext_res_ctnt_wrapper, .. } =
         data_format.elems();
-      for transport_group in transport_groups {
+      let iter = transport_groups
+        .iter()
+        .map(|el| (false, el))
+        .chain(transport_groups.iter().map(|el| (true, el)));
+      for (is_mut, transport_group) in iter {
         let res_lf_iter0 = res_lf.iter();
         let res_lf_iter1 = res_lf.iter();
         let before_sending_defaults = data_format.before_sending_defaults(transport_group);
@@ -132,23 +137,37 @@ impl<'attrs, 'module, 'others>
         let fpiv_params_iter1 = fpiv_params.iter();
         let fpiv_where_predicates_iter = fpiv_where_predicates.iter();
         let freqdiv_where_predicates_iter = freqdiv_where_predicates.iter();
-        let tp = Self::transport_params(transport_group);
         let (lts, tys) = Self::pkg_params(&freqdiv, &fpiv);
+        let is_mut_lf = is_mut.then(|| quote::quote! { '__is_mut }).into_iter();
+        let tp = {
+          let tt = Self::transport_params(transport_group);
+          if is_mut {
+            quote::quote!(&'__is_mut mut #tt)
+          } else {
+            tt
+          }
+        };
         package_impls.push(quote::quote!(
-          impl<#(#lts,)* #(#tys,)* A, DRSR> wtx::client_api_framework::pkg::Package<A, DRSR, #tp> for #camel_case_pkg_ident<
+          impl<
+            #(#is_mut_lf,)* #(#lts,)* #(#tys,)* __API, __DRSR, __TRANSPORT
+          > wtx::client_api_framework::pkg::Package<
+          __API, __DRSR, __TRANSPORT, #tp
+          > for #camel_case_pkg_ident<
             #(#fpiv_params_iter0,)*
             wtx::data_transformation::format::#dfe_ext_req_ctnt_wrapper<#freqdiv_ident<#freqdiv_params>>
           >
           where
+            #fasiv_fn_where_predicates
+            #fbsiv_fn_where_predicates
             #(#fpiv_where_predicates_iter,)*
             #(#freqdiv_where_predicates_iter,)*
             wtx::data_transformation::format::#dfe_ext_req_ctnt_wrapper<
               #freqdiv_ident<#freqdiv_params>
-            >: wtx::data_transformation::dnsn::Serialize<DRSR>,
-            for<'de> wtx::data_transformation::format::#dfe_ext_res_ctnt_wrapper<
+            >: wtx::data_transformation::dnsn::Serialize<__DRSR>,
+            for<'__de> wtx::data_transformation::format::#dfe_ext_res_ctnt_wrapper<
               #fresdiv_ident<#(#res_lf_iter0)*>
-            >: wtx::data_transformation::dnsn::Deserialize<'de, DRSR>,
-            A: wtx::client_api_framework::Api<
+            >: wtx::data_transformation::dnsn::Deserialize<'__de, __DRSR>,
+            __API: wtx::client_api_framework::Api<
               Error = <<#id as wtx::client_api_framework::ApiId>::Api as wtx::client_api_framework::Api>::Error,
               Id = #id
             > + wtx::misc::LeaseMut<<#id as wtx::client_api_framework::ApiId>::Api>,
@@ -156,17 +175,17 @@ impl<'attrs, 'module, 'others>
             type ExternalRequestContent = wtx::data_transformation::format::#dfe_ext_req_ctnt_wrapper<
               #freqdiv_ident<#freqdiv_params>
             >;
-            type ExternalResponseContent<'de> = wtx::data_transformation::format::#dfe_ext_res_ctnt_wrapper<
+            type ExternalResponseContent<'__de> = wtx::data_transformation::format::#dfe_ext_res_ctnt_wrapper<
               #fresdiv_ident<#(#res_lf_iter1)*>
             >;
-            type PackageParams = #fpiv_ident<#(#fpiv_params_iter1)*>;
+            type PackageParams = #fpiv_ident< #(#fpiv_params_iter1)* >;
 
             #[inline]
             async fn after_sending(
               &mut self,
-              _api: &mut A,
-              _ext_res_params: &mut <#tp as wtx::client_api_framework::network::transport::TransportParams>::ExternalResponseParams,
-            ) -> Result<(), A::Error> {
+              (_api, _bytes, _drsr): (&mut __API, &mut wtx::misc::Vector<u8>, &mut __DRSR),
+              (_trans, _trans_params): (&mut __TRANSPORT, &mut #tp),
+            ) -> Result<(), __API::Error> {
               #( #fasiv_fn_name_ident_iter(#fasiv_fn_call_idents).await?; )*
               Ok(())
             }
@@ -174,10 +193,9 @@ impl<'attrs, 'module, 'others>
             #[inline]
             async fn before_sending(
               &mut self,
-              _api: &mut A,
-              _ext_req_params: &mut <#tp as wtx::client_api_framework::network::transport::TransportParams>::ExternalRequestParams,
-              _req_bytes: &mut wtx::misc::Vector<u8>
-            ) -> Result<(), A::Error> {
+              (_api, _bytes, _drsr): (&mut __API, &mut wtx::misc::Vector<u8>, &mut __DRSR),
+              (_trans, _trans_params): (&mut __TRANSPORT, &mut #tp),
+            ) -> Result<(), __API::Error> {
               #before_sending_defaults
               #( #fbsiv_fn_name_ident_iter(#fbsiv_fn_call_idents).await?; )*
               Ok(())
diff --git a/wtx-macros/src/client_api_framework/pkg/sir/sir_pkg_attr.rs b/wtx-macros/src/client_api_framework/pkg/sir/sir_pkg_attr.rs
index 428e41f1..74c24a4d 100644
--- a/wtx-macros/src/client_api_framework/pkg/sir/sir_pkg_attr.rs
+++ b/wtx-macros/src/client_api_framework/pkg/sir/sir_pkg_attr.rs
@@ -23,14 +23,8 @@ impl<'attrs> TryFrom<FirPkgAttr<'attrs>> for SirPkaAttr<'attrs> {
     if data_formats.is_empty() {
       return Err(crate::Error::MandatoryOuterAttrsAreNotPresent);
     }
-    Ok(Self {
-      data_formats,
-      id: fea.id,
-      transport_groups: fea
-        .transports
-        .into_iter()
-        .map(TryInto::try_into)
-        .collect::<crate::Result<_>>()?,
-    })
+    let transport_groups =
+      fea.transports.into_iter().map(TryInto::try_into).collect::<crate::Result<_>>()?;
+    Ok(Self { data_formats, id: fea.id, transport_groups })
   }
 }
diff --git a/wtx-macros/src/client_api_framework/transport_group.rs b/wtx-macros/src/client_api_framework/transport_group.rs
index 2af9ad50..6f09feb6 100644
--- a/wtx-macros/src/client_api_framework/transport_group.rs
+++ b/wtx-macros/src/client_api_framework/transport_group.rs
@@ -8,8 +8,6 @@ pub(crate) enum TransportGroup {
   Custom(TokenStream),
   Http,
   Stub,
-  Tcp,
-  Udp,
   WebSocket,
 }
 
@@ -24,8 +22,6 @@ impl<'attrs> TryFrom<&'attrs NestedMeta> for TransportGroup {
         Ok(match ps.ident.to_string().as_str() {
           "http" => Self::Http,
           "stub" => Self::Stub,
-          "tcp" => Self::Tcp,
-          "udp" => Self::Udp,
           "ws" => Self::WebSocket,
           _ => return err(ps.ident.span()),
         })
diff --git a/wtx-macros/src/error.rs b/wtx-macros/src/error.rs
index 7315ff27..dd55f790 100644
--- a/wtx-macros/src/error.rs
+++ b/wtx-macros/src/error.rs
@@ -71,7 +71,7 @@ impl From<Error> for syn::Error {
       Error::BadAfterSending(span) => syn::Error::new(
         span,
         "`#[pkg::after_sending]` must be an async function named `after_sending` containing any \
-        combination of `api: &mut SomeApi`, `params: &mut SomePackageParams`, `req_bytes: &[u8]`, \
+        combination of `api: &mut SomeApi`, `params: &mut SomePackageParams`, `bytes: &[u8]`, \
         and `req_params: &mut SomeRequestParams`.",
       ),
       Error::BadAux(span) => syn::Error::new(
diff --git a/wtx-macros/src/from_records.rs b/wtx-macros/src/from_records.rs
index 3f8ffde0..b05155e0 100644
--- a/wtx-macros/src/from_records.rs
+++ b/wtx-macros/src/from_records.rs
@@ -118,6 +118,8 @@ pub(crate) fn from_records(
 
         #( let #decodes_after_id = _curr_record.#decodes_after_id_method(*_curr_field_idx)?; *_curr_field_idx = _curr_field_idx.wrapping_add(1); )*
 
+        #( let #ones = <_>::from_records((_curr_field_idx, _curr_record, _curr_record_idx), _records)?; )*
+
         #(
           let mut #manys: #manys_ty = <_>::default();
           wtx::database::seek_related_entities(
@@ -128,8 +130,6 @@ pub(crate) fn from_records(
           )?;
         )*
 
-        #( let #ones = <_>::from_records((_curr_field_idx, _curr_record, _curr_record_idx), _records)?; )*
-
         Ok(Self {
           #(#decodes_before_id,)*
           #(#id_iter1,)*
diff --git a/wtx/Cargo.toml b/wtx/Cargo.toml
index 8457a0f9..bcc65c40 100644
--- a/wtx/Cargo.toml
+++ b/wtx/Cargo.toml
@@ -16,6 +16,7 @@ embedded-tls = { default-features = false, optional = true, version = "0.17" }
 fastrand = { default-features = false, optional = true, version = "2.0" }
 flate2 = { default-features = false, features = ["zlib-rs"], optional = true, version = "1.0" }
 foldhash = { default-features = false, optional = true, version = "0.1" }
+getrandom = { default-features = false, optional = true, version = "0.3" }
 hashbrown = { default-features = false, features = ["inline-more"], optional = true, version = "0.15" }
 hmac = { default-features = false, optional = true, version = "0.12" }
 httparse = { default-features = false, optional = true, version = "1.0" }
@@ -24,8 +25,7 @@ memchr = { default-features = false, optional = true, version = "2.0" }
 portable-atomic = { default-features = false, features = ["fallback"], optional = true, version = "1.0" }
 portable-atomic-util = { default-features = false, features = ["alloc"], optional = true, version = "0.2" }
 quick-protobuf = { default-features = false, optional = true, version = "0.8" }
-rand_chacha = { default-features = false, optional = true, version = "0.3" }
-rand_core = { default-features = false, optional = true, version = "0.6" }
+rand_chacha = { default-features = false, optional = true, version = "0.9" }
 ring = { default-features = false, optional = true, version = "0.17" }
 rust_decimal = { default-features = false, features = ["maths"], optional = true, version = "1.0" }
 rustls = { default-features = false, features = ["tls12"], optional = true, version = "0.23" }
@@ -73,7 +73,7 @@ pool = []
 portable-atomic-util = ["portable-atomic", "dep:portable-atomic-util"]
 postgres = ["base64", "crypto-common", "database", "digest", "foldhash", "hashbrown", "hmac", "sha2"]
 quick-protobuf = ["dep:quick-protobuf", "std"]
-rand_chacha = ["dep:rand_chacha", "dep:rand_core"]
+rand_chacha = ["dep:rand_chacha", "getrandom"]
 rustls = ["dep:rustls", "rustls-pki-types"]
 schema-manager = ["database", "chrono"]
 schema-manager-dev = ["schema-manager"]
@@ -93,6 +93,7 @@ std = [
   "embedded-tls?/std",
   "fastrand?/std",
   "foldhash?/std",
+  "getrandom?/std",
   "hmac?/std",
   "httparse?/std",
   "memchr?/std",
@@ -100,7 +101,6 @@ std = [
   "portable-atomic-util?/std",
   "quick-protobuf?/std",
   "rand_chacha?/std",
-  "rand_core?/std",
   "ring?/std",
   "rust_decimal?/std",
   "rustls-pemfile?/std",
diff --git a/wtx/src/client_api_framework/macros.rs b/wtx/src/client_api_framework/macros.rs
index 5ec2624f..01545a9f 100644
--- a/wtx/src/client_api_framework/macros.rs
+++ b/wtx/src/client_api_framework/macros.rs
@@ -32,6 +32,12 @@ macro_rules! create_packages_aux_wrapper {
       pub fn from_minimum(api: $api_ty, drsr: DRSR, tp: TP) -> Self {
         Self($crate::client_api_framework::pkg::PkgsAux::from_minimum(api, drsr, tp))
       }
+
+      /// Proxy of [`$crate::client_api_framework::pkg::PkgsAux::new`].
+      #[inline]
+      pub fn new(api: $api_ty, byte_buffer: $crate::misc::Vector<u8>, drsr: DRSR, tp: TP) -> Self {
+        Self($crate::client_api_framework::pkg::PkgsAux::new(api, byte_buffer, drsr, tp))
+      }
     }
 
     impl<$($api_param,)? DRSR, TP> core::ops::Deref for $name<$api_ty, DRSR, TP>
diff --git a/wtx/src/client_api_framework/misc.rs b/wtx/src/client_api_framework/misc.rs
index bdc07c86..2b7372e8 100644
--- a/wtx/src/client_api_framework/misc.rs
+++ b/wtx/src/client_api_framework/misc.rs
@@ -8,7 +8,7 @@ mod request_throttling;
 
 use crate::{
   client_api_framework::{
-    network::transport::{Transport, TransportParams},
+    network::transport::Transport,
     pkg::{Package, PkgsAux},
     Api,
   },
@@ -23,14 +23,14 @@ pub use request_throttling::RequestThrottling;
 /// Used in all implementations of [`crate::Transport::send`] and/or
 /// [`crate::Transport::send_recv``].
 #[inline]
-pub(crate) fn log_req<A, DRSR, P, T>(
+pub(crate) fn log_req<A, DRSR, P, T, TP>(
   _pkg: &mut P,
-  _pkgs_aux: &mut PkgsAux<A, DRSR, T::Params>,
+  _pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   _trans: &mut T,
 ) where
   A: Api,
-  P: Package<A, DRSR, T::Params>,
-  T: Transport,
+  P: Package<A, DRSR, T, TP>,
+  T: Transport<TP>,
 {
   _debug!(trans_ty = display(_trans.ty()), "Request: {:?}", {
     use crate::data_transformation::dnsn::Serialize;
@@ -53,35 +53,44 @@ pub(crate) fn log_res(_res: &[u8]) {
 }
 
 #[inline]
-pub(crate) async fn manage_after_sending_related<A, DRSR, P, TP>(
+pub(crate) async fn manage_after_sending_related<A, DRSR, P, T, TP>(
   pkg: &mut P,
   pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
+  trans: &mut T,
 ) -> Result<(), A::Error>
 where
   A: Api,
-  P: Package<A, DRSR, TP>,
-  TP: TransportParams,
+  P: Package<A, DRSR, T, TP>,
+  T: Transport<TP>,
 {
   pkgs_aux.api.after_sending().await?;
-  pkg.after_sending(&mut pkgs_aux.api, pkgs_aux.tp.ext_res_params_mut()).await?;
+  pkg
+    .after_sending(
+      (&mut pkgs_aux.api, &mut pkgs_aux.byte_buffer, &mut pkgs_aux.drsr),
+      (trans, &mut pkgs_aux.tp),
+    )
+    .await?;
   Ok(())
 }
 
 #[inline]
-pub(crate) async fn manage_before_sending_related<A, DRSR, P, T>(
+pub(crate) async fn manage_before_sending_related<A, DRSR, P, T, TP>(
   pkg: &mut P,
-  pkgs_aux: &mut PkgsAux<A, DRSR, T::Params>,
+  pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   trans: &mut T,
 ) -> Result<(), A::Error>
 where
   A: Api,
-  P: Package<A, DRSR, T::Params>,
-  T: Transport,
+  P: Package<A, DRSR, T, TP>,
+  T: Transport<TP>,
 {
   log_req(pkg, pkgs_aux, trans);
   pkgs_aux.api.before_sending().await?;
   pkg
-    .before_sending(&mut pkgs_aux.api, pkgs_aux.tp.ext_req_params_mut(), &mut pkgs_aux.byte_buffer)
+    .before_sending(
+      (&mut pkgs_aux.api, &mut pkgs_aux.byte_buffer, &mut pkgs_aux.drsr),
+      (trans, &mut pkgs_aux.tp),
+    )
     .await?;
   pkg.ext_req_content_mut().to_bytes(&mut pkgs_aux.byte_buffer, &mut pkgs_aux.drsr)?;
   Ok(())
diff --git a/wtx/src/client_api_framework/network.rs b/wtx/src/client_api_framework/network.rs
index 104eb660..365d3ef3 100644
--- a/wtx/src/client_api_framework/network.rs
+++ b/wtx/src/client_api_framework/network.rs
@@ -2,15 +2,11 @@
 
 #[cfg(feature = "http")]
 mod http;
-mod tcp;
 pub mod transport;
 mod transport_group;
-mod udp;
 mod ws;
 
 #[cfg(feature = "http")]
 pub use http::*;
-pub use tcp::*;
 pub use transport_group::*;
-pub use udp::*;
 pub use ws::*;
diff --git a/wtx/src/client_api_framework/network/tcp.rs b/wtx/src/client_api_framework/network/tcp.rs
deleted file mode 100644
index b72081ac..00000000
--- a/wtx/src/client_api_framework/network/tcp.rs
+++ /dev/null
@@ -1,54 +0,0 @@
-use crate::{client_api_framework::network::transport::TransportParams, misc::UriString};
-
-#[derive(Debug)]
-#[doc = generic_trans_params_doc!()]
-pub struct TcpParams(TcpReqParams, TcpResParams);
-
-impl TcpParams {
-  /// For example, from `127.0.0.1:8090`.
-  #[inline]
-  pub fn from_uri(url: &str) -> Self {
-    Self(TcpReqParams { url: UriString::new(url.into()) }, TcpResParams)
-  }
-}
-
-impl TransportParams for TcpParams {
-  type ExternalRequestParams = TcpReqParams;
-  type ExternalResponseParams = TcpResParams;
-
-  #[inline]
-  fn ext_req_params(&self) -> &Self::ExternalRequestParams {
-    &self.0
-  }
-
-  #[inline]
-  fn ext_req_params_mut(&mut self) -> &mut Self::ExternalRequestParams {
-    &mut self.0
-  }
-
-  #[inline]
-  fn ext_res_params(&self) -> &Self::ExternalResponseParams {
-    &self.1
-  }
-
-  #[inline]
-  fn ext_res_params_mut(&mut self) -> &mut Self::ExternalResponseParams {
-    &mut self.1
-  }
-
-  #[inline]
-  fn reset(&mut self) {
-    self.0.url.truncate_with_initial_len();
-  }
-}
-
-#[derive(Debug)]
-#[doc = generic_trans_req_params_doc!("TCP")]
-pub struct TcpReqParams {
-  /// Used every time a send-like function is called.
-  pub url: UriString,
-}
-
-#[derive(Debug)]
-#[doc = generic_trans_res_params_doc!("TCP")]
-pub struct TcpResParams;
diff --git a/wtx/src/client_api_framework/network/transport.rs b/wtx/src/client_api_framework/network/transport.rs
index 4144ff87..1f1302cf 100644
--- a/wtx/src/client_api_framework/network/transport.rs
+++ b/wtx/src/client_api_framework/network/transport.rs
@@ -2,10 +2,8 @@
 
 mod mock;
 mod recieving_transport;
-mod sending_recieving_transport;
+mod sending_receiving_transport;
 mod sending_transport;
-#[cfg(feature = "std")]
-mod std;
 mod transport_params;
 mod unit;
 #[cfg(feature = "http-client-pool")]
@@ -16,7 +14,7 @@ mod wtx_ws;
 use crate::client_api_framework::network::TransportGroup;
 pub use mock::{Mock, MockBytes, MockStr};
 pub use recieving_transport::RecievingTransport;
-pub use sending_recieving_transport::SendingRecievingTransport;
+pub use sending_receiving_transport::SendingReceivingTransport;
 pub use sending_transport::SendingTransport;
 pub use transport_params::TransportParams;
 
@@ -24,15 +22,11 @@ pub use transport_params::TransportParams;
 ///
 /// Please, see the [`Package`] implementation of the desired package to know
 /// more about the expected types as well as any other additional documentation.
-///
-/// # Types
-///
-/// * `DRSR`: `D`eserialize`R`/`S`erialize`R`
-pub trait Transport {
-  /// Every transport has an [TransportGroup] identifier.
+pub trait Transport<TP> {
+  /// See [TransportGroup].
   const GROUP: TransportGroup;
-  /// Every transport has request and response parameters.
-  type Params: TransportParams;
+  /// The inner implementation.
+  type Inner: Transport<TP>;
 
   /// Instance counterpart of [`Self::GROUP`].
   #[inline]
@@ -41,18 +35,18 @@ pub trait Transport {
   }
 }
 
-impl<T> Transport for &mut T
+impl<T, TP> Transport<TP> for &mut T
 where
-  T: Transport,
+  T: Transport<TP>,
 {
   const GROUP: TransportGroup = T::GROUP;
-  type Params = T::Params;
+  type Inner = T::Inner;
 }
 
 #[cfg(test)]
 mod tests {
   use crate::{
-    client_api_framework::{network::transport::TransportParams, pkg::Package},
+    client_api_framework::pkg::Package,
     data_transformation::dnsn::{Deserialize, Serialize},
     misc::Vector,
   };
@@ -60,10 +54,7 @@ mod tests {
   #[derive(Debug, Eq, PartialEq)]
   pub(crate) struct _PingPong(pub(crate) _Ping, pub(crate) ());
 
-  impl<DRSR, TP> Package<(), DRSR, TP> for _PingPong
-  where
-    TP: TransportParams,
-  {
+  impl<DRSR, T, TP> Package<(), DRSR, T, TP> for _PingPong {
     type ExternalRequestContent = _Ping;
     type ExternalResponseContent<'de> = _Pong;
     type PackageParams = ();
diff --git a/wtx/src/client_api_framework/network/transport/mock.rs b/wtx/src/client_api_framework/network/transport/mock.rs
index a6d7efdf..5884467d 100644
--- a/wtx/src/client_api_framework/network/transport/mock.rs
+++ b/wtx/src/client_api_framework/network/transport/mock.rs
@@ -27,7 +27,7 @@ pub type MockStr<TP> = Mock<str, TP>;
 /// ```rust,no_run
 /// # async fn fun() -> wtx::Result<()> {
 /// use wtx::client_api_framework::{
-///   network::transport::{MockStr, SendingRecievingTransport},
+///   network::transport::{MockStr, SendingReceivingTransport},
 ///   pkg::PkgsAux,
 /// };
 /// let _ = MockStr::default()
@@ -86,7 +86,7 @@ where
   }
 }
 
-impl<T, TP> RecievingTransport for Mock<T, TP>
+impl<T, TP> RecievingTransport<TP> for Mock<T, TP>
 where
   T: Debug + Lease<[u8]> + PartialEq + ToOwned + 'static + ?Sized,
   TP: TransportParams,
@@ -95,7 +95,7 @@ where
   #[inline]
   async fn recv<A, DRSR>(
     &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<Range<usize>, A::Error>
   where
     A: Api,
@@ -107,7 +107,7 @@ where
   }
 }
 
-impl<T, TP> SendingTransport for Mock<T, TP>
+impl<T, TP> SendingTransport<TP> for Mock<T, TP>
 where
   T: Debug + Lease<[u8]> + PartialEq + ToOwned + 'static + ?Sized,
   TP: TransportParams,
@@ -121,24 +121,24 @@ where
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, TP>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     manage_before_sending_related(pkg, pkgs_aux, &mut *self).await?;
     self.requests.push(Cow::Owned(FromBytes::from_bytes(&pkgs_aux.byte_buffer)?))?;
     pkgs_aux.byte_buffer.clear();
-    manage_after_sending_related(pkg, pkgs_aux).await?;
+    manage_after_sending_related(pkg, pkgs_aux, &mut *self).await?;
     Ok(())
   }
 }
 
-impl<T, TP> Transport for Mock<T, TP>
+impl<T, TP> Transport<TP> for Mock<T, TP>
 where
   T: Debug + Lease<[u8]> + PartialEq + ToOwned + 'static + ?Sized,
   TP: TransportParams,
   <T as ToOwned>::Owned: Debug + FromBytes,
 {
   const GROUP: TransportGroup = TransportGroup::Stub;
-  type Params = TP;
+  type Inner = Self;
 }
 
 impl<T, TP> Default for Mock<T, TP>
diff --git a/wtx/src/client_api_framework/network/transport/recieving_transport.rs b/wtx/src/client_api_framework/network/transport/recieving_transport.rs
index e5e89a74..7a9b3d99 100644
--- a/wtx/src/client_api_framework/network/transport/recieving_transport.rs
+++ b/wtx/src/client_api_framework/network/transport/recieving_transport.rs
@@ -15,12 +15,12 @@ use core::{future::Future, ops::Range};
 /// # Types
 ///
 /// * `DRSR`: `D`eserialize`R`/`S`erialize`R`
-pub trait RecievingTransport: Transport {
+pub trait RecievingTransport<TP>: Sized + Transport<TP> {
   /// Retrieves data from the server filling the internal buffer and returning the amount of
   /// bytes written.
   fn recv<A, DRSR>(
     &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> impl Future<Output = Result<Range<usize>, A::Error>>
   where
     A: Api;
@@ -30,11 +30,11 @@ pub trait RecievingTransport: Transport {
   #[inline]
   fn recv_decode_contained<'de, A, DRSR, P>(
     &mut self,
-    pkgs_aux: &'de mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &'de mut PkgsAux<A, DRSR, TP>,
   ) -> impl Future<Output = Result<P::ExternalResponseContent<'de>, A::Error>>
   where
     A: Api,
-    P: Package<A, DRSR, Self::Params>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     async {
       let range = self.recv(pkgs_aux).await?;
@@ -47,14 +47,14 @@ pub trait RecievingTransport: Transport {
   }
 }
 
-impl<T> RecievingTransport for &mut T
+impl<T, TP> RecievingTransport<TP> for &mut T
 where
-  T: RecievingTransport,
+  T: RecievingTransport<TP>,
 {
   #[inline]
   async fn recv<A, DRSR>(
     &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<Range<usize>, A::Error>
   where
     A: Api,
diff --git a/wtx/src/client_api_framework/network/transport/sending_recieving_transport.rs b/wtx/src/client_api_framework/network/transport/sending_receiving_transport.rs
similarity index 80%
rename from wtx/src/client_api_framework/network/transport/sending_recieving_transport.rs
rename to wtx/src/client_api_framework/network/transport/sending_receiving_transport.rs
index 98bf5193..7860b49b 100644
--- a/wtx/src/client_api_framework/network/transport/sending_recieving_transport.rs
+++ b/wtx/src/client_api_framework/network/transport/sending_receiving_transport.rs
@@ -15,7 +15,7 @@ use core::{future::Future, ops::Range};
 /// # Types
 ///
 /// * `DRSR`: `D`eserialize`R`/`S`erialize`R`
-pub trait SendingRecievingTransport: RecievingTransport + SendingTransport {
+pub trait SendingReceivingTransport<TP>: RecievingTransport<TP> + SendingTransport<TP> {
   /// Sends a request and then awaits its counterpart data response.
   ///
   /// The returned bytes are stored in `pkgs_aux` and its length is returned by this method.
@@ -23,11 +23,11 @@ pub trait SendingRecievingTransport: RecievingTransport + SendingTransport {
   fn send_recv<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> impl Future<Output = Result<Range<usize>, A::Error>>
   where
     A: Api,
-    P: Package<A, DRSR, Self::Params>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     async {
       self.send(pkg, pkgs_aux).await?;
@@ -44,12 +44,12 @@ pub trait SendingRecievingTransport: RecievingTransport + SendingTransport {
     &mut self,
     buffer: &mut Vector<P::ExternalResponseContent<'pkgs_aux>>,
     pkgs: &'pkgs mut [P],
-    pkgs_aux: &'pkgs_aux mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &'pkgs_aux mut PkgsAux<A, DRSR, TP>,
   ) -> impl Future<Output = Result<(), A::Error>>
   where
     A: Api,
-    P: Package<A, DRSR, Self::Params>,
-    BatchElems<'pkgs, A, DRSR, P, Self::Params>: Serialize<DRSR>,
+    P: Package<A, DRSR, Self::Inner, TP>,
+    BatchElems<'pkgs, A, DRSR, P, Self::Inner, TP>: Serialize<DRSR>,
   {
     async {
       let range = self.send_recv(&mut BatchPkg::new(pkgs), pkgs_aux).await?;
@@ -69,11 +69,11 @@ pub trait SendingRecievingTransport: RecievingTransport + SendingTransport {
   fn send_recv_decode_contained<'de, A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &'de mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &'de mut PkgsAux<A, DRSR, TP>,
   ) -> impl Future<Output = Result<P::ExternalResponseContent<'de>, A::Error>>
   where
     A: Api,
-    P: Package<A, DRSR, Self::Params>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     async {
       let range = self.send_recv(pkg, pkgs_aux).await?;
@@ -86,4 +86,7 @@ pub trait SendingRecievingTransport: RecievingTransport + SendingTransport {
   }
 }
 
-impl<T> SendingRecievingTransport for T where T: RecievingTransport + SendingTransport {}
+impl<T, TP> SendingReceivingTransport<TP> for T where
+  T: RecievingTransport<TP> + SendingTransport<TP>
+{
+}
diff --git a/wtx/src/client_api_framework/network/transport/sending_transport.rs b/wtx/src/client_api_framework/network/transport/sending_transport.rs
index 28801a82..64e880b0 100644
--- a/wtx/src/client_api_framework/network/transport/sending_transport.rs
+++ b/wtx/src/client_api_framework/network/transport/sending_transport.rs
@@ -10,31 +10,31 @@ use core::future::Future;
 /// # Types
 ///
 /// * `DRSR`: `D`eserialize`R`/`S`erialize`R`
-pub trait SendingTransport: Transport {
+pub trait SendingTransport<TP>: Transport<TP> {
   /// Sends a request without trying to retrieve any counterpart data.
   fn send<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> impl Future<Output = Result<(), A::Error>>
   where
     A: Api,
-    P: Package<A, DRSR, Self::Params>;
+    P: Package<A, DRSR, Self::Inner, TP>;
 }
 
-impl<T> SendingTransport for &mut T
+impl<T, TP> SendingTransport<TP> for &mut T
 where
-  T: SendingTransport,
+  T: SendingTransport<TP>,
 {
   #[inline]
   async fn send<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, Self::Params>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     (**self).send(pkg, pkgs_aux).await
   }
diff --git a/wtx/src/client_api_framework/network/transport/std.rs b/wtx/src/client_api_framework/network/transport/std.rs
deleted file mode 100644
index 13cedd76..00000000
--- a/wtx/src/client_api_framework/network/transport/std.rs
+++ /dev/null
@@ -1,129 +0,0 @@
-use crate::{
-  client_api_framework::{
-    misc::{manage_after_sending_related, manage_before_sending_related},
-    network::{
-      transport::{RecievingTransport, SendingTransport, Transport, TransportParams},
-      TcpParams, TransportGroup,
-    },
-    pkg::{Package, PkgsAux},
-    Api, ClientApiFrameworkError,
-  },
-  misc::Lease,
-};
-use core::ops::Range;
-use std::{
-  io::{Read, Write},
-  net::TcpStream,
-};
-
-impl RecievingTransport for TcpStream {
-  #[inline]
-  async fn recv<A, DRSR>(
-    &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
-  ) -> Result<Range<usize>, A::Error>
-  where
-    A: Api,
-  {
-    let len = self.read(pkgs_aux.byte_buffer.as_mut()).map_err(Into::into)?;
-    Ok(0..len)
-  }
-}
-
-impl SendingTransport for TcpStream {
-  #[inline]
-  async fn send<A, DRSR, P>(
-    &mut self,
-    pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, TcpParams>,
-  ) -> Result<(), A::Error>
-  where
-    A: Api,
-    P: Package<A, DRSR, TcpParams>,
-  {
-    send(pkg, pkgs_aux, self, |bytes, _, trans| Ok(trans.write(bytes)?)).await
-  }
-}
-
-impl Transport for TcpStream {
-  const GROUP: TransportGroup = TransportGroup::TCP;
-  type Params = TcpParams;
-}
-
-async fn send<A, DRSR, P, T>(
-  pkg: &mut P,
-  pkgs_aux: &mut PkgsAux<A, DRSR, T::Params>,
-  trans: &mut T,
-  cb: impl Fn(
-    &[u8],
-    &<T::Params as TransportParams>::ExternalRequestParams,
-    &mut T,
-  ) -> crate::Result<usize>,
-) -> Result<(), A::Error>
-where
-  A: Api,
-  P: Package<A, DRSR, T::Params>,
-  T: Transport,
-{
-  pkgs_aux.byte_buffer.clear();
-  manage_before_sending_related(pkg, pkgs_aux, &mut *trans).await?;
-  let mut slice = pkgs_aux.byte_buffer.lease();
-  let mut everything_was_sent = false;
-  for _ in 0..16 {
-    let sent = cb(slice, pkgs_aux.tp.ext_req_params(), trans)?;
-    if sent == slice.len() {
-      everything_was_sent = true;
-      break;
-    }
-    slice = slice.get(sent..).unwrap_or_default();
-  }
-  pkgs_aux.byte_buffer.clear();
-  pkgs_aux.byte_buffer.extend_from_iter((0..pkgs_aux.byte_buffer.capacity()).map(|_| 0))?;
-  manage_after_sending_related(pkg, pkgs_aux).await?;
-  if everything_was_sent {
-    Ok(())
-  } else {
-    Err(A::Error::from(ClientApiFrameworkError::CouldNotSendTheFullRequestData.into()))
-  }
-}
-
-#[cfg(all(feature = "_async-tests", test))]
-mod tests {
-  use crate::{
-    client_api_framework::{
-      network::{
-        transport::{
-          tests::{_Ping, _PingPong, _Pong},
-          SendingRecievingTransport,
-        },
-        TcpParams,
-      },
-      pkg::PkgsAux,
-    },
-    misc::sleep,
-    tests::_uri,
-  };
-  use core::time::Duration;
-  use std::{
-    io::{Read, Write},
-    net::{TcpListener, TcpStream},
-  };
-
-  #[tokio::test(flavor = "multi_thread")]
-  async fn tcp() {
-    let uri_client = _uri();
-    let uri_server = uri_client.to_string();
-    let _server = tokio::spawn(async move {
-      let tcp_listener = TcpListener::bind(uri_server.hostname_with_implied_port()).unwrap();
-      let mut buffer = [0; 8];
-      let (mut stream, _) = tcp_listener.accept().unwrap();
-      let idx = stream.read(&mut buffer).unwrap();
-      stream.write_all(&buffer[..idx]).unwrap();
-    });
-    sleep(Duration::from_millis(100)).await.unwrap();
-    let mut pa = PkgsAux::from_minimum((), (), TcpParams::from_uri(uri_client.as_str()));
-    let mut trans = TcpStream::connect(uri_client.hostname_with_implied_port()).unwrap();
-    let res = trans.send_recv_decode_contained(&mut _PingPong(_Ping, ()), &mut pa).await.unwrap();
-    assert_eq!(res, _Pong("pong"));
-  }
-}
diff --git a/wtx/src/client_api_framework/network/transport/unit.rs b/wtx/src/client_api_framework/network/transport/unit.rs
index 22f6b5a8..29371716 100644
--- a/wtx/src/client_api_framework/network/transport/unit.rs
+++ b/wtx/src/client_api_framework/network/transport/unit.rs
@@ -9,12 +9,9 @@ use crate::client_api_framework::{
 };
 use core::ops::Range;
 
-impl RecievingTransport for () {
+impl<TP> RecievingTransport<TP> for () {
   #[inline]
-  async fn recv<A, DRSR>(
-    &mut self,
-    _: &mut PkgsAux<A, DRSR, Self::Params>,
-  ) -> Result<Range<usize>, A::Error>
+  async fn recv<A, DRSR>(&mut self, _: &mut PkgsAux<A, DRSR, TP>) -> Result<Range<usize>, A::Error>
   where
     A: Api,
   {
@@ -22,19 +19,19 @@ impl RecievingTransport for () {
   }
 }
 
-impl SendingTransport for () {
+impl<TP> SendingTransport<TP> for () {
   #[inline]
   async fn send<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, ()>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, ()>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     manage_before_sending_related(pkg, pkgs_aux, self).await?;
-    manage_after_sending_related(pkg, pkgs_aux).await?;
+    manage_after_sending_related(pkg, pkgs_aux, self).await?;
     Ok(())
   }
 }
@@ -43,24 +40,23 @@ impl SendingTransport for () {
 ///
 /// ```rust,no_run
 /// # async fn fun() -> wtx::Result<()> {
-/// use wtx::client_api_framework::{network::transport::SendingRecievingTransport, pkg::PkgsAux};
+/// use wtx::client_api_framework::{network::transport::SendingReceivingTransport, pkg::PkgsAux};
 /// let _ =
 ///   ().send_recv_decode_contained(&mut (), &mut PkgsAux::from_minimum((), (), ())).await?;
 /// # Ok(()) }
 /// ```
-impl Transport for () {
+impl<TP> Transport<TP> for () {
   const GROUP: TransportGroup = TransportGroup::Stub;
-  type Params = ();
+  type Inner = ();
 }
 
 #[cfg(all(feature = "_async-tests", test))]
 mod tests {
-  use crate::client_api_framework::{network::transport::SendingRecievingTransport, pkg::PkgsAux};
+  use crate::client_api_framework::{network::transport::SendingReceivingTransport, pkg::PkgsAux};
 
   #[tokio::test]
   async fn unit() {
     let mut pa = PkgsAux::from_minimum((), (), ());
-    let mut trans = ();
-    assert_eq!(trans.send_recv_decode_contained(&mut (), &mut pa).await.unwrap(), ());
+    assert_eq!(().send_recv_decode_contained(&mut (), &mut pa).await.unwrap(), ());
   }
 }
diff --git a/wtx/src/client_api_framework/network/transport/wtx_http.rs b/wtx/src/client_api_framework/network/transport/wtx_http.rs
index f5ae8ed9..b399d7f3 100644
--- a/wtx/src/client_api_framework/network/transport/wtx_http.rs
+++ b/wtx/src/client_api_framework/network/transport/wtx_http.rs
@@ -13,14 +13,14 @@ use crate::{
     Header, KnownHeaderName, ReqBuilder, ReqResBuffer, WTX_USER_AGENT,
   },
   http2::{Http2, Http2Buffer, Http2Data},
-  misc::{Lock, RefCounter, StreamWriter},
+  misc::{LeaseMut, Lock, RefCounter, StreamWriter},
   pool::{ResourceManager, SimplePoolResource},
 };
 use core::{mem, ops::Range};
 
-impl<AUX, HD, RL, RM, SW> RecievingTransport for ClientPool<RL, RM>
+impl<AUX, HD, RL, RM, SW, TP> RecievingTransport<TP> for ClientPool<RL, RM>
 where
-  HD: RefCounter + 'static,
+  HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
   RL: Lock<Resource = SimplePoolResource<RM::Resource>>,
   RM: ResourceManager<
@@ -36,7 +36,7 @@ where
   #[inline]
   async fn recv<A, DRSR>(
     &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<Range<usize>, A::Error>
   where
     A: Api,
@@ -44,10 +44,9 @@ where
     Ok(0..pkgs_aux.byte_buffer.len())
   }
 }
-
-impl<AUX, HD, RL, RM, SW> SendingTransport for ClientPool<RL, RM>
+impl<AUX, HD, RL, RM, SW, TP> SendingTransport<TP> for ClientPool<RL, RM>
 where
-  HD: RefCounter + 'static,
+  HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
   RL: Lock<Resource = SimplePoolResource<RM::Resource>>,
   RM: ResourceManager<
@@ -57,6 +56,7 @@ where
     Resource = ClientPoolResource<AUX, Http2<HD, true>>,
   >,
   SW: StreamWriter,
+  TP: LeaseMut<HttpParams>,
   for<'any> RL: 'any,
   for<'any> RM: 'any,
 {
@@ -64,14 +64,14 @@ where
   async fn send<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, HttpParams>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, HttpParams>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     response(
-      &mut self.lock(&pkgs_aux.tp.ext_req_params_mut().uri.to_ref()).await?.client,
+      &mut self.lock(&pkgs_aux.tp.lease_mut().ext_req_params_mut().uri.to_ref()).await?.client,
       pkg,
       pkgs_aux,
     )
@@ -79,15 +79,26 @@ where
     Ok(())
   }
 }
-
-impl<RL, RM> Transport for ClientPool<RL, RM> {
+impl<AUX, HD, RL, RM, SW, TP> Transport<TP> for ClientPool<RL, RM>
+where
+  HD: RefCounter,
+  HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
+  RL: Lock<Resource = SimplePoolResource<RM::Resource>>,
+  RM: ResourceManager<
+    CreateAux = str,
+    Error = crate::Error,
+    RecycleAux = str,
+    Resource = ClientPoolResource<AUX, Http2<HD, true>>,
+  >,
+  SW: StreamWriter,
+{
   const GROUP: TransportGroup = TransportGroup::HTTP;
-  type Params = HttpParams;
+  type Inner = Http2<HD, true>;
 }
 
-impl<AUX, HD, RL, RM, SW> RecievingTransport for &ClientPool<RL, RM>
+impl<AUX, HD, RL, RM, SW, TP> RecievingTransport<TP> for &ClientPool<RL, RM>
 where
-  HD: RefCounter + 'static,
+  HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
   RL: Lock<Resource = SimplePoolResource<RM::Resource>>,
   RM: ResourceManager<
@@ -103,7 +114,7 @@ where
   #[inline]
   async fn recv<A, DRSR>(
     &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<Range<usize>, A::Error>
   where
     A: Api,
@@ -111,10 +122,9 @@ where
     Ok(0..pkgs_aux.byte_buffer.len())
   }
 }
-
-impl<AUX, HD, RL, RM, SW> SendingTransport for &ClientPool<RL, RM>
+impl<AUX, HD, RL, RM, SW, TP> SendingTransport<TP> for &ClientPool<RL, RM>
 where
-  HD: RefCounter + 'static,
+  HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
   RL: Lock<Resource = SimplePoolResource<RM::Resource>>,
   RM: ResourceManager<
@@ -124,6 +134,7 @@ where
     Resource = ClientPoolResource<AUX, Http2<HD, true>>,
   >,
   SW: StreamWriter,
+  TP: LeaseMut<HttpParams>,
   for<'any> RL: 'any,
   for<'any> RM: 'any,
 {
@@ -131,14 +142,14 @@ where
   async fn send<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, HttpParams>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, HttpParams>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     response(
-      &mut self.lock(&pkgs_aux.tp.ext_req_params_mut().uri.to_ref()).await?.client,
+      &mut self.lock(&pkgs_aux.tp.lease_mut().ext_req_params_mut().uri.to_ref()).await?.client,
       pkg,
       pkgs_aux,
     )
@@ -146,10 +157,9 @@ where
     Ok(())
   }
 }
-
-impl<AUX, HD, RL, RM, SW> Transport for &ClientPool<RL, RM>
+impl<AUX, HD, RL, RM, SW, TP> Transport<TP> for &ClientPool<RL, RM>
 where
-  HD: RefCounter + 'static,
+  HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
   RL: Lock<Resource = SimplePoolResource<RM::Resource>>,
   RM: ResourceManager<
@@ -163,10 +173,10 @@ where
   for<'any> RM: 'any,
 {
   const GROUP: TransportGroup = TransportGroup::HTTP;
-  type Params = HttpParams;
+  type Inner = Http2<HD, true>;
 }
 
-impl<HD, SW> RecievingTransport for Http2<HD, true>
+impl<HD, SW, TP> RecievingTransport<TP> for Http2<HD, true>
 where
   HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
@@ -175,7 +185,7 @@ where
   #[inline]
   async fn recv<A, DRSR>(
     &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<Range<usize>, A::Error>
   where
     A: Api,
@@ -183,55 +193,55 @@ where
     Ok(0..pkgs_aux.byte_buffer.len())
   }
 }
-
-impl<HD, SW> SendingTransport for Http2<HD, true>
+impl<HD, SW, TP> SendingTransport<TP> for Http2<HD, true>
 where
   HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
   SW: StreamWriter,
+  TP: LeaseMut<HttpParams>,
 {
   #[inline]
   async fn send<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, HttpParams>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, HttpParams>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     response(self, pkg, pkgs_aux).await?;
     Ok(())
   }
 }
-
-impl<HD, SW> Transport for Http2<HD, true>
+impl<HD, SW, TP> Transport<TP> for Http2<HD, true>
 where
   HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
   SW: StreamWriter,
 {
   const GROUP: TransportGroup = TransportGroup::HTTP;
-  type Params = HttpParams;
+  type Inner = Self;
 }
 
 #[inline]
-async fn response<A, DRSR, HD, P, SW>(
+async fn response<A, DRSR, HD, P, SW, TP>(
   mut client: &mut Http2<HD, true>,
   pkg: &mut P,
-  pkgs_aux: &mut PkgsAux<A, DRSR, HttpParams>,
+  pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
 ) -> Result<(), A::Error>
 where
   A: Api,
-  P: Package<A, DRSR, HttpParams>,
+  P: Package<A, DRSR, Http2<HD, true>, TP>,
   HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
   SW: StreamWriter,
+  TP: LeaseMut<HttpParams>,
 {
   pkgs_aux.byte_buffer.clear();
-  pkgs_aux.tp.ext_req_params_mut().headers.clear();
+  pkgs_aux.tp.lease_mut().ext_req_params_mut().headers.clear();
   manage_before_sending_related(pkg, pkgs_aux, &mut client).await?;
-  let HttpReqParams { headers, method, mime, uri } = pkgs_aux.tp.ext_req_params_mut();
+  let HttpReqParams { headers, method, mime, uri } = pkgs_aux.tp.lease_mut().ext_req_params_mut();
   headers.push_from_iter(Header::from_name_and_value(
     KnownHeaderName::UserAgent.into(),
     [WTX_USER_AGENT.as_bytes()],
@@ -248,8 +258,8 @@ where
   let mut res = ReqBuilder::get(rrb).method(*method).send(client, &uri.to_ref()).await?;
   mem::swap(&mut pkgs_aux.byte_buffer, &mut res.rrd.body);
   mem::swap(headers, &mut res.rrd.headers);
-  pkgs_aux.tp.ext_res_params_mut().status_code = res.status_code;
-  manage_after_sending_related(pkg, pkgs_aux).await?;
-  pkgs_aux.tp.reset();
+  pkgs_aux.tp.lease_mut().ext_res_params_mut().status_code = res.status_code;
+  manage_after_sending_related(pkg, pkgs_aux, &mut client).await?;
+  pkgs_aux.tp.lease_mut().reset();
   Ok(())
 }
diff --git a/wtx/src/client_api_framework/network/transport/wtx_ws.rs b/wtx/src/client_api_framework/network/transport/wtx_ws.rs
index 0958e78b..40772686 100644
--- a/wtx/src/client_api_framework/network/transport/wtx_ws.rs
+++ b/wtx/src/client_api_framework/network/transport/wtx_ws.rs
@@ -13,14 +13,14 @@ use crate::{
     pkg::{Package, PkgsAux},
     Api, ClientApiFrameworkError,
   },
-  misc::{FnMutFut, Vector},
+  misc::{FnMutFut, LeaseMut, Vector},
   web_socket::{Frame, OpCode},
 };
 use core::ops::Range;
 
-async fn recv<A, DRSR>(
+async fn recv<A, DRSR, TP>(
   frame: Frame<&mut [u8], true>,
-  pkgs_aux: &mut PkgsAux<A, DRSR, WsParams>,
+  pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
 ) -> crate::Result<Range<usize>> {
   pkgs_aux.byte_buffer.clear();
   if let OpCode::Close = frame.op_code() {
@@ -30,9 +30,9 @@ async fn recv<A, DRSR>(
   Ok(0..pkgs_aux.byte_buffer.len())
 }
 
-async fn send<A, DRSR, P, T>(
+async fn send<A, DRSR, P, T, TP>(
   pkg: &mut P,
-  pkgs_aux: &mut PkgsAux<A, DRSR, WsParams>,
+  pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   trans: &mut T,
   mut cb: impl for<'any> FnMutFut<
     (Frame<&'any mut Vector<u8>, true>, &'any mut T),
@@ -41,18 +41,19 @@ async fn send<A, DRSR, P, T>(
 ) -> Result<(), A::Error>
 where
   A: Api,
-  P: Package<A, DRSR, WsParams>,
-  T: Transport<Params = WsParams>,
+  P: Package<A, DRSR, T, TP>,
+  T: Transport<TP>,
+  TP: LeaseMut<WsParams>,
 {
   pkgs_aux.byte_buffer.clear();
   manage_before_sending_related(pkg, pkgs_aux, &mut *trans).await?;
-  let op_code = match pkgs_aux.tp.ext_req_params_mut().ty {
+  let op_code = match pkgs_aux.tp.lease_mut().ext_req_params_mut().ty {
     WsReqParamsTy::Bytes => OpCode::Binary,
     WsReqParamsTy::String => OpCode::Text,
   };
   cb.call((Frame::new_fin(op_code, &mut pkgs_aux.byte_buffer), trans)).await?;
   pkgs_aux.byte_buffer.clear();
-  manage_after_sending_related(pkg, pkgs_aux).await?;
-  pkgs_aux.tp.reset();
+  manage_after_sending_related(pkg, pkgs_aux, trans).await?;
+  pkgs_aux.tp.lease_mut().reset();
   Ok(())
 }
diff --git a/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket.rs b/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket.rs
index fc3805fc..1684420c 100644
--- a/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket.rs
+++ b/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket.rs
@@ -15,7 +15,7 @@ use crate::{
 };
 use core::ops::Range;
 
-impl<NC, S, WSB> RecievingTransport for WebSocket<NC, S, WSB, true>
+impl<NC, S, TP, WSB> RecievingTransport<TP> for WebSocket<NC, S, WSB, true>
 where
   NC: NegotiatedCompression,
   S: Stream,
@@ -24,7 +24,7 @@ where
   #[inline]
   async fn recv<A, DRSR>(
     &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<Range<usize>, A::Error>
   where
     A: Api,
@@ -33,35 +33,36 @@ where
   }
 }
 
-impl<NC, S, WSB> SendingTransport for WebSocket<NC, S, WSB, true>
+impl<NC, S, TP, WSB> SendingTransport<TP> for WebSocket<NC, S, WSB, true>
 where
   NC: NegotiatedCompression,
   S: Stream,
+  TP: LeaseMut<WsParams>,
   WSB: LeaseMut<WebSocketBuffer>,
 {
   #[inline]
   async fn send<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, WsParams>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, WsParams>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     send(pkg, pkgs_aux, self, cb).await?;
     Ok(())
   }
 }
 
-impl<NC, S, WSB> Transport for WebSocket<NC, S, WSB, true>
+impl<NC, S, TP, WSB> Transport<TP> for WebSocket<NC, S, WSB, true>
 where
   NC: NegotiatedCompression,
   S: Stream,
   WSB: LeaseMut<WebSocketBuffer>,
 {
-  const GROUP: TransportGroup = TransportGroup::TCP;
-  type Params = WsParams;
+  const GROUP: TransportGroup = TransportGroup::WebSocket;
+  type Inner = Self;
 }
 
 async fn cb<NC, S, WSB>(
diff --git a/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_parts_owned.rs b/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_parts_owned.rs
index f0f2e8e6..bf0475aa 100644
--- a/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_parts_owned.rs
+++ b/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_parts_owned.rs
@@ -7,22 +7,26 @@ use crate::{
     pkg::{Package, PkgsAux},
     Api,
   },
-  misc::{Lock, StreamReader, StreamWriter},
-  web_socket::{compression::NegotiatedCompression, WebSocketCommonPartOwned, WebSocketPartsOwned},
+  misc::{LeaseMut, Lock, StreamReader, StreamWriter},
+  web_socket::{
+    compression::NegotiatedCompression, WebSocketCommonPartOwned, WebSocketPartsOwned,
+    WebSocketWriterPartOwned,
+  },
 };
 use core::ops::Range;
 
-impl<C, NC, SR, SW> RecievingTransport for WebSocketPartsOwned<C, NC, SR, SW, true>
+impl<C, NC, SR, SW, TP> RecievingTransport<TP> for WebSocketPartsOwned<C, NC, SR, SW, true>
 where
   C: Lock<Resource = WebSocketCommonPartOwned<NC, SW, true>>,
   NC: NegotiatedCompression,
   SR: StreamReader,
   SW: StreamWriter,
+  TP: LeaseMut<WsParams>,
 {
   #[inline]
   async fn recv<A, DRSR>(
     &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<Range<usize>, A::Error>
   where
     A: Api,
@@ -31,34 +35,35 @@ where
   }
 }
 
-impl<C, NC, SR, SW> SendingTransport for WebSocketPartsOwned<C, NC, SR, SW, true>
+impl<C, NC, SR, SW, TP> SendingTransport<TP> for WebSocketPartsOwned<C, NC, SR, SW, true>
 where
   C: Lock<Resource = WebSocketCommonPartOwned<NC, SW, true>>,
   NC: NegotiatedCompression,
   SR: StreamReader,
   SW: StreamWriter,
+  TP: LeaseMut<WsParams>,
 {
   #[inline]
   async fn send<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, WsParams>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, WsParams>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     self.writer.send(pkg, pkgs_aux).await
   }
 }
 
-impl<C, NC, SR, SW> Transport for WebSocketPartsOwned<C, NC, SR, SW, true>
+impl<C, NC, SR, SW, TP> Transport<TP> for WebSocketPartsOwned<C, NC, SR, SW, true>
 where
   C: Lock<Resource = WebSocketCommonPartOwned<NC, SW, true>>,
   NC: NegotiatedCompression,
   SR: StreamReader,
   SW: StreamWriter,
 {
-  const GROUP: TransportGroup = TransportGroup::TCP;
-  type Params = WsParams;
+  const GROUP: TransportGroup = TransportGroup::WebSocket;
+  type Inner = WebSocketWriterPartOwned<C, NC, SW, true>;
 }
diff --git a/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_reader_part_owned.rs b/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_reader_part_owned.rs
index af908f6d..ba08afe0 100644
--- a/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_reader_part_owned.rs
+++ b/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_reader_part_owned.rs
@@ -7,24 +7,25 @@ use crate::{
     pkg::PkgsAux,
     Api,
   },
-  misc::{Lock, StreamReader, StreamWriter},
+  misc::{LeaseMut, Lock, StreamReader, StreamWriter},
   web_socket::{
     compression::NegotiatedCompression, WebSocketCommonPartOwned, WebSocketReaderPartOwned,
   },
 };
 use core::ops::Range;
 
-impl<C, NC, SR, SW> RecievingTransport for WebSocketReaderPartOwned<C, NC, SR, true>
+impl<C, NC, SR, SW, TP> RecievingTransport<TP> for WebSocketReaderPartOwned<C, NC, SR, true>
 where
   C: Lock<Resource = WebSocketCommonPartOwned<NC, SW, true>>,
   NC: NegotiatedCompression,
   SR: StreamReader,
   SW: StreamWriter,
+  TP: LeaseMut<WsParams>,
 {
   #[inline]
   async fn recv<A, DRSR>(
     &mut self,
-    pkgs_aux: &mut PkgsAux<A, DRSR, Self::Params>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<Range<usize>, A::Error>
   where
     A: Api,
@@ -33,13 +34,13 @@ where
   }
 }
 
-impl<C, NC, SR, SW> Transport for WebSocketReaderPartOwned<C, NC, SR, true>
+impl<C, NC, SR, SW, TP> Transport<TP> for WebSocketReaderPartOwned<C, NC, SR, true>
 where
   C: Lock<Resource = WebSocketCommonPartOwned<NC, SW, true>>,
   NC: NegotiatedCompression,
   SR: StreamReader,
   SW: StreamWriter,
 {
-  const GROUP: TransportGroup = TransportGroup::TCP;
-  type Params = WsParams;
+  const GROUP: TransportGroup = TransportGroup::WebSocket;
+  type Inner = Self;
 }
diff --git a/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_writer_part_owned.rs b/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_writer_part_owned.rs
index 58a5b165..def61580 100644
--- a/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_writer_part_owned.rs
+++ b/wtx/src/client_api_framework/network/transport/wtx_ws/web_socket_writer_part_owned.rs
@@ -7,41 +7,42 @@ use crate::{
     pkg::{Package, PkgsAux},
     Api,
   },
-  misc::{Lock, StreamWriter, Vector},
+  misc::{LeaseMut, Lock, StreamWriter, Vector},
   web_socket::{
     compression::NegotiatedCompression, Frame, WebSocketCommonPartOwned, WebSocketWriterPartOwned,
   },
 };
 
-impl<C, NC, SW> SendingTransport for WebSocketWriterPartOwned<C, NC, SW, true>
+impl<C, NC, SW, TP> SendingTransport<TP> for WebSocketWriterPartOwned<C, NC, SW, true>
 where
   C: Lock<Resource = WebSocketCommonPartOwned<NC, SW, true>>,
   NC: NegotiatedCompression,
   SW: StreamWriter,
+  TP: LeaseMut<WsParams>,
 {
   #[inline]
   async fn send<A, DRSR, P>(
     &mut self,
     pkg: &mut P,
-    pkgs_aux: &mut PkgsAux<A, DRSR, WsParams>,
+    pkgs_aux: &mut PkgsAux<A, DRSR, TP>,
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, WsParams>,
+    P: Package<A, DRSR, Self::Inner, TP>,
   {
     send(pkg, pkgs_aux, self, cb).await?;
     Ok(())
   }
 }
 
-impl<C, NC, SW> Transport for WebSocketWriterPartOwned<C, NC, SW, true>
+impl<C, NC, SW, TP> Transport<TP> for WebSocketWriterPartOwned<C, NC, SW, true>
 where
   C: Lock<Resource = WebSocketCommonPartOwned<NC, SW, true>>,
   NC: NegotiatedCompression,
   SW: StreamWriter,
 {
-  const GROUP: TransportGroup = TransportGroup::TCP;
-  type Params = WsParams;
+  const GROUP: TransportGroup = TransportGroup::WebSocket;
+  type Inner = Self;
 }
 
 async fn cb<C, NC, SW>(
diff --git a/wtx/src/client_api_framework/network/transport_group.rs b/wtx/src/client_api_framework/network/transport_group.rs
index 98d6dd94..6f2648e4 100644
--- a/wtx/src/client_api_framework/network/transport_group.rs
+++ b/wtx/src/client_api_framework/network/transport_group.rs
@@ -9,10 +9,6 @@ pub enum TransportGroup {
   HTTP,
   /// Mock or dummy implementations
   Stub,
-  /// Transmission Control Protocol
-  TCP,
-  /// User Datagram Protocol
-  UDP,
   /// WebSocket
   WebSocket,
 }
@@ -24,8 +20,6 @@ impl From<TransportGroup> for &'static str {
       TransportGroup::Custom(elem) => elem,
       TransportGroup::HTTP => "HTTP",
       TransportGroup::Stub => "Stub",
-      TransportGroup::TCP => "TCP",
-      TransportGroup::UDP => "UDP",
       TransportGroup::WebSocket => "WebSocket",
     }
   }
diff --git a/wtx/src/client_api_framework/network/udp.rs b/wtx/src/client_api_framework/network/udp.rs
deleted file mode 100644
index 79882387..00000000
--- a/wtx/src/client_api_framework/network/udp.rs
+++ /dev/null
@@ -1,54 +0,0 @@
-use crate::{client_api_framework::network::transport::TransportParams, misc::UriString};
-
-#[derive(Debug)]
-#[doc = generic_trans_params_doc!()]
-pub struct UdpParams(UdpReqParams, UdpResParams);
-
-impl UdpParams {
-  /// For example, from `127.0.0.1:8090`.
-  #[inline]
-  pub fn from_uri(url: &str) -> Self {
-    Self(UdpReqParams { url: UriString::new(url.into()) }, UdpResParams)
-  }
-}
-
-impl TransportParams for UdpParams {
-  type ExternalRequestParams = UdpReqParams;
-  type ExternalResponseParams = UdpResParams;
-
-  #[inline]
-  fn ext_req_params(&self) -> &Self::ExternalRequestParams {
-    &self.0
-  }
-
-  #[inline]
-  fn ext_req_params_mut(&mut self) -> &mut Self::ExternalRequestParams {
-    &mut self.0
-  }
-
-  #[inline]
-  fn ext_res_params(&self) -> &Self::ExternalResponseParams {
-    &self.1
-  }
-
-  #[inline]
-  fn ext_res_params_mut(&mut self) -> &mut Self::ExternalResponseParams {
-    &mut self.1
-  }
-
-  #[inline]
-  fn reset(&mut self) {
-    self.0.url.truncate_with_initial_len();
-  }
-}
-
-#[derive(Debug)]
-#[doc = generic_trans_req_params_doc!("UDP")]
-pub struct UdpReqParams {
-  /// Used every time a send-like function is called.
-  pub url: UriString,
-}
-
-#[derive(Debug)]
-#[doc = generic_trans_res_params_doc!("UDP")]
-pub struct UdpResParams;
diff --git a/wtx/src/client_api_framework/network/ws.rs b/wtx/src/client_api_framework/network/ws.rs
index 12c52859..b1e12692 100644
--- a/wtx/src/client_api_framework/network/ws.rs
+++ b/wtx/src/client_api_framework/network/ws.rs
@@ -1,4 +1,7 @@
-use crate::client_api_framework::network::transport::TransportParams;
+use crate::{
+  client_api_framework::network::transport::TransportParams,
+  misc::{Lease, LeaseMut},
+};
 
 /// How the WebSocket request should be issued.
 #[derive(Clone, Copy, Debug)]
@@ -13,6 +16,20 @@ pub enum WsReqParamsTy {
 #[doc = generic_trans_params_doc!()]
 pub struct WsParams(WsReqParams, WsResParams);
 
+impl Lease<WsParams> for WsParams {
+  #[inline]
+  fn lease(&self) -> &WsParams {
+    self
+  }
+}
+
+impl LeaseMut<WsParams> for WsParams {
+  #[inline]
+  fn lease_mut(&mut self) -> &mut WsParams {
+    self
+  }
+}
+
 impl TransportParams for WsParams {
   type ExternalRequestParams = WsReqParams;
   type ExternalResponseParams = WsResParams;
diff --git a/wtx/src/client_api_framework/pkg.rs b/wtx/src/client_api_framework/pkg.rs
index 294e6d1d..423c39d2 100644
--- a/wtx/src/client_api_framework/pkg.rs
+++ b/wtx/src/client_api_framework/pkg.rs
@@ -7,7 +7,7 @@ mod pkg_with_helper;
 mod pkgs_aux;
 
 use crate::{
-  client_api_framework::{network::transport::TransportParams, Api},
+  client_api_framework::Api,
   data_transformation::dnsn::{Deserialize, Serialize},
   misc::Vector,
 };
@@ -23,11 +23,10 @@ pub use pkgs_aux::*;
 ///
 /// `A`: Associated API.
 /// `DRSR`: DeserializeR/SerializeR
-/// `TP`: Transport Parameters
-pub trait Package<A, DRSR, TP>
+/// `T`: Transport
+pub trait Package<A, DRSR, T, TP>
 where
   A: Api,
-  TP: TransportParams,
 {
   /// The expected data format that is going to be sent to an external actor.
   type ExternalRequestContent: Serialize<DRSR>;
@@ -41,8 +40,8 @@ where
   #[inline]
   fn after_sending(
     &mut self,
-    _: &mut A,
-    _: &mut TP::ExternalResponseParams,
+    _: (&mut A, &mut Vector<u8>, &mut DRSR),
+    _: (&mut T, &mut TP),
   ) -> impl Future<Output = Result<(), A::Error>> {
     async { Ok(()) }
   }
@@ -52,9 +51,8 @@ where
   #[inline]
   fn before_sending(
     &mut self,
-    _: &mut A,
-    _: &mut TP::ExternalRequestParams,
-    _: &mut Vector<u8>,
+    _: (&mut A, &mut Vector<u8>, &mut DRSR),
+    _: (&mut T, &mut TP),
   ) -> impl Future<Output = Result<(), A::Error>> {
     async { Ok(()) }
   }
@@ -76,9 +74,9 @@ where
   fn pkg_params_mut(&mut self) -> &mut Self::PackageParams;
 }
 
-impl<DRSR, TP> Package<(), DRSR, TP> for ()
+impl<A, DRSR, T, TP> Package<A, DRSR, T, TP> for ()
 where
-  TP: TransportParams,
+  A: Api,
 {
   type ExternalRequestContent = ();
   type ExternalResponseContent<'de> = ();
@@ -105,11 +103,10 @@ where
   }
 }
 
-impl<A, DRSR, P, TP> Package<A, DRSR, TP> for &mut P
+impl<A, DRSR, P, T, TP> Package<A, DRSR, T, TP> for &mut P
 where
   A: Api,
-  P: Package<A, DRSR, TP>,
-  TP: TransportParams,
+  P: Package<A, DRSR, T, TP>,
 {
   type ExternalRequestContent = P::ExternalRequestContent;
   type ExternalResponseContent<'de> = P::ExternalResponseContent<'de>;
@@ -118,20 +115,19 @@ where
   #[inline]
   async fn after_sending(
     &mut self,
-    api: &mut A,
-    ext_res_params: &mut TP::ExternalResponseParams,
+    (api, bytes, drsr): (&mut A, &mut Vector<u8>, &mut DRSR),
+    (trans, trans_params): (&mut T, &mut TP),
   ) -> Result<(), A::Error> {
-    (**self).after_sending(api, ext_res_params).await
+    (**self).after_sending((api, bytes, drsr), (trans, trans_params)).await
   }
 
   #[inline]
   async fn before_sending(
     &mut self,
-    api: &mut A,
-    ext_req_params: &mut TP::ExternalRequestParams,
-    req_bytes: &mut Vector<u8>,
+    (api, bytes, drsr): (&mut A, &mut Vector<u8>, &mut DRSR),
+    (trans, trans_params): (&mut T, &mut TP),
   ) -> Result<(), A::Error> {
-    (**self).before_sending(api, ext_req_params, req_bytes).await
+    (**self).before_sending((api, bytes, drsr), (trans, trans_params)).await
   }
 
   #[inline]
diff --git a/wtx/src/client_api_framework/pkg/batch_pkg.rs b/wtx/src/client_api_framework/pkg/batch_pkg.rs
index de03ad73..0ffc5242 100644
--- a/wtx/src/client_api_framework/pkg/batch_pkg.rs
+++ b/wtx/src/client_api_framework/pkg/batch_pkg.rs
@@ -1,5 +1,5 @@
 use crate::{
-  client_api_framework::{network::transport::TransportParams, pkg::Package, Api},
+  client_api_framework::{pkg::Package, Api},
   data_transformation::dnsn::Serialize,
   misc::Vector,
 };
@@ -7,9 +7,9 @@ use core::marker::PhantomData;
 
 /// Used to perform batch requests with multiple packages.
 #[derive(Debug)]
-pub struct BatchPkg<'slice, A, DRSR, P, TP>(BatchElems<'slice, A, DRSR, P, TP>, ());
+pub struct BatchPkg<'slice, A, DRSR, P, T, TP>(BatchElems<'slice, A, DRSR, P, T, TP>, ());
 
-impl<'slice, A, DRSR, P, TP> BatchPkg<'slice, A, DRSR, P, TP> {
+impl<'slice, A, DRSR, P, T, TP> BatchPkg<'slice, A, DRSR, P, T, TP> {
   /// Currently, only slices of packages are allowed to perform batch requests.
   #[inline]
   pub fn new(slice: &'slice mut [P]) -> Self {
@@ -17,25 +17,24 @@ impl<'slice, A, DRSR, P, TP> BatchPkg<'slice, A, DRSR, P, TP> {
   }
 }
 
-impl<'slice, A, DRSR, P, TP> Package<A, DRSR, TP> for BatchPkg<'slice, A, DRSR, P, TP>
+impl<'slice, A, DRSR, P, T, TP> Package<A, DRSR, T, TP> for BatchPkg<'slice, A, DRSR, P, T, TP>
 where
   A: Api,
-  BatchElems<'slice, A, DRSR, P, TP>: Serialize<DRSR>,
-  P: Package<A, DRSR, TP>,
-  TP: TransportParams,
+  BatchElems<'slice, A, DRSR, P, T, TP>: Serialize<DRSR>,
+  P: Package<A, DRSR, T, TP>,
 {
-  type ExternalRequestContent = BatchElems<'slice, A, DRSR, P, TP>;
+  type ExternalRequestContent = BatchElems<'slice, A, DRSR, P, T, TP>;
   type ExternalResponseContent<'de> = ();
   type PackageParams = ();
 
   #[inline]
   async fn after_sending(
     &mut self,
-    api: &mut A,
-    ext_res_params: &mut TP::ExternalResponseParams,
+    (api, bytes, drsr): (&mut A, &mut Vector<u8>, &mut DRSR),
+    (trans, trans_params): (&mut T, &mut TP),
   ) -> Result<(), A::Error> {
     for elem in &mut *self.0 .0 {
-      elem.after_sending(api, ext_res_params).await?;
+      elem.after_sending((api, bytes, drsr), (trans, trans_params)).await?;
     }
     Ok(())
   }
@@ -43,12 +42,11 @@ where
   #[inline]
   async fn before_sending(
     &mut self,
-    api: &mut A,
-    ext_req_params: &mut TP::ExternalRequestParams,
-    req_bytes: &mut Vector<u8>,
+    (api, bytes, drsr): (&mut A, &mut Vector<u8>, &mut DRSR),
+    (trans, trans_params): (&mut T, &mut TP),
   ) -> Result<(), A::Error> {
     for elem in &mut *self.0 .0 {
-      elem.before_sending(api, ext_req_params, req_bytes).await?;
+      elem.before_sending((api, bytes, drsr), (trans, trans_params)).await?;
     }
     Ok(())
   }
@@ -76,13 +74,13 @@ where
 
 /// Used internally and exclusively by [BatchPkg]. Not intended for public usage.
 #[derive(Debug)]
-pub struct BatchElems<'slice, A, DRSR, P, T>(&'slice mut [P], PhantomData<(A, DRSR, T)>);
+pub struct BatchElems<'slice, A, DRSR, P, T, TP>(&'slice mut [P], PhantomData<(A, DRSR, T, TP)>);
 
 #[cfg(feature = "serde_json")]
 mod serde_json {
   use crate::{
     client_api_framework::{
-      network::transport::TransportParams,
+      network::transport::Transport,
       pkg::{BatchElems, Package},
       Api,
     },
@@ -91,13 +89,13 @@ mod serde_json {
   };
   use serde::Serializer;
 
-  impl<A, DRSR, P, TP> crate::data_transformation::dnsn::Serialize<SerdeJson>
-    for BatchElems<'_, A, DRSR, P, TP>
+  impl<A, DRSR, P, T, TP> crate::data_transformation::dnsn::Serialize<SerdeJson>
+    for BatchElems<'_, A, DRSR, P, T, TP>
   where
     A: Api,
-    P: Package<A, DRSR, TP>,
+    P: Package<A, DRSR, T, TP>,
     P::ExternalRequestContent: serde::Serialize,
-    TP: TransportParams,
+    T: Transport<TP>,
   {
     #[inline]
     fn to_bytes(&mut self, bytes: &mut Vector<u8>, _: &mut SerdeJson) -> crate::Result<()> {
diff --git a/wtx/src/client_api_framework/pkg/pkg_with_helper.rs b/wtx/src/client_api_framework/pkg/pkg_with_helper.rs
index f8acd961..78bf7d01 100644
--- a/wtx/src/client_api_framework/pkg/pkg_with_helper.rs
+++ b/wtx/src/client_api_framework/pkg/pkg_with_helper.rs
@@ -1,5 +1,5 @@
 use crate::{
-  client_api_framework::{network::transport::TransportParams, pkg::Package, Api},
+  client_api_framework::{pkg::Package, Api},
   data_transformation::{format::JsonRpcRequest, Id},
   misc::Vector,
 };
@@ -31,11 +31,10 @@ impl<H, P> PkgWithHelper<H, P> {
   }
 }
 
-impl<A, DRSR, H, P, TP> Package<A, DRSR, TP> for PkgWithHelper<H, P>
+impl<A, DRSR, H, P, T, TP> Package<A, DRSR, T, TP> for PkgWithHelper<H, P>
 where
   A: Api,
-  P: Package<A, DRSR, TP>,
-  TP: TransportParams,
+  P: Package<A, DRSR, T, TP>,
 {
   type ExternalRequestContent = P::ExternalRequestContent;
   type ExternalResponseContent<'de> = P::ExternalResponseContent<'de>;
@@ -44,20 +43,19 @@ where
   #[inline]
   async fn after_sending(
     &mut self,
-    api: &mut A,
-    ext_res_params: &mut TP::ExternalResponseParams,
+    (api, bytes, drsr): (&mut A, &mut Vector<u8>, &mut DRSR),
+    (trans, trans_params): (&mut T, &mut TP),
   ) -> Result<(), A::Error> {
-    self.pkg.after_sending(api, ext_res_params).await
+    self.pkg.after_sending((api, bytes, drsr), (trans, trans_params)).await
   }
 
   #[inline]
   async fn before_sending(
     &mut self,
-    api: &mut A,
-    ext_req_params: &mut TP::ExternalRequestParams,
-    req_bytes: &mut Vector<u8>,
+    (api, bytes, drsr): (&mut A, &mut Vector<u8>, &mut DRSR),
+    (trans, trans_params): (&mut T, &mut TP),
   ) -> Result<(), A::Error> {
-    self.pkg.before_sending(api, ext_req_params, req_bytes).await
+    self.pkg.before_sending((api, bytes, drsr), (trans, trans_params)).await
   }
 
   #[inline]
diff --git a/wtx/src/client_api_framework/pkg/pkgs_aux.rs b/wtx/src/client_api_framework/pkg/pkgs_aux.rs
index d3ed5a30..9fb60642 100644
--- a/wtx/src/client_api_framework/pkg/pkgs_aux.rs
+++ b/wtx/src/client_api_framework/pkg/pkgs_aux.rs
@@ -1,5 +1,4 @@
 use crate::{
-  client_api_framework::network::transport::TransportParams,
   data_transformation::{
     format::{JsonRpcRequest, VerbatimRequest},
     Id,
@@ -17,10 +16,7 @@ use crate::{
 /// * `DRSR`: DeserializeR/SerializeR
 /// * `TP`: Transport Parameters
 #[derive(Debug)]
-pub struct PkgsAux<A, DRSR, TP>
-where
-  TP: TransportParams,
-{
+pub struct PkgsAux<A, DRSR, TP> {
   /// API instance.
   pub api: A,
   /// Used by practically all transports to serialize or receive data in any desired operation.
@@ -31,19 +27,22 @@ where
   pub drsr: DRSR,
   /// External request and response parameters.
   pub tp: TP,
-  built_requests: Id,
+  pub(crate) built_requests: Id,
 }
 
-impl<A, DRSR, TP> PkgsAux<A, DRSR, TP>
-where
-  TP: TransportParams,
-{
+impl<A, DRSR, TP> PkgsAux<A, DRSR, TP> {
   /// Creates an instance with the minimum amount of mandatory parameters.
   #[inline]
   pub fn from_minimum(api: A, drsr: DRSR, tp: TP) -> Self {
     Self { api, byte_buffer: Vector::new(), drsr, tp, built_requests: 0 }
   }
 
+  /// New instance
+  #[inline]
+  pub fn new(api: A, byte_buffer: Vector<u8>, drsr: DRSR, tp: TP) -> Self {
+    Self { api, byte_buffer, drsr, tp, built_requests: 0 }
+  }
+
   /// The number of constructed requests that is not necessarily equal the number of sent requests.
   ///
   /// Wraps when a hard-to-happen overflow occurs
diff --git a/wtx/src/data_transformation/dnsn/borsh.rs b/wtx/src/data_transformation/dnsn/borsh.rs
index 61321a1e..9fe98197 100644
--- a/wtx/src/data_transformation/dnsn/borsh.rs
+++ b/wtx/src/data_transformation/dnsn/borsh.rs
@@ -1,7 +1,23 @@
+use crate::misc::{Lease, LeaseMut};
+
 /// Type that indicates the usage of the `borsh` dependency.
 #[derive(Debug, Default)]
 pub struct Borsh;
 
+impl Lease<Borsh> for Borsh {
+  #[inline]
+  fn lease(&self) -> &Borsh {
+    self
+  }
+}
+
+impl LeaseMut<Borsh> for Borsh {
+  #[inline]
+  fn lease_mut(&mut self) -> &mut Borsh {
+    self
+  }
+}
+
 #[cfg(test)]
 mod tests {
   _create_dnsn_test!(
diff --git a/wtx/src/data_transformation/dnsn/quick_protobuf.rs b/wtx/src/data_transformation/dnsn/quick_protobuf.rs
index 080c04be..053d68b3 100644
--- a/wtx/src/data_transformation/dnsn/quick_protobuf.rs
+++ b/wtx/src/data_transformation/dnsn/quick_protobuf.rs
@@ -1,3 +1,19 @@
+use crate::misc::{Lease, LeaseMut};
+
 /// Type that indicates the usage of the `quick-protobuf` dependency.
 #[derive(Debug, Default)]
 pub struct QuickProtobuf;
+
+impl Lease<QuickProtobuf> for QuickProtobuf {
+  #[inline]
+  fn lease(&self) -> &QuickProtobuf {
+    self
+  }
+}
+
+impl LeaseMut<QuickProtobuf> for QuickProtobuf {
+  #[inline]
+  fn lease_mut(&mut self) -> &mut QuickProtobuf {
+    self
+  }
+}
diff --git a/wtx/src/data_transformation/dnsn/serde_json.rs b/wtx/src/data_transformation/dnsn/serde_json.rs
index 3f720fd8..2e07c9eb 100644
--- a/wtx/src/data_transformation/dnsn/serde_json.rs
+++ b/wtx/src/data_transformation/dnsn/serde_json.rs
@@ -1,10 +1,25 @@
+use crate::misc::{Lease, LeaseMut};
+
 /// Type that indicates the usage of the `serde_json` dependency.
 #[derive(Debug)]
 pub struct SerdeJson;
 
-_impl_se_collections!(
-  for SerdeJson => serde::Serialize;
+impl Lease<SerdeJson> for SerdeJson {
+  #[inline]
+  fn lease(&self) -> &SerdeJson {
+    self
+  }
+}
 
+impl LeaseMut<SerdeJson> for SerdeJson {
+  #[inline]
+  fn lease_mut(&mut self) -> &mut SerdeJson {
+    self
+  }
+}
+
+_impl_se_collections!(
+  (SerdeJson, serde::Serialize),
   array: |this, bytes, _drsr| { serde_json::to_writer(bytes, &this[..])?; }
   arrayvector: |this, bytes, _drsr| { serde_json::to_writer(bytes, this)?; }
   slice_ref: |this, bytes, _drsr| { serde_json::to_writer(bytes, this)?; }
diff --git a/wtx/src/data_transformation/format/borsh.rs b/wtx/src/data_transformation/format/borsh.rs
deleted file mode 100644
index 58b4c17b..00000000
--- a/wtx/src/data_transformation/format/borsh.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-mod borsh_request;
-mod borsh_response;
-
-pub use borsh_request::*;
-pub use borsh_response::*;
diff --git a/wtx/src/data_transformation/format/graph_ql/graph_ql_request.rs b/wtx/src/data_transformation/format/graph_ql/graph_ql_request.rs
index da0dfe38..ce4ca770 100644
--- a/wtx/src/data_transformation/format/graph_ql/graph_ql_request.rs
+++ b/wtx/src/data_transformation/format/graph_ql/graph_ql_request.rs
@@ -1,3 +1,5 @@
+use crate::{data_transformation::dnsn::Serialize, misc::Vector};
+
 /// `GraphQL` request/operation, can be a query or a mutation.
 #[cfg_attr(feature = "serde", derive(serde::Serialize))]
 #[derive(Debug)]
@@ -12,6 +14,23 @@ pub struct GraphQlRequest<ON, Q, V> {
   pub variables: Option<V>,
 }
 
+impl<ON, Q, V> Serialize<()> for GraphQlRequest<ON, Q, V> {
+  #[inline]
+  fn to_bytes(&mut self, _: &mut Vector<u8>, _: &mut ()) -> crate::Result<()> {
+    Ok(())
+  }
+}
+
+impl<DRSR, ON, Q, V> Serialize<&mut DRSR> for GraphQlRequest<ON, Q, V>
+where
+  GraphQlRequest<ON, Q, V>: Serialize<DRSR>,
+{
+  #[inline]
+  fn to_bytes(&mut self, bytes: &mut Vector<u8>, drsr: &mut &mut DRSR) -> crate::Result<()> {
+    self.to_bytes(bytes, drsr)
+  }
+}
+
 #[cfg(feature = "serde_json")]
 mod serde_json {
   use crate::{
diff --git a/wtx/src/data_transformation/format/graph_ql/graph_ql_response.rs b/wtx/src/data_transformation/format/graph_ql/graph_ql_response.rs
index 116ed0cd..d27fe03c 100644
--- a/wtx/src/data_transformation/format/graph_ql/graph_ql_response.rs
+++ b/wtx/src/data_transformation/format/graph_ql/graph_ql_response.rs
@@ -1,4 +1,10 @@
-use crate::{data_transformation::format::GraphQlResponseError, misc::Vector};
+use crate::{
+  data_transformation::{
+    dnsn::{Deserialize, Serialize},
+    format::GraphQlResponseError,
+  },
+  misc::Vector,
+};
 
 /// Replied from an issued [`crate::data_transformation::format::GraphQlRequest`].
 #[derive(Debug)]
@@ -7,6 +13,57 @@ pub struct GraphQlResponse<D, E> {
   pub result: Result<D, Vector<GraphQlResponseError<E>>>,
 }
 
+impl<'de, D, E> Deserialize<'de, ()> for GraphQlResponse<D, E>
+where
+  D: Default,
+{
+  #[inline]
+  fn from_bytes(_: &[u8], _: &mut ()) -> crate::Result<Self> {
+    Ok(Self { result: Ok(D::default()) })
+  }
+
+  #[inline]
+  fn seq_from_bytes(_: &mut Vector<Self>, _: &'de [u8], _: &mut ()) -> crate::Result<()> {
+    Ok(())
+  }
+}
+
+impl<'de, D, DRSR, E> Deserialize<'de, &mut DRSR> for GraphQlResponse<D, E>
+where
+  GraphQlResponse<D, E>: Deserialize<'de, DRSR>,
+{
+  #[inline]
+  fn from_bytes(bytes: &'de [u8], drsr: &mut &mut DRSR) -> crate::Result<Self> {
+    <GraphQlResponse<D, E>>::from_bytes(bytes, drsr)
+  }
+
+  #[inline]
+  fn seq_from_bytes(
+    buffer: &mut Vector<Self>,
+    bytes: &'de [u8],
+    drsr: &mut &mut DRSR,
+  ) -> crate::Result<()> {
+    <GraphQlResponse<D, E>>::seq_from_bytes(buffer, bytes, drsr)
+  }
+}
+
+impl<D, E> Serialize<()> for GraphQlResponse<D, E> {
+  #[inline]
+  fn to_bytes(&mut self, _: &mut Vector<u8>, _: &mut ()) -> crate::Result<()> {
+    Ok(())
+  }
+}
+
+impl<D, DRSR, E> Serialize<&mut DRSR> for GraphQlResponse<D, E>
+where
+  GraphQlResponse<D, E>: Serialize<DRSR>,
+{
+  #[inline]
+  fn to_bytes(&mut self, bytes: &mut Vector<u8>, drsr: &mut &mut DRSR) -> crate::Result<()> {
+    self.to_bytes(bytes, drsr)
+  }
+}
+
 #[cfg(feature = "serde")]
 mod serde {
   use crate::{
diff --git a/wtx/src/data_transformation/format/json.rs b/wtx/src/data_transformation/format/json.rs
deleted file mode 100644
index 9991bfeb..00000000
--- a/wtx/src/data_transformation/format/json.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-mod json_request;
-mod json_response;
-
-pub use json_request::*;
-pub use json_response::*;
diff --git a/wtx/src/data_transformation/format/json_rpc/json_rpc_notification.rs b/wtx/src/data_transformation/format/json_rpc/json_rpc_notification.rs
index bc6b6658..c113c22e 100644
--- a/wtx/src/data_transformation/format/json_rpc/json_rpc_notification.rs
+++ b/wtx/src/data_transformation/format/json_rpc/json_rpc_notification.rs
@@ -1,12 +1,12 @@
 use crate::data_transformation::format::JsonRpcNotificationParams;
-use alloc::string::String;
+use alloc::boxed::Box;
 
 /// A request object without an "id" member. Generally used with WebSocket connections.
 #[cfg_attr(feature = "serde", derive(serde::Deserialize))]
 #[derive(Debug)]
 pub struct JsonRpcNotification<R> {
   /// Name of the method invoked.
-  pub method: Option<String>,
+  pub method: Option<Box<str>>,
   /// See [`JsonRpcNotificationParams`].
   pub params: JsonRpcNotificationParams<R>,
 }
diff --git a/wtx/src/data_transformation/format/json_rpc/json_rpc_request.rs b/wtx/src/data_transformation/format/json_rpc/json_rpc_request.rs
index b09d31c1..88da3e2f 100644
--- a/wtx/src/data_transformation/format/json_rpc/json_rpc_request.rs
+++ b/wtx/src/data_transformation/format/json_rpc/json_rpc_request.rs
@@ -28,6 +28,16 @@ impl<P> Serialize<()> for JsonRpcRequest<P> {
   }
 }
 
+impl<DRSR, P> Serialize<&mut DRSR> for JsonRpcRequest<P>
+where
+  JsonRpcRequest<P>: Serialize<DRSR>,
+{
+  #[inline]
+  fn to_bytes(&mut self, bytes: &mut Vector<u8>, drsr: &mut &mut DRSR) -> crate::Result<()> {
+    self.to_bytes(bytes, drsr)
+  }
+}
+
 impl<P> Borrow<Id> for JsonRpcRequest<P> {
   #[inline]
   fn borrow(&self) -> &Id {
diff --git a/wtx/src/data_transformation/format/json_rpc/json_rpc_response.rs b/wtx/src/data_transformation/format/json_rpc/json_rpc_response.rs
index 8ba77843..e460b3fe 100644
--- a/wtx/src/data_transformation/format/json_rpc/json_rpc_response.rs
+++ b/wtx/src/data_transformation/format/json_rpc/json_rpc_response.rs
@@ -5,7 +5,7 @@ use crate::{
   },
   misc::{Lease, Vector},
 };
-use alloc::string::String;
+use alloc::boxed::Box;
 use core::{
   borrow::Borrow,
   cmp::Ordering,
@@ -20,7 +20,7 @@ pub struct JsonRpcResponse<R> {
   /// The same value specified in the request.
   pub id: Id,
   /// Optional parameter returns by the counterpart.
-  pub method: Option<String>,
+  pub method: Option<Box<str>>,
   /// Contains the `result` or the `error` field.
   pub result: crate::Result<R>,
 }
@@ -40,6 +40,25 @@ where
   }
 }
 
+impl<'de, D, DRSR> Deserialize<'de, &mut DRSR> for JsonRpcResponse<D>
+where
+  JsonRpcResponse<D>: Deserialize<'de, DRSR>,
+{
+  #[inline]
+  fn from_bytes(bytes: &'de [u8], drsr: &mut &mut DRSR) -> crate::Result<Self> {
+    <JsonRpcResponse<D>>::from_bytes(bytes, drsr)
+  }
+
+  #[inline]
+  fn seq_from_bytes(
+    buffer: &mut Vector<Self>,
+    bytes: &'de [u8],
+    drsr: &mut &mut DRSR,
+  ) -> crate::Result<()> {
+    <JsonRpcResponse<D>>::seq_from_bytes(buffer, bytes, drsr)
+  }
+}
+
 impl<D> Serialize<()> for JsonRpcResponse<D> {
   #[inline]
   fn to_bytes(&mut self, _: &mut Vector<u8>, _: &mut ()) -> crate::Result<()> {
diff --git a/wtx/src/data_transformation/format/protobuf.rs b/wtx/src/data_transformation/format/protobuf.rs
deleted file mode 100644
index e1d15819..00000000
--- a/wtx/src/data_transformation/format/protobuf.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-mod protobuf_request;
-mod protobuf_response;
-
-pub use protobuf_request::*;
-pub use protobuf_response::*;
diff --git a/wtx/src/data_transformation/format/verbatim/verbatim_request.rs b/wtx/src/data_transformation/format/verbatim/verbatim_request.rs
index 213020ee..62887bef 100644
--- a/wtx/src/data_transformation/format/verbatim/verbatim_request.rs
+++ b/wtx/src/data_transformation/format/verbatim/verbatim_request.rs
@@ -14,6 +14,16 @@ impl<D> Serialize<()> for VerbatimRequest<D> {
   }
 }
 
+impl<D, DRSR> Serialize<&mut DRSR> for VerbatimRequest<D>
+where
+  VerbatimRequest<D>: Serialize<DRSR>,
+{
+  #[inline]
+  fn to_bytes(&mut self, bytes: &mut Vector<u8>, drsr: &mut &mut DRSR) -> crate::Result<()> {
+    self.to_bytes(bytes, drsr)
+  }
+}
+
 #[cfg(feature = "borsh")]
 mod borsh {
   use crate::{
diff --git a/wtx/src/data_transformation/format/verbatim/verbatim_response.rs b/wtx/src/data_transformation/format/verbatim/verbatim_response.rs
index 41afdd7b..ff732aa0 100644
--- a/wtx/src/data_transformation/format/verbatim/verbatim_response.rs
+++ b/wtx/src/data_transformation/format/verbatim/verbatim_response.rs
@@ -27,6 +27,25 @@ where
   }
 }
 
+impl<'de, D, DRSR> Deserialize<'de, &mut DRSR> for VerbatimResponse<D>
+where
+  VerbatimResponse<D>: Deserialize<'de, DRSR>,
+{
+  #[inline]
+  fn from_bytes(bytes: &'de [u8], drsr: &mut &mut DRSR) -> crate::Result<Self> {
+    <VerbatimResponse<D>>::from_bytes(bytes, drsr)
+  }
+
+  #[inline]
+  fn seq_from_bytes(
+    buffer: &mut Vector<Self>,
+    bytes: &'de [u8],
+    drsr: &mut &mut DRSR,
+  ) -> crate::Result<()> {
+    <VerbatimResponse<D>>::seq_from_bytes(buffer, bytes, drsr)
+  }
+}
+
 impl<D> Serialize<()> for VerbatimResponse<D> {
   #[inline]
   fn to_bytes(&mut self, _: &mut Vector<u8>, _: &mut ()) -> crate::Result<()> {
@@ -34,6 +53,16 @@ impl<D> Serialize<()> for VerbatimResponse<D> {
   }
 }
 
+impl<D, DRSR> Serialize<&mut DRSR> for VerbatimResponse<D>
+where
+  VerbatimResponse<D>: Serialize<DRSR>,
+{
+  #[inline]
+  fn to_bytes(&mut self, bytes: &mut Vector<u8>, drsr: &mut &mut DRSR) -> crate::Result<()> {
+    self.to_bytes(bytes, drsr)
+  }
+}
+
 #[cfg(feature = "borsh")]
 mod borsh {
   use crate::{
diff --git a/wtx/src/data_transformation/macros.rs b/wtx/src/data_transformation/macros.rs
index 5dfa06b8..cbc8bfa1 100644
--- a/wtx/src/data_transformation/macros.rs
+++ b/wtx/src/data_transformation/macros.rs
@@ -32,10 +32,29 @@ macro_rules! generic_data_format_doc {
   };
 }
 
+//macro_rules! _impl_se {
+//  (
+//    ($drsr:ty, $bound:path)
+//  ) => {
+//    impl<D> crate::data_transformation::dnsn::Serialize<&mut SerdeJson> for VerbatimRequest<D>
+//    where
+//      D: serde::Serialize,
+//    {
+//      #[inline]
+//      fn to_bytes(&mut self, bytes: &mut Vector<u8>, _: &mut &mut SerdeJson) -> crate::Result<()> {
+//        if size_of::<D>() == 0 {
+//          return Ok(());
+//        }
+//        serde_json::to_writer(bytes, &self.data)?;
+//        Ok(())
+//      }
+//    }
+//  }
+//}
+
 macro_rules! _impl_se_collections {
   (
-    for $drsr:ty => $bound:path;
-
+    ($drsr:ty, $bound:path),
     $( array: |$array_self:ident, $array_bytes:ident, $array_drsr:ident| $array_block:block )?
     $( arrayvector: |$arrayvector_self:ident, $arrayvector_bytes:ident, $arrayvector_drsr:ident| $arrayvector_block:block )?
     slice_ref: |$slice_ref_self:ident, $slice_ref_bytes:ident, $slice_ref_drsr:ident| $slice_ref_block:block
@@ -74,7 +93,7 @@ macro_rules! _impl_se_collections {
       }
     )?
 
-    impl<T> crate::data_transformation::dnsn::Serialize<$drsr> for &'_ [T]
+    impl<T> crate::data_transformation::dnsn::Serialize<$drsr> for &[T]
     where
       T: $bound,
     {
diff --git a/wtx/src/database/client/postgres/postgres_error.rs b/wtx/src/database/client/postgres/postgres_error.rs
index 461ab604..4ac1392c 100644
--- a/wtx/src/database/client/postgres/postgres_error.rs
+++ b/wtx/src/database/client/postgres/postgres_error.rs
@@ -33,9 +33,9 @@ pub enum PostgresError {
   /// Received size differs from expected size.
   UnexpectedBufferSize {
     /// Expected
-    expected: u64,
+    expected: u32,
     /// Received
-    received: u64,
+    received: u32,
   },
   /// Received an unexpected message type.
   UnexpectedDatabaseMessage {
diff --git a/wtx/src/database/client/postgres/tys.rs b/wtx/src/database/client/postgres/tys.rs
index 8470c03e..53ee02a0 100644
--- a/wtx/src/database/client/postgres/tys.rs
+++ b/wtx/src/database/client/postgres/tys.rs
@@ -471,7 +471,7 @@ mod pg_numeric {
         return Err(E::from(
           PostgresError::UnexpectedBufferSize {
             expected: 8,
-            received: Usize::from(dv.bytes().len()).into(),
+            received: Usize::from(dv.bytes().len()).into_u64().try_into().unwrap_or(u32::MAX),
           }
           .into(),
         ));
@@ -585,7 +585,7 @@ mod primitives {
         return Err(E::from(
           PostgresError::UnexpectedBufferSize {
             expected: 1,
-            received: Usize::from(dv.bytes().len()).into(),
+            received: Usize::from(dv.bytes().len()).into_u64().try_into().unwrap_or(u32::MAX),
           }
           .into(),
         ));
@@ -664,8 +664,8 @@ mod primitives {
             return Ok(<$ty>::from_be_bytes([$($elem),+]));
           }
           Err(E::from(PostgresError::UnexpectedBufferSize {
-            expected: Usize::from(size_of::<$ty>()).into(),
-            received: Usize::from(input.bytes().len()).into()
+            expected: Usize::from(size_of::<$ty>()).into_u64().try_into().unwrap_or(u32::MAX),
+            received: Usize::from(input.bytes().len()).into_u64().try_into().unwrap_or(u32::MAX)
           }.into()))
         }
       }
diff --git a/wtx/src/database/from_records.rs b/wtx/src/database/from_records.rs
index b9732ea7..09cea780 100644
--- a/wtx/src/database/from_records.rs
+++ b/wtx/src/database/from_records.rs
@@ -4,8 +4,7 @@ use crate::{
 };
 use alloc::boxed::Box;
 
-/// An element that can be represented from one or more database rows, in other words, entities
-/// with relationships.
+/// An element that can be represented from one or more database rows.
 pub trait FromRecords<'exec, D>: Sized
 where
   D: Database,
diff --git a/wtx/src/database/misc.rs b/wtx/src/database/misc.rs
index ed12005f..5f825ce1 100644
--- a/wtx/src/database/misc.rs
+++ b/wtx/src/database/misc.rs
@@ -14,6 +14,8 @@ where
   ID: Decode<'exec, D> + PartialEq,
 {
   let initial_col_idx = *curr_field_idx;
+  let prev_record_idx = *curr_record_idx;
+  let mut next_col_idx = *curr_field_idx;
   loop {
     let Some(curr_record) = records.get(*curr_record_idx) else {
       break;
@@ -21,11 +23,14 @@ where
     let local_parent_record_id = curr_record.decode::<_, ID>(parent_record_id_column_idx)?;
     if local_parent_record_id == parent_record_id {
       entity_cb(T::from_records((curr_field_idx, &curr_record, curr_record_idx), records)?)?;
+      next_col_idx = *curr_field_idx;
       *curr_field_idx = initial_col_idx;
       *curr_record_idx = curr_record_idx.wrapping_add(1);
     } else {
       break;
     }
   }
+  *curr_field_idx = next_col_idx;
+  *curr_record_idx = prev_record_idx;
   Ok(())
 }
diff --git a/wtx/src/error.rs b/wtx/src/error.rs
index 1328c9c7..f9aea742 100644
--- a/wtx/src/error.rs
+++ b/wtx/src/error.rs
@@ -46,6 +46,8 @@ pub enum Error {
   Flate2CompressError(flate2::CompressError),
   #[cfg(feature = "flate2")]
   Flate2DecompressError(Box<flate2::DecompressError>),
+  #[cfg(feature = "getrandom")]
+  GetRandomError(getrandom::Error),
   #[cfg(feature = "httparse")]
   HttpParse(httparse::Error),
   #[cfg(feature = "matchit")]
@@ -292,6 +294,14 @@ impl From<flate2::DecompressError> for Error {
   }
 }
 
+#[cfg(feature = "getrandom")]
+impl From<getrandom::Error> for Error {
+  #[inline]
+  fn from(from: getrandom::Error) -> Self {
+    Self::GetRandomError(from)
+  }
+}
+
 impl From<core::net::AddrParseError> for Error {
   #[inline]
   fn from(from: core::net::AddrParseError) -> Self {
diff --git a/wtx/src/http/client_pool.rs b/wtx/src/http/client_pool.rs
index c233d592..26ab28fa 100644
--- a/wtx/src/http/client_pool.rs
+++ b/wtx/src/http/client_pool.rs
@@ -38,7 +38,7 @@ pub struct ClientPool<RL, RM> {
 
 impl<AUX, HD, RL, RM, SW> ClientPool<RL, RM>
 where
-  HD: RefCounter + 'static,
+  HD: RefCounter,
   HD::Item: Lock<Resource = Http2Data<Http2Buffer, SW, true>>,
   RL: Lock<Resource = SimplePoolResource<RM::Resource>>,
   RM: ResourceManager<
diff --git a/wtx/src/http/server_framework/state.rs b/wtx/src/http/server_framework/state.rs
index 9452379d..3300b428 100644
--- a/wtx/src/http/server_framework/state.rs
+++ b/wtx/src/http/server_framework/state.rs
@@ -70,30 +70,37 @@ where
   }
 }
 
-impl<'any, CA, SA, RRD> From<State<'any, CA, SA, RRD>> for StateClean<'any, CA, SA, RRD> {
+impl<'any, CA, SA, RRD> From<State<'any, CA, SA, RRD>> for StateClean<'any, CA, SA, RRD>
+where
+  RRD: ReqResDataMut,
+{
   #[inline]
   fn from(state: State<'any, CA, SA, RRD>) -> Self {
-    Self { conn_aux: state.conn_aux, req: state.req, stream_aux: state.stream_aux }
+    Self::new(state.conn_aux, state.stream_aux, state.req)
   }
 }
 
 impl<'any, CA, SA, RRD, const CLEAN: bool> From<&'any mut (CA, SA, Request<RRD>)>
   for StateGeneric<'any, CA, SA, RRD, CLEAN>
+where
+  RRD: ReqResDataMut,
 {
   #[inline]
   fn from((conn_aux, stream_aux, req): &'any mut (CA, SA, Request<RRD>)) -> Self {
-    Self { conn_aux, stream_aux, req }
+    Self::new(conn_aux, stream_aux, req)
   }
 }
 
 impl<'any, CA, SA, RRD, const CLEAN: bool>
   From<&'any mut (&'any mut CA, &'any mut SA, Request<RRD>)>
   for StateGeneric<'any, CA, SA, RRD, CLEAN>
+where
+  RRD: ReqResDataMut,
 {
   #[inline]
   fn from(
     (conn_aux, stream_aux, req): &'any mut (&'any mut CA, &'any mut SA, Request<RRD>),
   ) -> Self {
-    Self { conn_aux, stream_aux, req }
+    Self::new(conn_aux, stream_aux, req)
   }
 }
diff --git a/wtx/src/macros.rs b/wtx/src/macros.rs
index 9b2598d8..efb9bd6b 100644
--- a/wtx/src/macros.rs
+++ b/wtx/src/macros.rs
@@ -362,6 +362,7 @@ macro_rules! _simd_bytes {
     let (_prefix, _chunks, _suffix) = unsafe { $bytes.$align() };
     _simd! {
       fallback => {
+        let _: [u8] = *_chunks;
         let _: [u8] = *$bytes;
         let $bytes_ident = $bytes; $bytes_expr;
       },
diff --git a/wtx/src/misc.rs b/wtx/src/misc.rs
index c845fea4..c6cdfcba 100644
--- a/wtx/src/misc.rs
+++ b/wtx/src/misc.rs
@@ -199,6 +199,14 @@ pub fn tracing_tree_init(
   tracing_subscriber::Registry::default().with(env_filter).with(tracing_tree).try_init()
 }
 
+/// Transforms an `u32` into a [`ArrayString`].
+#[inline]
+pub fn u32_array_string(n: u32) -> ArrayString<10> {
+  let mut str = ArrayString::new();
+  let _rslt = str.write_fmt(format_args!("{n}"));
+  str
+}
+
 /// Transforms an `u64` into a [`ArrayString`].
 #[inline]
 pub fn u64_array_string(n: u64) -> ArrayString<20> {
diff --git a/wtx/src/misc/rng/rand_chacha.rs b/wtx/src/misc/rng/rand_chacha.rs
index 51268b5e..0f0eaf2b 100644
--- a/wtx/src/misc/rng/rand_chacha.rs
+++ b/wtx/src/misc/rng/rand_chacha.rs
@@ -1,4 +1,4 @@
-use rand_core::RngCore;
+use rand_chacha::rand_core::RngCore;
 
 macro_rules! implement {
   ($struct:ty) => {
diff --git a/wtx/src/misc/vector.rs b/wtx/src/misc/vector.rs
index af2d0363..1d6746e1 100644
--- a/wtx/src/misc/vector.rs
+++ b/wtx/src/misc/vector.rs
@@ -2,6 +2,7 @@ use crate::misc::{BufferMode, Lease, LeaseMut, Wrapper, _unlikely_elem};
 use alloc::vec::{Drain, IntoIter, Vec};
 use core::{
   borrow::{Borrow, BorrowMut},
+  cmp::Ordering,
   fmt::{Debug, Display, Formatter},
   hint::assert_unchecked,
   ops::{Deref, DerefMut, RangeBounds},
@@ -47,7 +48,7 @@ impl core::error::Error for VectorError {}
 
 /// A wrapper around the std's vector.
 //#[cfg_attr(kani, derive(kani::Arbitrary))]
-#[derive(Clone, Eq, Ord, PartialEq, PartialOrd)]
+#[derive(Clone)]
 #[repr(transparent)]
 pub struct Vector<T> {
   data: Vec<T>,
@@ -645,6 +646,8 @@ impl<T> FromIterator<T> for Wrapper<crate::Result<Vector<T>>> {
   }
 }
 
+impl<T> Eq for Vector<T> where T: Eq {}
+
 impl<T> IntoIterator for Vector<T> {
   type Item = T;
   type IntoIter = IntoIter<T>;
@@ -655,6 +658,66 @@ impl<T> IntoIterator for Vector<T> {
   }
 }
 
+impl<T> PartialEq for Vector<T>
+where
+  T: PartialEq,
+{
+  #[inline]
+  fn eq(&self, other: &Self) -> bool {
+    **self == **other
+  }
+}
+
+impl<T> PartialEq<[T]> for Vector<T>
+where
+  T: PartialEq,
+{
+  #[inline]
+  fn eq(&self, other: &[T]) -> bool {
+    **self == *other
+  }
+}
+
+impl<T> PartialOrd for Vector<T>
+where
+  T: PartialOrd,
+{
+  #[inline]
+  fn ge(&self, other: &Self) -> bool {
+    (**self).ge(&**other)
+  }
+
+  #[inline]
+  fn gt(&self, other: &Self) -> bool {
+    (**self).gt(&**other)
+  }
+
+  #[inline]
+  fn le(&self, other: &Self) -> bool {
+    (**self).le(&**other)
+  }
+
+  #[inline]
+  fn lt(&self, other: &Self) -> bool {
+    (**self).lt(&**other)
+  }
+
+  #[inline]
+  fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
+    (**self).partial_cmp(&**other)
+  }
+}
+
+impl<T> Ord for Vector<T>
+where
+  T: Ord,
+{
+  #[inline]
+  fn cmp(&self, other: &Self) -> Ordering {
+    (**self).cmp(other)
+  }
+}
+
 impl core::fmt::Write for Vector<u8> {
   #[inline]
   fn write_str(&mut self, s: &str) -> core::fmt::Result {
diff --git a/wtx/src/web_socket/unmask.rs b/wtx/src/web_socket/unmask.rs
index a46b7e79..36ade91d 100644
--- a/wtx/src/web_socket/unmask.rs
+++ b/wtx/src/web_socket/unmask.rs
@@ -1,6 +1,6 @@
 #[doc = _internal_doc!()]
 #[inline]
-pub(crate) fn unmask(bytes: &mut [u8], mut mask: [u8; 4]) {
+pub(crate) fn unmask(bytes: &mut [u8], mask: [u8; 4]) {
   _simd_bytes!(
     (align_to_mut, bytes),
     |bytes| {
@@ -9,14 +9,17 @@ pub(crate) fn unmask(bytes: &mut [u8], mut mask: [u8; 4]) {
         *elem ^= mask[idx & 3];
       }
     },
-    |prefix| mask.rotate_left(prefix.len() % 4),
+    |prefix| {
+      let mut local_mask = mask;
+      local_mask.rotate_left(prefix.len() % 4);
+    },
     |_16| {
       let [a, b, c, d] = mask;
-      do_unmask(&[a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d], _16);
+      _do_unmask(&[a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d], _16);
     },
     |_32| {
       let [a, b, c, d] = mask;
-      do_unmask(
+      _do_unmask(
         &[
           a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b,
           c, d,
@@ -26,7 +29,7 @@ pub(crate) fn unmask(bytes: &mut [u8], mut mask: [u8; 4]) {
     },
     |_64| {
       let [a, b, c, d] = mask;
-      do_unmask(
+      _do_unmask(
         &[
           a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b,
           c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d, a, b, c, d,
@@ -40,7 +43,7 @@ pub(crate) fn unmask(bytes: &mut [u8], mut mask: [u8; 4]) {
 }
 
 #[inline]
-fn do_unmask<const N: usize>(mask: &[u8], slice: &mut [[u8; N]]) {
+fn _do_unmask<const N: usize>(mask: &[u8], slice: &mut [[u8; N]]) {
   for array in slice {
     for (array_elem, mask_elem) in array.iter_mut().zip(mask) {
       *array_elem ^= mask_elem;


Test patch:
diff --git a/wtx-macros/tests/ui/error_enum/bad_after_sending.stderr b/wtx-macros/tests/ui/error_enum/bad_after_sending.stderr
index 07af5414..afab2a2a 100644
--- a/wtx-macros/tests/ui/error_enum/bad_after_sending.stderr
+++ b/wtx-macros/tests/ui/error_enum/bad_after_sending.stderr
@@ -1,4 +1,4 @@
-error: `#[pkg::after_sending]` must be an async function named `after_sending` containing any combination of `api: &mut SomeApi`, `params: &mut SomePackageParams`, `req_bytes: &[u8]`, and `req_params: &mut SomeRequestParams`.
+error: `#[pkg::after_sending]` must be an async function named `after_sending` containing any combination of `api: &mut SomeApi`, `params: &mut SomePackageParams`, `bytes: &[u8]`, and `req_params: &mut SomeRequestParams`.
  --> tests/ui/error_enum/bad_after_sending.rs:3:10
   |
 3 |   #[pkg::after_sending]
diff --git a/wtx-macros/tests/ui/pass/custom_transport.rs b/wtx-macros/tests/ui/pass/custom_transport.rs
index 9f44f95d..f0dfb795 100644
--- a/wtx-macros/tests/ui/pass/custom_transport.rs
+++ b/wtx-macros/tests/ui/pass/custom_transport.rs
@@ -1,19 +1,23 @@
 //! Custom transport through `transport(Custom)`.
 
-use wtx::client_api_framework::pkg::PkgsAux;
-use wtx::client_api_framework::pkg::Package;
-use wtx::client_api_framework::network::TransportGroup;
-use wtx::client_api_framework::network::transport::Transport;
-use wtx::client_api_framework::network::transport::RecievingTransport;
-use wtx::client_api_framework::network::transport::SendingTransport;
-use wtx::client_api_framework::network::transport::TransportParams;
-use wtx::client_api_framework::Api;
 use core::ops::Range;
+use wtx::client_api_framework::{
+  network::{
+    transport::{RecievingTransport, SendingTransport, Transport, TransportParams},
+    TransportGroup,
+  },
+  pkg::{Package, PkgsAux},
+  Api,
+};
+
 struct CustomTransport;
 
-impl RecievingTransport for CustomTransport {
+impl RecievingTransport<CustomTransportParams> for CustomTransport {
   #[inline]
-  async fn recv<A, DRSR>(&mut self, _: &mut PkgsAux<A, DRSR, Self::Params>) -> Result<Range<usize>, A::Error>
+  async fn recv<A, DRSR>(
+    &mut self,
+    _: &mut PkgsAux<A, DRSR, CustomTransportParams>,
+  ) -> Result<Range<usize>, A::Error>
   where
     A: Api,
   {
@@ -21,24 +25,24 @@ impl RecievingTransport for CustomTransport {
   }
 }
 
-impl SendingTransport for CustomTransport {
+impl SendingTransport<CustomTransportParams> for CustomTransport {
   #[inline]
   async fn send<A, DRSR, P>(
     &mut self,
     _: &mut P,
-    _: &mut PkgsAux<A, DRSR, Self::Params>,
+    _: &mut PkgsAux<A, DRSR, CustomTransportParams>,
   ) -> Result<(), A::Error>
   where
     A: Api,
-    P: Package<A, DRSR, Self::Params>,
+    P: Package<A, DRSR, Self, CustomTransportParams>,
   {
     Ok(())
   }
 }
 
-impl Transport for CustomTransport {
+impl Transport<CustomTransportParams> for CustomTransport {
   const GROUP: TransportGroup = TransportGroup::Custom("Custom");
-  type Params = CustomTransportParams;
+  type Inner = Self;
 }
 
 struct CustomTransportParams(());
@@ -59,16 +63,16 @@ impl TransportParams for CustomTransportParams {
     &self.0
   }
 
-    fn ext_res_params_mut(&mut self) -> &mut Self::ExternalResponseParams {
+  fn ext_res_params_mut(&mut self) -> &mut Self::ExternalResponseParams {
     &mut self.0
   }
 
-    fn reset(&mut self) {}
+  fn reset(&mut self) {}
 }
 
 type Nothing = ();
 
-#[wtx_macros::pkg(data_format(json), id(super::Nothing), transport(custom(crate::CustomTransport)))]
+#[wtx_macros::pkg(data_format(json), id(super::Nothing), transport(custom(crate::CustomTransportParams)))]
 mod pkg {
   #[pkg::req_data]
   struct Req;
@@ -77,5 +81,4 @@ mod pkg {
   struct Res;
 }
 
-fn main() {
-}
+fn main() {}
\ No newline at end of file
diff --git a/wtx-macros/tests/ui/pass/mutable_references.rs b/wtx-macros/tests/ui/pass/mutable_references.rs
new file mode 100644
index 00000000..8f6ea113
--- /dev/null
+++ b/wtx-macros/tests/ui/pass/mutable_references.rs
@@ -0,0 +1,34 @@
+//! Uses mutable references to send packages
+
+wtx::create_packages_aux_wrapper!();
+
+use wtx::client_api_framework::network::transport::SendingTransport;
+
+type Api = ();
+
+#[wtx_macros::pkg(data_format(json), id(super::Api), transport(stub))]
+mod pkg {
+  use wtx::client_api_framework::network::transport::TransportParams;
+
+  #[pkg::aux]
+  impl<A, DRSR, TP> super::PkgsAux<A, DRSR, TP>
+  where
+    TP: TransportParams
+  {}
+
+  #[derive(Debug)]
+  #[pkg::req_data]
+  pub(crate) struct FooReq;
+
+  #[pkg::res_data]
+  pub(crate) type FooRes = ();
+}
+
+fn main() {
+  let mut api = ();
+  let mut drsr = ();
+  let mut tp = ();
+  let mut trans = ();
+  let mut pkgs_aux = PkgsAux::from_minimum(&mut api, &mut drsr, &mut tp);
+  let _ = trans.send(&mut pkgs_aux.foo().build(), &mut pkgs_aux);
+}
diff --git a/wtx/src/data_transformation/dnsn/tests.rs b/wtx/src/data_transformation/dnsn/tests.rs
index 756d91bf..37000ab9 100644
--- a/wtx/src/data_transformation/dnsn/tests.rs
+++ b/wtx/src/data_transformation/dnsn/tests.rs
@@ -16,7 +16,7 @@ impl<EREQC, ERESC> FooBar<EREQC, ERESC> {
   }
 }
 
-impl<DRSR, EREQC, ERESC> Package<(), DRSR, ()> for FooBar<EREQC, ERESC>
+impl<DRSR, EREQC, ERESC, T> Package<(), DRSR, T, ()> for FooBar<EREQC, ERESC>
 where
   EREQC: Serialize<DRSR>,
   ERESC: for<'de> Deserialize<'de, DRSR>,
@@ -67,7 +67,7 @@ macro_rules! _create_dnsn_test {
     mod $name {
       use crate::{
         client_api_framework::{
-          network::transport::{Mock, SendingRecievingTransport},
+          network::transport::{Mock, SendingReceivingTransport},
           pkg::PkgsAux,
         },
         data_transformation::{