diff --git a/src/IRCChannel.py b/src/IRCChannel.py
index 515ad63d..c7789478 100644
--- a/src/IRCChannel.py
+++ b/src/IRCChannel.py
@@ -3,6 +3,7 @@ from src import EventManager, IRCBot, IRCBuffer, IRCObject, IRCServer, IRCUser
 from src import utils
 
 RE_MODES = re.compile(r"[-+]\w+")
+SETTING_CACHE_EXPIRATION = 60.0*5.0 # 5 minutes
 
 class Channel(IRCObject.Object):
     name = ""
@@ -23,6 +24,8 @@ class Channel(IRCObject.Object):
         self.created_timestamp = None
         self.buffer = IRCBuffer.Buffer(bot, server)
 
+        self._setting_cache_prefix = "channelsetting%s-" % self.id
+
     def __repr__(self) -> str:
         return "IRCChannel.Channel(%s|%s)" % (self.server.name, self.name)
     def __str__(self) -> str:
@@ -135,12 +138,27 @@ class Channel(IRCObject.Object):
                 new_modes.append((mode_str, new_arg))
         return new_modes
 
+    def _setting_cache_key(self, key: str) -> str:
+        return self._setting_cache_prefix+key
+
+    def _cache_setting(self, key: str, value: typing.Any) -> str:
+        return self.bot.cache.temporary_cache(key, value,
+            SETTING_CACHE_EXPIRATION)
+
     def set_setting(self, setting: str, value: typing.Any):
         self.bot.database.channel_settings.set(self.id, setting, value)
+        self._cache_setting(self._setting_cache_key(setting), value)
     def get_setting(self, setting: str, default: typing.Any=None
             ) -> typing.Any:
-        return self.bot.database.channel_settings.get(self.id, setting,
+        cache_key = self._setting_cache_key(setting)
+        if self.bot.cache.has_item(cache_key):
+            return self.bot.cache.get(cache_key)
+
+        value = self.bot.database.channel_settings.get(self.id, setting,
             default)
+        self._cache_setting(cache_key, value)
+        return value
+
     def find_settings(self, pattern: str, default: typing.Any=[]
             ) -> typing.List[typing.Any]:
         return self.bot.database.channel_settings.find(self.id, pattern,
@@ -152,6 +170,10 @@ class Channel(IRCObject.Object):
     def del_setting(self, setting: str):
         self.bot.database.channel_settings.delete(self.id, setting)
 
+        cache_key = self._setting_cache_key(setting)
+        if self.bot.cache.has_item(cache_key):
+            self.bot.cache.remove(cache_key)
+
     def set_user_setting(self, user_id: int, setting: str, value: typing.Any):
         self.bot.database.user_channel_settings.set(user_id, self.id,
             setting, value)