diff --git a/ip.cabal b/ip.cabal
--- a/ip.cabal
+++ b/ip.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.2
 name: ip
-version: 1.7.2
+version: 1.7.3
 synopsis: Library for IP and MAC addresses
 homepage: https://github.com/andrewthad/haskell-ip#readme
 license: BSD-3-Clause
diff --git a/src/Net/Mac.hs b/src/Net/Mac.hs
--- a/src/Net/Mac.hs
+++ b/src/Net/Mac.hs
@@ -29,6 +29,8 @@
   , builder
   , parser
   , parserWith
+    -- ** ShortText
+  , encodeShort
     -- ** UTF-8 ByteString
   , encodeUtf8
   , encodeWithUtf8
@@ -39,6 +41,7 @@
   , parserWithUtf8
     -- ** ByteString
   , decodeBytes
+  , decodeOctets
     -- ** UTF-8 Bytes
   , boundedBuilderUtf8
   , decodeUtf8Bytes
@@ -59,15 +62,18 @@
 import Data.Aeson (ToJSONKeyFunction(..),FromJSONKeyFunction(..))
 import Data.Bits ((.|.),unsafeShiftL,unsafeShiftR,(.&.))
 import Data.ByteString (ByteString)
+import Data.ByteString.Short.Internal (ShortByteString(SBS))
 import Data.Char (ord,chr)
 import Data.Data (Data)
 import Data.Hashable (Hashable)
 import Data.Ix (Ix)
+import Data.Primitive.ByteArray (ByteArray(ByteArray))
 import Data.Primitive.Types (Prim(..))
 #if !MIN_VERSION_base(4,11,0)
 import Data.Semigroup ((<>))
 #endif
 import Data.Text (Text)
+import Data.Text.Short (ShortText)
 import Data.Word
 import Data.Word.Synthetic.Word12 (Word12)
 import GHC.Enum (predError, succError)
@@ -77,6 +83,7 @@
 import Text.ParserCombinators.ReadPrec (prec,step)
 import Text.Read (Read(..),Lexeme(Ident),lexP,parens)
 
+import qualified Arithmetic.Nat as Nat
 import qualified Data.Aeson as Aeson
 import qualified Data.Aeson.Types as Aeson
 import qualified Data.Attoparsec.ByteString as AB
@@ -93,6 +100,7 @@
 import qualified Data.Text.Builder.Fixed as TFB
 import qualified Data.Text.IO as TIO
 import qualified Data.Text.Lazy.Builder as TBuilder
+import qualified Data.Text.Short.Unsafe as TS
 import qualified Data.Text as Text ()
 
 -- $setup
@@ -414,6 +422,12 @@
 
 decodeLenientUtf8 :: ByteString -> Maybe Mac
 decodeLenientUtf8 bs = rightToMaybe (AB.parseOnly (parserLenientUtf8 <* AB.endOfInput) bs)
+
+-- | Encode a 'Mac' address as colon-separated hexadecimal octets,
+--   preferring lowercase for alphabetical characters.
+encodeShort :: Mac -> ShortText
+encodeShort !m = case BBB.run Nat.constant (boundedBuilderUtf8 m) of
+  ByteArray x -> TS.fromShortByteStringUnsafe (SBS x)
 
 -- | Encode a 'Mac' address as colon-separated hexadecimal octets,
 --   preferring lowercase for alphabetical characters.
