diff --git a/morphisms/include/morphisms/posint.h b/morphisms/include/morphisms/posint.h
index 8c458da..613333e 100644
--- a/morphisms/include/morphisms/posint.h
+++ b/morphisms/include/morphisms/posint.h
@@ -27,7 +27,13 @@ int morph_posint_endianness(
     struct LengthPrefixUInt64Array const * restrict src,
     struct LengthPrefixUInt64Array * restrict dst
 );
-int morph_posint_radix(
+int morph_posint_radix_le(
+    uint64_t const src_radix,
+    uint64_t const dst_radix,
+    struct LengthPrefixUInt64Array const * restrict src,
+    struct LengthPrefixUInt64Array * restrict dst
+);
+int morph_posint_radix_be(
     uint64_t const src_radix,
     uint64_t const dst_radix,
     struct LengthPrefixUInt64Array const * restrict src,
diff --git a/morphisms/morphism-base/posint.morphism-base b/morphisms/morphism-base/posint.morphism-base
index aeb5e37..7f25f32 100644
--- a/morphisms/morphism-base/posint.morphism-base
+++ b/morphisms/morphism-base/posint.morphism-base
@@ -1,14 +1,24 @@
 morph_digit_as_char_to_uint8 (Radix:ℤ_16)
-    <Digit Radix> ~ Char ~ Ascii ~ Byte
---> <Digit Radix> ~ x86.UInt8 ~ Byte
+      <Digit Radix> ~ Char ~ Ascii ~ x86.UInt8
+-->   <Digit Radix> ~ x86.UInt8
 @lib/libmorph-posint.so:src/posint.c
 
 morph_digit_as_uint8_to_char (Radix:ℤ_16)
-      <Digit Radix> ~ x86.UInt8 ~ Byte
--->   <Digit Radix> ~ Char ~ Ascii ~ Byte
+      <Digit Radix> ~ x86.UInt8
+-->   <Digit Radix> ~ Char ~ Ascii ~ x86.UInt8
 @lib/libmorph-posint.so:src/posint.c
 
-morph_posint_radix (SrcRadix:ℤ, DstRadix:ℤ)
+morph_digit_as_char_to_uint64 (Radix:ℤ_16)
+      <Digit Radix> ~ Char ~ Ascii ~ x86.UInt8
+-->   <Digit Radix> ~ x86.UInt64
+@lib/libmorph-posint.so:src/posint.c
+
+morph_digit_as_uint64_to_char (Radix:ℤ_16)
+      <Digit Radix> ~ x86.UInt64
+-->   <Digit Radix> ~ Char ~ Ascii ~ x86.UInt8
+@lib/libmorph-posint.so:src/posint.c
+
+morph_posint_radix_le (SrcRadix:ℤ, DstRadix:ℤ)
       ℕ
     ~ <PosInt SrcRadix LittleEndian>
     ~ <Seq~<LengthPrefix x86.UInt64> <Digit SrcRadix>~x86.UInt64>
@@ -17,6 +27,15 @@ morph_posint_radix (SrcRadix:ℤ, DstRadix:ℤ)
     ~ <Seq~<LengthPrefix x86.UInt64> <Digit DstRadix>~x86.UInt64>
 @lib/libmorph-posint.so:src/posint.c
 
+morph_posint_radix_be (SrcRadix:ℤ, DstRadix:ℤ)
+      ℕ
+    ~ <PosInt SrcRadix BigEndian>
+    ~ <Seq~<LengthPrefix x86.UInt64> <Digit SrcRadix>~x86.UInt64>
+-->   ℕ
+    ~ <PosInt DstRadix BigEndian>
+    ~ <Seq~<LengthPrefix x86.UInt64> <Digit DstRadix>~x86.UInt64>
+@lib/libmorph-posint.so:src/posint.c
+
 morph_posint_endianness (Radix:ℤ)
       ℕ
     ~ <PosInt Radix LittleEndian>
diff --git a/morphisms/src/posint.c b/morphisms/src/posint.c
index 83cf6be..dcc219e 100644
--- a/morphisms/src/posint.c
+++ b/morphisms/src/posint.c
@@ -62,7 +62,7 @@ int morph_posint_endianness(
 
 /* morph radix in little endian
  */
-int morph_posint_radix(
+int morph_posint_radix_le(
     uint64_t const src_radix,
     uint64_t const dst_radix,
 
@@ -85,3 +85,35 @@ int morph_posint_radix(
 
     return 0;
 }
+
+/* morph radix in little endian
+ */
+int morph_posint_radix_be(
+    uint64_t const src_radix,
+    uint64_t const dst_radix,
+
+    struct LengthPrefixUInt64Array const * restrict src,
+    struct LengthPrefixUInt64Array * restrict dst
+) {
+    uint64_t value = 0;
+
+    for( uint64_t i = 0; i < src->len; ++i ) {
+        value *= src_radix;
+        value += src->items[i];
+    }
+
+    uint64_t v = value;
+    dst->len = 0;
+    while( v ) {
+        dst->len++;
+        v /= dst_radix;
+    }
+
+    uint64_t i = dst->len;
+    while( value > 0 ) {
+        dst->items[--i] = ( dst, value % dst_radix );
+        value /= dst_radix;
+    }
+
+    return 0;
+}