diff --git a/haugebot_twitch/config.py b/haugebot_twitch/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..8e25af08b4c07d08c427fcc32db3efe8f74c1855
--- /dev/null
+++ b/haugebot_twitch/config.py
@@ -0,0 +1,24 @@
+import sqlite3
+
+
+def get_value(key):
+    conn = sqlite3.connect("db.sqlite3")
+
+    c = conn.cursor()
+    c.execute('SELECT value from haugebot_web_setting where key = ?', (key,))
+    value = c.fetchone()[0]
+    conn.close()
+
+    return value
+
+
+def get_int(key):
+    return int(get_value(key))
+
+
+def get_float(key):
+    return float(get_value(key))
+
+
+def get_bool(key):
+    return get_value(key) == "1"
diff --git a/haugebot_twitch/haugebot.py b/haugebot_twitch/haugebot.py
index 0feb0e3dc1f10154e393f283001d8ffd54cd05ce..8998cc99c3a3d0decb1cd3f74265f03d98990132 100644
--- a/haugebot_twitch/haugebot.py
+++ b/haugebot_twitch/haugebot.py
@@ -1,21 +1,18 @@
 import asyncio
+import logging
 import os
 import sqlite3
 from abc import ABC
 
 from dotenv import load_dotenv
 from giveaway_cog import GiveawayCog
-# from giveaway_cog import GiveawayGog
 from info_cog import InfoCog
 from pipi_cog import PipiCog
 from twitchio.dataclasses import Context, Message, Channel
 from twitchio.ext import commands
 from vote_cog import VoteCog
 
-# from pipi_cog import PipiCog
-# from vote_cog import VoteCog
-
-# logging.basicConfig(level=logging.INFO, filename='hausgeist.log')
+logging.basicConfig(level=logging.INFO, filename='hausgeist.log')
 
 load_dotenv()
 IRC_TOKEN = os.getenv("IRC_TOKEN")
diff --git a/haugebot_twitch/info_cog.py b/haugebot_twitch/info_cog.py
index 2e6dc98e23ca67feb809e6014524ed4cd02fe69e..c3d9233e938efeefc6920b3bdb11f4f7ff1f0333 100644
--- a/haugebot_twitch/info_cog.py
+++ b/haugebot_twitch/info_cog.py
@@ -2,6 +2,7 @@ import asyncio
 import random
 import sqlite3
 
+import config
 from twitchio.ext import commands
 
 
@@ -12,13 +13,13 @@ class InfoCog:
 
     async def info_loop(self):
         while True:
-            sleep_duration = int(self.bot.get_setting("WusstestDuSchonLoop"))
+            sleep_duration = config.get_int("WusstestDuSchonLoop")
             await asyncio.sleep(sleep_duration * 60)
 
             if await self.bot.stream():
                 channel = self.bot.channel()
-                color = self.bot.get_setting("WusstestDuSchonColor")
-                prefix = self.bot.get_setting("WusstestDuSchonPrefix")
+                color = config.get_value("WusstestDuSchonColor")
+                prefix = config.get_value("WusstestDuSchonPrefix")
                 message = self.get_random_message(prefix)
                 await self.bot.send_me(channel, message, color)
 
diff --git a/haugebot_twitch/pipi_cog.py b/haugebot_twitch/pipi_cog.py
index a79bd779a3c580fc19abe415e9401e2d02de5354..61546ff6472c464bbc8b1d0079855c5895cbb1bb 100644
--- a/haugebot_twitch/pipi_cog.py
+++ b/haugebot_twitch/pipi_cog.py
@@ -1,8 +1,9 @@
 import asyncio
 import logging
-import os
+import sqlite3
 from datetime import datetime
 
+import config
 from twitchio.dataclasses import Message
 from twitchio.ext import commands
 
@@ -11,20 +12,10 @@ from twitchio.ext import commands
 class PipiCog:
     def __init__(self, bot):
         self.bot = bot
-        self.DELAY = int(os.getenv("PIPI_DELAY"))
-        self.THRESHOLD_1 = int(os.getenv("PIPI_THRESHOLD_1"))
-        self.THRESHOLD_2 = int(os.getenv("PIPI_THRESHOLD_2"))
-        self.PIPIMETER_LOOP = int(os.getenv("PIPIMETER_LOOP"))
-        self.RESET_THRESHOLD = int(os.getenv("PIPI_RESET_THRESHOLD"))
-        self.COLOR_0 = os.getenv("PIPI_COLOR_0")
-        self.COLOR_1 = os.getenv("PIPI_COLOR_1")
-        self.COLOR_2 = os.getenv("PIPI_COLOR_2")
-        self.COLOR_3 = os.getenv("PIPI_COLOR_3")
         self.pipi_task = None
-        self.pipi_votes = {}
 
     async def notify_pipi(self, ctx, use_timer=True, message=None):
-        """ Write a message in chat, if there hasn't been a notification since DELAY seconds. """
+        """ Write a message in chat, if there hasn't been a notification since <PipiDelay> seconds. """
 
         if use_timer and self.pipi_task and not self.pipi_task.done():
             return
@@ -33,37 +24,36 @@ class PipiCog:
             self.pipi_task.cancel()
 
         self.pipi_task = asyncio.create_task(self.pipi_block_notification())
-        vote_ctr = 0
         chatters = await self.bot.chatters()
 
         if message is not None:
-            await self.bot.send_me(ctx, message, self.COLOR_0)
+            await self.bot.send_me(ctx, message, config.get_value("PipiColor0"))
         else:
-            for vote in self.pipi_votes.values():
-                if vote == 1:
-                    vote_ctr += 1
+            vote_ctr = self.get_pipimeter()
 
             percentage = self.bot.get_percentage(vote_ctr, chatters.count)
 
             if vote_ctr == 0:
                 await self.bot.send_me(ctx,
                                        f'Kein Druck (mehr) auf der Blase. Es kann fröhlich weiter gestreamt werden!',
-                                       self.COLOR_0)
+                                       config.get_value("PipiColor0"))
             elif vote_ctr == 1:
-                await self.bot.send_me(ctx, f'{vote_ctr} ({percentage}%) Mensch müsste mal', self.COLOR_1)
-            elif percentage < self.THRESHOLD_1:
-                await self.bot.send_me(ctx, f'{vote_ctr} ({percentage}%) Menschen müssten mal', self.COLOR_1)
-            elif percentage < self.THRESHOLD_2:
+                await self.bot.send_me(ctx, f'{vote_ctr} ({percentage}%) Mensch müsste mal',
+                                       config.get_value("PipiColor1"))
+            elif percentage < config.get_int("PipiThreshold1"):
+                await self.bot.send_me(ctx, f'{vote_ctr} ({percentage}%) Menschen müssten mal',
+                                       config.get_value("PipiColor1"))
+            elif percentage < config.get_int("PipiThreshold2"):
                 await self.bot.send_me(ctx, f'{vote_ctr} ({percentage}%) Menschen müssten mal haugeAgree',
-                                       self.COLOR_2)
+                                       config.get_value("PipiColor2"))
             else:
                 await self.bot.send_me(ctx, f'{vote_ctr} ({percentage}%) Menschen müssten mal haugeAgree haugeAgree',
-                                       self.COLOR_3)
+                                       config.get_value("PipiColor3"))
 
     async def pipi_block_notification(self):
-        """ Just do nothing but sleep for DELAY seconds """
+        """ Just do nothing but sleep for <PipiDelay> seconds """
 
-        await asyncio.sleep(self.DELAY)
+        await asyncio.sleep(config.get_int("PipiDelay"))
 
     async def pipimeter_loop(self):
         """ Send !pipimeter into the chat every x Minutes. Also check, whether the stream was offline for x Minutes.
@@ -75,24 +65,25 @@ class PipiCog:
         await asyncio.sleep(60)
 
         while True:
+            pipimeter_loop = config.get_int("PipimeterLoop")
             logging.log(logging.INFO,
-                        f"Inside Pipi loop. Sleep for {self.PIPIMETER_LOOP} minutes. {datetime.now()} {self}")
-            await asyncio.sleep(self.PIPIMETER_LOOP * 60)
+                        f"Inside Pipi loop. Sleep for {pipimeter_loop} minutes. {datetime.now()} {self}")
+            await asyncio.sleep(pipimeter_loop * 60)
             logging.log(logging.INFO, f"Inside Pipi loop finished sleeping now. {datetime.now()} {self}")
 
             if await self.bot.stream():
                 logging.log(logging.INFO,
                             f"Inside Pipi loop. Stream is online, so check for threshold!!! {datetime.now()} {self}")
-                if offline_since >= self.RESET_THRESHOLD:
-                    self.pipi_votes = {}
+                if offline_since >= config.get_int("PipimeterResetThreshold"):
+                    self.truncate_pipimeter()
                 offline_since = 0
 
-                if len(self.pipi_votes) > 0:
+                if self.get_pipimeter() > 0:
                     channel = self.bot.channel()
                     message = Message(channel=channel)
                     await self.notify_pipi(message, use_timer=False)
             else:
-                offline_since += self.PIPIMETER_LOOP
+                offline_since += pipimeter_loop
 
             logging.log(logging.INFO,
                         f"Inside Pipi loop. Ooooookay, Loop ended, let's continue with the next round!!! {datetime.now()} {self}")
@@ -101,15 +92,15 @@ class PipiCog:
     async def cmd_pipi(self, ctx):
         """ User mentioned there is a need to go to toilet. """
 
-        self.pipi_votes[ctx.author.name] = 1
+        self.add_pipimeter(ctx.author.name)
         await self.notify_pipi(ctx)
 
     @commands.command(name="warpipi", aliases=["Warpipi", "zuspät", "Zuspät"])
     async def cmd_warpipi(self, ctx):
         """ User already went to toilet. """
 
-        if ctx.author.name in self.pipi_votes:
-            del self.pipi_votes[ctx.author.name]
+        if ctx.author.name:
+            self.remove_pipimeter(ctx.author.name)
             await self.notify_pipi(ctx)
 
     @commands.command(name="pause", aliases=["Pause"])
@@ -117,18 +108,52 @@ class PipiCog:
         """ We will do a break now! """
 
         if ctx.author.is_mod:
-            self.pipi_votes = {}
+            self.truncate_pipimeter()
             await self.bot.send_me(ctx, "Jetzt geht noch mal jeder aufs Klo, und dann streamen wir weiter!",
-                                   self.COLOR_0)
+                                   config.get_value("PipiColor0"))
 
     @commands.command(name="reset", aliases=["Reset"])
     async def cmd_reset(self, ctx):
         """ Reset pipi votes """
 
         if ctx.author.is_mod:
-            self.pipi_votes = {}
+            self.truncate_pipimeter()
 
     @commands.command(name="pipimeter", aliases=["Pipimeter"])
     async def cmd_pipimeter(self, ctx):
         if ctx.author.is_mod:
             await self.notify_pipi(ctx, use_timer=False)
+
+    def get_pipimeter(self):
+        conn = sqlite3.connect("db.sqlite3")
+
+        c = conn.cursor()
+        c.execute('SELECT count(user) from haugebot_web_pipimeter')
+        pipimeter = c.fetchone()[0]
+        conn.close()
+
+        return int(pipimeter)
+
+    def truncate_pipimeter(self):
+        conn = sqlite3.connect("db.sqlite3")
+
+        c = conn.cursor()
+        c.execute('DELETE from haugebot_web_pipimeter')
+        conn.commit()
+        conn.close()
+
+    def add_pipimeter(self, user):
+        conn = sqlite3.connect("db.sqlite3")
+
+        c = conn.cursor()
+        c.execute('INSERT OR REPLACE INTO haugebot_web_pipimeter(user) values (?)', (user,))
+        conn.commit()
+        conn.close()
+
+    def remove_pipimeter(self, user):
+        conn = sqlite3.connect("db.sqlite3")
+
+        c = conn.cursor()
+        c.execute('DELETE from haugebot_web_pipimeter where user = ?', (user,))
+        conn.commit()
+        conn.close()
diff --git a/haugebot_web/migrations/0003_pipimeter.py b/haugebot_web/migrations/0003_pipimeter.py
new file mode 100644
index 0000000000000000000000000000000000000000..e91219994ea1bd74701f78602dee85805b45b73a
--- /dev/null
+++ b/haugebot_web/migrations/0003_pipimeter.py
@@ -0,0 +1,28 @@
+# Generated by Django 3.1.5 on 2021-01-13 22:06
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ('haugebot_web', '0002_twitchuser_admin'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Pipimeter',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('user', models.CharField(max_length=25, unique=True)),
+            ],
+        ),
+        migrations.RunSQL("INSERT INTO haugebot_web_setting(key, value) VALUES ('PipiDelay', '15')"),
+        migrations.RunSQL("INSERT INTO haugebot_web_setting(key, value) VALUES ('PipiThreshold1', '1')"),
+        migrations.RunSQL("INSERT INTO haugebot_web_setting(key, value) VALUES ('PipiThreshold2', '3')"),
+        migrations.RunSQL("INSERT INTO haugebot_web_setting(key, value) VALUES ('PipimeterLoop', '10')"),
+        migrations.RunSQL("INSERT INTO haugebot_web_setting(key, value) VALUES ('PipimeterResetThreshold', '30')"),
+        migrations.RunSQL("INSERT INTO haugebot_web_setting(key, value) VALUES ('PipiColor0', 'YellowGreen')"),
+        migrations.RunSQL("INSERT INTO haugebot_web_setting(key, value) VALUES ('PipiColor1', 'Green')"),
+        migrations.RunSQL("INSERT INTO haugebot_web_setting(key, value) VALUES ('PipiColor2', 'GoldenRod')"),
+        migrations.RunSQL("INSERT INTO haugebot_web_setting(key, value) VALUES ('PipiColor3', 'Red')"),
+    ]
diff --git a/haugebot_web/models.py b/haugebot_web/models.py
index 0410d74e69ba0b9cb7f4f981b3277a25904d066d..35ba3890ce261b90c885389b9e04acdd9ed9d8f1 100644
--- a/haugebot_web/models.py
+++ b/haugebot_web/models.py
@@ -24,6 +24,10 @@ class WusstestDuSchon(models.Model):
     active = models.BooleanField(default=True, verbose_name="Aktiv")
 
 
+class Pipimeter(models.Model):
+    user = models.CharField(max_length=25, unique=True)
+
+
 class TwitchUser(models.Model):
     objects = TwitchUserManager()