diff --git a/src/anybase.rs b/src/anybase.rs
index 61957ad..48293dd 100644
--- a/src/anybase.rs
+++ b/src/anybase.rs
@@ -1,52 +1,20 @@
 use crate::core;
 
-pub fn alphabet() -> Vec<String> {
-    return vec![
-        "meow", "mrrp", "mreow", "mrow", "nya~", "nyaaaa~", "mraow", "mew", "prrp", "mewo",
-        "purrrr", "nya",
-    ]
-    .into_iter()
-    .map(|a| a.to_string())
-    .collect();
-}
-
-pub fn max_base() -> u32 {
-    return alphabet().len() as u32;
-}
-
-/// Returns the minimum catspeak words per character needed for this base
-/// 
-/// ```
-/// use cat2text::anybase::char_length;
-/// 
-/// let base = 10;
-/// assert_eq!(char_length(base), 2)
-/// ```
-pub fn char_length(base: u32) -> u32 {
-    for i in 1..base + 1 {
-        let num = base.pow(i);
-        if num > 26 {
-            return i;
-        }
-    }
-    return u32::MAX;
-}
-
 /// Encodes text into catspeak using any base up to [`max_base()`]
 ///
 /// `char_length` is set manually, but the minimum can be generated using [`char_length()`]
 ///
 /// ```
-/// use cat2text::anybase;
+/// use cat2text::{anybase::encode, core::char_length};
 ///
 /// let text = "i love cats".to_string();
 /// let base = 10;
-/// let char_length = anybase::char_length(base);
+/// let char_length = char_length(base);
 ///
-/// assert_eq!("meow mewo; mrrp mreow mrrp nyaaaa~ mreow mreow meow nyaaaa~; meow mrow meow mrrp mreow meow mrrp mewo", anybase::encode(text, base, char_length));
+/// assert_eq!("meow mewo; mrrp mreow mrrp nyaaaa~ mreow mreow meow nyaaaa~; meow mrow meow mrrp mreow meow mrrp mewo", encode(text, base, char_length));
 /// ```
 pub fn encode(text: String, base: u32, char_length: u32) -> String {
-    let mut shortened_alphabet = alphabet();
+    let mut shortened_alphabet = core::alphabet();
     shortened_alphabet.truncate(base as usize);
 
     // makes it lowercase and split by spaces
@@ -83,18 +51,18 @@ pub fn encode(text: String, base: u32, char_length: u32) -> String {
 /// `char_length` is set manually, but the minimum can be generated using [`char_length()`]
 ///
 /// ```
-/// use cat2text::anybase;
+/// use cat2text::{anybase::decode, core::char_length};
 ///
 /// let text = "meow mewo; mrrp mreow mrrp nyaaaa~ mreow mreow meow nyaaaa~; meow mrow meow mrrp mreow meow mrrp mewo".to_string();
 /// let base = 10;
-/// let char_length = anybase::char_length(base);
+/// let char_length = char_length(base);
 
-/// assert_eq!("i love cats", anybase::decode(text, base, char_length));
+/// assert_eq!("i love cats", decode(text, base, char_length));
 /// ```
 pub fn decode(text: String, base: u32, char_length: u32) -> String {
     let catspeak_words: Vec<String> = text.split("; ").map(|item| item.to_string()).collect();
     let mut output: String = String::new();
-    let mut shortened_alphabet = alphabet();
+    let mut shortened_alphabet = core::alphabet();
     shortened_alphabet.truncate(base as usize);
     for engl_word in catspeak_words {
         let mut word = String::new();
@@ -118,12 +86,11 @@ pub fn decode(text: String, base: u32, char_length: u32) -> String {
 }
 
 pub mod bytes {
-    use super::alphabet;
     use crate::core;
     /// Encodes from bytes into catspeak
     ///
     /// ```
-    /// use cat2text::anybase::{bytes::encode, char_length};
+    /// use cat2text::{anybase::bytes::encode, core::char_length};
     ///
     /// let bytes = &[9, 1];
     /// let base = 10;
@@ -133,7 +100,7 @@ pub mod bytes {
     /// ```
     pub fn encode(bytes: impl AsRef<[u8]>, base: u32, char_length: u32) -> String {
         let mut output = String::new();
-        let mut shortened_alphabet = alphabet();
+        let mut shortened_alphabet = core::alphabet();
         shortened_alphabet.truncate(base as usize);
         for byte in bytes.as_ref() {
             output += core::num_to_cat(*byte as u32, shortened_alphabet.clone(), char_length).as_str();
@@ -145,7 +112,7 @@ pub mod bytes {
     /// Decodes catspeak into bytes
     ///
     /// ```
-    /// use cat2text::anybase::{bytes::decode, char_length};
+    /// use cat2text::{anybase::bytes::decode, core::char_length};
     ///
     /// let text = "mreow mrrp meow mrrp".to_string();
     /// let base = 10;
@@ -158,7 +125,7 @@ pub mod bytes {
     /// ```
     pub fn decode(text: String, base: u32, char_length: u32) -> Vec<u8> {
         let mut output: Vec<u8> = Vec::new();
-        let mut shortened_alphabet = alphabet();
+        let mut shortened_alphabet = core::alphabet();
         shortened_alphabet.truncate(base as usize);
         for byte in core::split_every_x(text.clone(), char_length) {
             output.push(core::cat_to_num(
@@ -170,3 +137,4 @@ pub mod bytes {
         return output.into();
     }
 }
+// ...
\ No newline at end of file
diff --git a/src/base4.rs b/src/base4.rs
index 9d0c51b..95725e3 100644
--- a/src/base4.rs
+++ b/src/base4.rs
@@ -1,7 +1,8 @@
+use crate::core;
 use crate::anybase;
 
 pub fn alphabet() -> Vec<String> {
-    let mut tmp = anybase::alphabet();
+    let mut tmp = core::alphabet();
     tmp.truncate(4);
     return tmp;
 }
@@ -58,5 +59,4 @@ pub mod bytes {
     pub fn decode(text: String) -> Vec<u8> {
         anybase::bytes::decode(text, 4, char_length())
     }
-}
-// ..............d......4..............a.q..a....y..d..w...a............
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/src/core.rs b/src/core.rs
index 951c687..dd9a932 100644
--- a/src/core.rs
+++ b/src/core.rs
@@ -58,14 +58,16 @@ pub fn cat_to_num(text: Vec<String>, alphabet: Vec<String>, char_length: u32) ->
     return num;
 }
 
-/// Splits a cat word into every x segments
+/// Splits a word encoded in catspeak every *x* segments
+/// 
+/// Used for decoding by splitting words apart into letters which can then be decoded individually
 ///
-/// ```
+/// ```ignore
 /// use cat2text::core::split_every_x;
 ///
-/// assert_eq!(vec!["meow meow mrrp".to_string(), "meow mreow mrrp".to_string(), "mreow meow mrrp".to_string()], split_every_x("meow meow mrrp meow mreow mrrp mreow meow mrrp".to_string(), 3));
+/// assert_eq!(vec!["meow meow mrrp".to_string(), "meow mreow mrrp".to_string()], split_every_x("meow meow mrrp meow mreow mrrp".to_string(), 3));
 /// ```
-pub fn split_every_x(text: String, x: u32) -> Vec<String> {
+pub(crate) fn split_every_x(text: String, x: u32) -> Vec<String> {
     let x = x as usize;
     let delim = " ";
     let tmp: Vec<String> = text.split(delim).map(|item| item.to_string()).collect();
@@ -82,3 +84,51 @@ pub fn split_every_x(text: String, x: u32) -> Vec<String> {
     output = output.into_iter().map(|item| item.trim().to_string()).collect();
     return output;
 }
+
+/// Returns all cat sounds in the catspeak alphabet
+/// 
+/// ```
+/// use cat2text::core::alphabet;
+/// 
+/// println!("{:?}", alphabet());
+/// ```
+pub fn alphabet() -> Vec<String> {
+    return vec![
+        "meow", "mrrp", "mreow", "mrow", "nya~", "nyaaaa~", "mraow", "mew", "prrp", "mewo",
+        "purrrr", "nya", "miao", "miau", "miauw", "mrow~"
+    ]
+    .into_iter()
+    .map(|a| a.to_string())
+    .collect();
+}
+
+/// Returns the max base that can be used
+/// 
+/// For example, if the available alphabet was `["meow", "mrrp", "mreow", "mrow"]`, the max base would be 4
+/// 
+/// ```
+/// use cat2text::core::max_base;
+/// 
+/// println!("{}", max_base());
+/// ```
+pub fn max_base() -> u32 {
+    return alphabet().len() as u32;
+}
+
+/// Returns the minimum catspeak words per character needed for this base
+/// 
+/// ```
+/// use cat2text::core::char_length;
+/// 
+/// let base = 10;
+/// assert_eq!(char_length(base), 2)
+/// ```
+pub fn char_length(base: u32) -> u32 {
+    for i in 1..base + 1 {
+        let num = base.pow(i);
+        if num > 26 {
+            return i;
+        }
+    }
+    return u32::MAX;
+}
\ No newline at end of file
diff --git a/src/tests.rs b/src/tests.rs
index cced1fa..3aa5144 100644
--- a/src/tests.rs
+++ b/src/tests.rs
@@ -1,11 +1,11 @@
 #[test]
 fn test_anybase_base4() {
-    use crate::{anybase, base4};
+    use crate::{anybase, base4, core};
     let text = "i love cats".to_string();
 
-    let encoded = anybase::encode(text.clone(), 4, anybase::char_length(4));
+    let encoded = anybase::encode(text.clone(), 4, core::char_length(4));
     assert_eq!(base4::encode(text), encoded);
 
-    let decoded = anybase::decode(encoded.clone(), 4, anybase::char_length(4));
+    let decoded = anybase::decode(encoded.clone(), 4, core::char_length(4));
     assert_eq!(base4::decode(encoded), decoded);
 }