diff --git a/gnu/local.mk b/gnu/local.mk
index a0f40d13ae..d7d1a3fed6 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -690,7 +690,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/boost-fix-icu-build.patch		\
   %D%/packages/patches/byobu-writable-status.patch		\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
-  %D%/packages/patches/calibre-use-packaged-feedparser.patch	\
   %D%/packages/patches/casync-renameat2-declaration.patch	\
   %D%/packages/patches/catdoc-CVE-2017-11110.patch		\
   %D%/packages/patches/cdparanoia-fpic.patch			\
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index 99e49bc172..a603519590 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -78,7 +78,7 @@
 (define-public calibre
   (package
     (name "calibre")
-    (version "3.35.0")
+    (version "3.41.3")
     (source
       (origin
         (method url-fetch)
@@ -87,20 +87,16 @@
                             version ".tar.xz"))
         (sha256
          (base32
-          "1gd15wjz4fhcra6d44xiy3hwbyk0miwb66a1pq5yldyy0hlb271z"))
+          "167hhv4wimkjnyfgqkyqmaiixhicbxacy6190gps98jyj4csi8ra"))
         ;; Remove non-free or doubtful code, see
         ;; https://lists.gnu.org/archive/html/guix-devel/2015-02/msg00478.html
         (modules '((guix build utils)))
         (snippet
           '(begin
-            (delete-file-recursively "src/calibre/ebooks/markdown")
             (delete-file "src/odf/thumbnail.py")
             (delete-file-recursively "resources/fonts/liberation")
-            (substitute* (find-files "." "\\.py")
-              (("calibre\\.ebooks\\.markdown") "markdown"))
             #t))
-        (patches (search-patches "calibre-use-packaged-feedparser.patch"
-                                 "calibre-no-updates-dialog.patch"))))
+        (patches (search-patches "calibre-no-updates-dialog.patch"))))
     (build-system python-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -129,7 +125,7 @@
        ("python2-apsw" ,python2-apsw)
        ("python2-chardet" ,python2-chardet)
        ("python2-cssselect" ,python2-cssselect)
-       ("python2-cssutils" ,python2-cssutils)
+       ("python2-css-parser" ,python2-css-parser)
        ("python2-dateutil" ,python2-dateutil)
        ("python2-dbus" ,python2-dbus)
        ("python2-dnspython" ,python2-dnspython)
diff --git a/gnu/packages/patches/calibre-use-packaged-feedparser.patch b/gnu/packages/patches/calibre-use-packaged-feedparser.patch
deleted file mode 100644
index 8f4bbc8248..0000000000
--- a/gnu/packages/patches/calibre-use-packaged-feedparser.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From: Martin Pitt <mpitt@debian.org>
-Date: Mon, 14 Nov 2016 22:41:23 +0100
-Subject: Use packaged instead of bundled feedparser Python module
-
----
- recipes/lenta_ru.recipe           | 4 +++-
- src/calibre/web/feeds/__init__.py | 4 +++-
- 2 files changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/recipes/lenta_ru.recipe b/recipes/lenta_ru.recipe
-index aa4dac4..4b6710c 100644
---- a/recipes/lenta_ru.recipe
-+++ b/recipes/lenta_ru.recipe
-@@ -4,11 +4,13 @@
- Lenta.ru
- '''
- 
--from calibre.web.feeds.feedparser import parse
- from calibre.ebooks.BeautifulSoup import Tag
- from calibre.web.feeds.news import BasicNewsRecipe
-+from feedparser import parse
-+from functools import partial
- import re
- 
-+parse = partial(parse, agent='Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11')
- 
- class LentaRURecipe(BasicNewsRecipe):
-     title = u'Lenta.ru: \u041d\u043e\u0432\u043e\u0441\u0442\u0438'
-diff --git a/src/calibre/web/feeds/__init__.py b/src/calibre/web/feeds/__init__.py
-index 8c9d748..f262604 100644
---- a/src/calibre/web/feeds/__init__.py
-+++ b/src/calibre/web/feeds/__init__.py
-@@ -11,7 +11,10 @@ from calibre.utils.logging import default_log
- from calibre import entity_to_unicode, strftime, force_unicode
- from calibre.utils.date import dt_factory, utcnow, local_tz
- from calibre.utils.cleantext import clean_ascii_chars, clean_xml_chars
-+from feedparser import parse
-+from functools import partial
- 
-+parse = partial(parse, agent='Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11')
- 
- class Article(object):
- 
-@@ -334,7 +337,6 @@ def feed_from_xml(raw_xml, title=None, oldest_article=7,
-                   max_articles_per_feed=100,
-                   get_article_url=lambda item: item.get('link', None),
-                   log=default_log):
--    from calibre.web.feeds.feedparser import parse
-     # Handle unclosed escaped entities. They trip up feedparser and HBR for one
-     # generates them
-     raw_xml = re.sub(r'(&amp;#\d+)([^0-9;])', r'\1;\2', raw_xml)
