diff --git a/config b/config
index a382bfd8..f7c73cd1 100644
--- a/config
+++ b/config
@@ -126,7 +126,7 @@ font-3 = NotoSans-Regular:size=8;-1
 font-4 = MaterialIcons:size=10;-1
 
 modules-left = bspwm
-modules-right = rtorrent cpu memory
+modules-right = cpu memory
 ; modules-right = cpu memory
 
 [bar/external_bottom]
@@ -760,38 +760,6 @@ label-connected =    %{T3}%local_ip%%{T-}
 ;label-packetloss = %essid%
 ;label-packetloss-foreground = #eefafafa
 
-[module/rtorrent]
-type = internal/rtorrent
-
-script = /home/jaagr/var/github/jaagr/lemonbuddy/scripts/torrents.sh
-rtorrent_session_dir = /home/jaagr/.cache/rtorrent
-display_count = 2
-title_maxlen = 30
-
-; Available tags:
-;   <label> (default)
-;   <bar-progress>
-;format = <label>
-
-; Available tokens:
-;   %title%
-;   %percentage%
-; Default- %label% (%percentage%)
-label = %{F#fba922}%{F-} %{F#eefafafa}%title% %percentage%%{F-}
-;label-foreground = #eefafafa
-
-; Required if <bar-progress> is used
-;bar-progress-width = 10
-;bar-progress-format = %{+u}%{+o}%fill%%{-u}%{-o}%indicator%%{+u}%{+o}%empty%%{-u}%{-o}
-;bar-progress-indicator = |
-;bar-progress-indicator-foreground = ${BAR.foreground}
-;bar-progress-indicator-font = 2
-;bar-progress-fill = █
-;bar-progress-fill-foreground = #5a5
-;bar-progress-fill-font = 2
-;bar-progress-empty = █
-;bar-progress-empty-foreground = #555
-;bar-progress-empty-font = 2
 
 [module/volume]
 type = internal/volume
diff --git a/include/modules/torrent.hpp b/include/modules/torrent.hpp
deleted file mode 100644
index 265d82c4..00000000
--- a/include/modules/torrent.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#pragma once
-
-#include "modules/base.hpp"
-#include "drawtypes/bar.hpp"
-#include "drawtypes/label.hpp"
-
-namespace modules
-{
-  struct Torrent
-  {
-    std::string title;
-    unsigned long data_total;
-    unsigned long data_downloaded;
-    unsigned long data_remaining;
-    float perc_downloaded;
-    std::unique_ptr<drawtypes::Label> label_tokenized;
-  };
-
-  DefineModule(TorrentModule, InotifyModule)
-  {
-    static constexpr auto TAG_LABEL = "<label>";
-    static constexpr auto TAG_BAR_PROGRESS = "<bar-progress>";
-
-    std::vector<std::unique_ptr<Torrent>> torrents;
-    std::unique_ptr<drawtypes::Label> label;
-    std::unique_ptr<drawtypes::Label> label_tokenized;
-    std::unique_ptr<drawtypes::Bar> bar;
-    std::string pipe_cmd;
-
-    std::vector<std::unique_ptr<Torrent>> &read_data_into(std::vector<std::unique_ptr<Torrent>> &container);
-
-    public:
-      explicit TorrentModule(const std::string& name);
-
-      void start();
-      bool on_event(InotifyEvent *event);
-      bool build(Builder *builder, const std::string& tag);
-  };
-}
diff --git a/scripts/torrents.sh b/scripts/torrents.sh
deleted file mode 100755
index 4a6e3134..00000000
--- a/scripts/torrents.sh
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env bash
-#
-# Creates a summary of active torrents
-#
-
-main() {
-  local rtorrent_session_dir=${1:-"${HOME}/.cache/rtorrent"} ; shift
-  local max_count=${1:-3} ; shift
-  local cap=${1:-40} ; shift
-
-  local file target_dir chunks_wanted chunks_done chunks_total i
-
-  for file in $(find "$rtorrent_session_dir" -name '*.rtorrent' | sed -nr 's/^(.*)\.rtorrent$/\0/p'); do
-    target_dir=$(sed -nr 's/.*directory[0-9]+:(.*)7:hashing.*/\1/p' "$file")
-
-    state=$(egrep -ro "statei([0-9]+)e13" "$file")
-    state=${state##*i}
-    state=${state%%e*}
-
-    chunks_done=$(egrep -ro "chunks_donei([0-9]+)e13" "$file")
-    chunks_wanted=$(egrep -ro "chunks_wantedi([0-9]+)e8" "$file")
-    chunks_done=${chunks_done##*i}
-    chunks_done=${chunks_done%%e*}
-    chunks_wanted=${chunks_wanted##*i}
-    chunks_wanted=${chunks_wanted%%e*}
-    chunks_total=$(( chunks_done + chunks_wanted ))
-
-    if (( $(sed -nr 's/.*statei([0-9]+)e13.*/\1/p' "$file") )); then
-      [[ "$chunks_total" == "$chunks_wanted" ]] && [[ $chunks_done -eq 0 ]] && continue;
-
-      num_files=$(( num_files + 1 ))
-      label=$(echo "$target_dir" | sed -nr 's/\//\n/gp' | tail -1)
-
-      if [[ ${#label} -gt $cap ]]; then
-        label=${label:0:$cap}
-        label="${label% *}..."
-      fi
-
-      echo "${label}:${chunks_total:-0}:${chunks_done:-0}:${chunks_wanted:-0}"
-
-      i=$(( i + 1 ))
-
-      [[ $i -ge $max_count ]] && break
-    fi
-  done
-}
-
-main "$@"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 21b955fd..6a95a66d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -41,7 +41,6 @@ set(SOURCE_FILES
   "src/modules/menu.cpp"
   "src/modules/script.cpp"
   "src/modules/text.cpp"
-  # "src/modules/torrent.cpp"
   "src/services/builder.cpp"
   "src/services/command.cpp"
   "src/services/inotify.cpp"
diff --git a/src/bar.cpp b/src/bar.cpp
index 38c5e05a..7668422a 100644
--- a/src/bar.cpp
+++ b/src/bar.cpp
@@ -13,7 +13,6 @@
 #include "modules/menu.hpp"
 #include "modules/script.hpp"
 #include "modules/text.hpp"
-#include "modules/torrent.hpp"
 #ifdef ENABLE_I3
 #include "modules/i3.hpp"
 #endif
@@ -172,9 +171,6 @@ void Bar::load()
         module = std::make_unique<modules::VolumeModule>(mod);
 #else
         throw CompiledWithoutModuleSupport("volume");
-#endif
-#if 0
-      else if (type == "internal/rtorrent")   module = std::make_unique<modules::TorrentModule>(mod);
 #endif
       else if (type == "custom/text")         module = std::make_unique<modules::TextModule>(mod);
       else if (type == "custom/script")       module = std::make_unique<modules::ScriptModule>(mod);
diff --git a/src/modules/torrent.cpp b/src/modules/torrent.cpp
deleted file mode 100644
index 872502b5..00000000
--- a/src/modules/torrent.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-#include <string>
-#include <iostream>
-#include <memory>
-#include <unistd.h>
-#include <sstream>
-
-#include "lemonbuddy.hpp"
-#include "services/command.hpp"
-#include "services/builder.hpp"
-#include "utils/io.hpp"
-#include "utils/proc.hpp"
-#include "utils/string.hpp"
-#include "utils/config.hpp"
-#include "modules/torrent.hpp"
-
-using namespace modules;
-
-// TODO: Parse the torrent files internally instead of using the bash script
-
-TorrentModule::TorrentModule(const std::string& name_) : InotifyModule(name_)
-{
-  this->formatter->add(DEFAULT_FORMAT, TAG_LABEL, { TAG_LABEL, TAG_BAR_PROGRESS });
-
-  if (this->formatter->has(TAG_LABEL))
-    this->label = drawtypes::get_optional_config_label(name(), get_tag_name(TAG_LABEL), "%title% (%percentage%)");
-  if (this->formatter->has(TAG_BAR_PROGRESS))
-    this->bar = drawtypes::get_config_bar(name(), get_tag_name(TAG_BAR_PROGRESS));
-
-  auto rtorrent_session_dir = config::get<std::string>(name(), "rtorrent_session_dir");
-
-  this->watch(rtorrent_session_dir);
-
-  this->pipe_cmd = config::get<std::string>(name(), "script")
-    + " " + rtorrent_session_dir
-    + " " + std::to_string(config::get<int>(name(), "display_count", 2))
-    + " " + std::to_string(config::get<int>(name(), "title_maxlen", 30));
-}
-
-void TorrentModule::start()
-{
-  this->InotifyModule<TorrentModule>::start();
-
-  std::thread manual_updater([&]{
-    while (this->enabled()) {
-      std::this_thread::sleep_for(5s);
-      this->on_event(nullptr);
-    }
-  });
-  this->threads.emplace_back(std::move(manual_updater));
-}
-
-bool TorrentModule::on_event(InotifyEvent *event)
-{
-  if (EXIT_SUCCESS != std::system("pgrep rtorrent >/dev/null")) {
-    get_logger()->debug("[modules::Torrent] rtorrent is not running... ");
-    return true;
-  }
-
-  if (event != nullptr) {
-    log_trace(event->filename);
-  }
-
-  this->torrents.clear();
-  this->read_data_into(this->torrents);
-
-  return true;
-}
-
-bool TorrentModule::build(Builder *builder, const std::string& tag)
-{
-  if (tag != TAG_LABEL && tag != TAG_BAR_PROGRESS)
-    return false;
-
-  for (auto &torrent : this->torrents) {
-    if (tag == TAG_LABEL)
-      builder->node(torrent->label_tokenized);
-    else if (tag == TAG_BAR_PROGRESS)
-      builder->node(this->bar, torrent->perc_downloaded);
-  }
-
-  return true;
-}
-
-std::vector<std::unique_ptr<Torrent>> &TorrentModule::read_data_into(std::vector<std::unique_ptr<Torrent>> &container)
-{
-  try {
-    std::string buf;
-
-    auto command = std::make_unique<Command>("/usr/bin/env\nsh\n-c\n"+ this->pipe_cmd);
-
-    command->exec(false);
-
-    while (!(buf = io::readline(command->get_stdout(PIPE_READ))).empty()) {
-      auto values = string::split(buf, ':');
-
-      if (values.size() != 4) {
-        log_error("Bad value received from torrent script:\n"+ buf);
-        continue;
-      }
-
-      auto torrent = std::make_unique<Torrent>();
-      torrent->title = values[0];
-      torrent->data_total = std::strtoul(values[1].c_str(), 0, 10);
-      torrent->data_downloaded = std::strtoul(values[2].c_str(), 0, 10);
-      torrent->data_remaining = std::strtoul(values[3].c_str(), 0, 10);
-      torrent->perc_downloaded = (float) torrent->data_downloaded / torrent->data_total  * 100.0 + 0.5f;
-
-      torrent->label_tokenized = this->label->clone();
-      torrent->label_tokenized->replace_token("%title%", torrent->title);
-      torrent->label_tokenized->replace_token("%percentage%", std::to_string((int) torrent->perc_downloaded)+"%");
-
-      container.emplace_back(std::move(torrent));
-    }
-
-    command->wait();
-  } catch (CommandException &e) {
-    log_error(e.what());
-  } catch (proc::ExecFailure &e) {
-    log_error(e.what());
-  }
-
-  return container;
-}