diff --git a/Blarg.GameFramework/Blarg.GameFramework.csproj b/Blarg.GameFramework/Blarg.GameFramework.csproj
index 1d3b2e3..5b50fc1 100644
--- a/Blarg.GameFramework/Blarg.GameFramework.csproj
+++ b/Blarg.GameFramework/Blarg.GameFramework.csproj
@@ -136,6 +136,7 @@
+
diff --git a/Blarg.GameFramework/Support/BitExtensions.cs b/Blarg.GameFramework/Support/BitExtensions.cs
new file mode 100644
index 0000000..73d20bf
--- /dev/null
+++ b/Blarg.GameFramework/Support/BitExtensions.cs
@@ -0,0 +1,190 @@
+using System;
+
+namespace Blarg.GameFramework.Support
+{
+ // this class exists because i am stupid and can never remember the
+ // operators used for setting/clearing/toggling bits
+ //
+ // ... and of course, you can't use generics with bitwise operations :(
+
+ public static class BitExtensions
+ {
+ #region Is Set
+
+ public static bool IsBitSet(this long bitfield, long bit)
+ {
+ return (bitfield & bit) != 0;
+ }
+
+ public static bool IsBitSet(this ulong bitfield, ulong bit)
+ {
+ return (bitfield & bit) != 0;
+ }
+
+ public static bool IsBitSet(this int bitfield, int bit)
+ {
+ return (bitfield & bit) != 0;
+ }
+
+ public static bool IsBitSet(this uint bitfield, uint bit)
+ {
+ return (bitfield & bit) != 0;
+ }
+
+ public static bool IsBitSet(this short bitfield, short bit)
+ {
+ return (bitfield & bit) != 0;
+ }
+
+ public static bool IsBitSet(this ushort bitfield, ushort bit)
+ {
+ return (bitfield & bit) != 0;
+ }
+
+ public static bool IsBitSet(this byte bitfield, byte bit)
+ {
+ return (bitfield & bit) != 0;
+ }
+
+ #endregion
+
+ #region Set
+
+ public static long SetBit(this long bitfield, long bit)
+ {
+ bitfield |= bit;
+ return bitfield;
+ }
+
+ public static ulong SetBit(this ulong bitfield, ulong bit)
+ {
+ bitfield |= bit;
+ return bitfield;
+ }
+
+ public static int SetBit(this int bitfield, int bit)
+ {
+ bitfield |= bit;
+ return bitfield;
+ }
+
+ public static uint SetBit(this uint bitfield, uint bit)
+ {
+ bitfield |= bit;
+ return bitfield;
+ }
+
+ public static short SetBit(this short bitfield, short bit)
+ {
+ bitfield |= bit;
+ return bitfield;
+ }
+
+ public static ushort SetBit(this ushort bitfield, ushort bit)
+ {
+ bitfield |= bit;
+ return bitfield;
+ }
+
+ public static byte SetBit(this byte bitfield, byte bit)
+ {
+ bitfield |= bit;
+ return bitfield;
+ }
+
+ #endregion
+
+ #region Toggle
+
+ public static long ToggleBit(this long bitfield, long bit)
+ {
+ bitfield ^= bit;
+ return bitfield;
+ }
+
+ public static ulong ToggleBit(this ulong bitfield, ulong bit)
+ {
+ bitfield ^= bit;
+ return bitfield;
+ }
+
+ public static int ToggleBit(this int bitfield, int bit)
+ {
+ bitfield ^= bit;
+ return bitfield;
+ }
+
+ public static uint ToggleBit(this uint bitfield, uint bit)
+ {
+ bitfield ^= bit;
+ return bitfield;
+ }
+
+ public static short ToggleBit(this short bitfield, short bit)
+ {
+ bitfield ^= bit;
+ return bitfield;
+ }
+
+ public static ushort ToggleBit(this ushort bitfield, ushort bit)
+ {
+ bitfield ^= bit;
+ return bitfield;
+ }
+
+ public static byte ToggleBit(this byte bitfield, byte bit)
+ {
+ bitfield ^= bit;
+ return bitfield;
+ }
+
+ #endregion
+
+ #region Clear
+
+ public static long ClearBit(this long bitfield, long bit)
+ {
+ bitfield &= ~bit;
+ return bitfield;
+ }
+
+ public static ulong ClearBit(this ulong bitfield, ulong bit)
+ {
+ bitfield &= ~bit;
+ return bitfield;
+ }
+
+ public static int ClearBit(this int bitfield, int bit)
+ {
+ bitfield &= ~bit;
+ return bitfield;
+ }
+
+ public static uint ClearBit(this uint bitfield, uint bit)
+ {
+ bitfield &= ~bit;
+ return bitfield;
+ }
+
+ public static short ClearBit(this short bitfield, short bit)
+ {
+ bitfield &= (short)~bit;
+ return bitfield;
+ }
+
+ public static ushort ClearBit(this ushort bitfield, ushort bit)
+ {
+ bitfield &= (ushort)~bit;
+ return bitfield;
+ }
+
+ public static byte ClearBit(this byte bitfield, byte bit)
+ {
+ bitfield &= (byte)~bit;
+ return bitfield;
+ }
+
+ #endregion
+ }
+}
+