diff --git a/.landscape.yaml b/.landscape.yaml
new file mode 100644
index 0000000..95d8d32
--- /dev/null
+++ b/.landscape.yaml
@@ -0,0 +1,2 @@
+doc-warnings: yes
+strictness: veryhigh
diff --git a/.travis.yml b/.travis.yml
index 0b1b7a0..18823c2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,5 +5,4 @@ python:
   - 3.4
   - 3.5
 script:
-  - make travis
-after_success: coveralls
+  - make ci
diff --git a/HISTORY.rst b/HISTORY.rst
index 9ff86a6..0295563 100644
--- a/HISTORY.rst
+++ b/HISTORY.rst
@@ -1,5 +1,10 @@
 Release History
 ^^^^^^^^^^^^^^^
+2.4.4 (2016-03-19)
+++++++++++++++++++
+
+* Update `slugify` function to better match trakt slugs (#51)
+
 2.4.3 (2016-03-12)
 ++++++++++++++++++
 
diff --git a/Makefile b/Makefile
index 5ab43b9..8379202 100644
--- a/Makefile
+++ b/Makefile
@@ -14,11 +14,6 @@ coverage:
 
 ci: init style test
 
-coveralls:
-	pip install coveralls
-
-travis: coveralls ci
-
 publish:
 	python setup.py register
 	python setup.py sdist upload
diff --git a/README.rst b/README.rst
index 6b953ad..598a0ad 100644
--- a/README.rst
+++ b/README.rst
@@ -4,9 +4,9 @@ PyTrakt
     :target: https://travis-ci.org/moogar0880/PyTrakt
     :alt: Travis CI Status
 
-.. image:: https://coveralls.io/repos/moogar0880/PyTrakt/badge.svg
-    :target: https://coveralls.io/r/moogar0880/PyTrakt
-    :alt: Coverage
+.. image:: https://landscape.io/github/moogar0880/PyTrakt/master/landscape.svg?style=flat
+    :target: https://landscape.io/github/moogar0880/PyTrakt/master
+    :alt: Code Health
 
 .. image:: https://pypip.in/d/trakt/badge.svg?style=flat
     :target: https://pypi.python.org/pypi/trakt/
diff --git a/trakt/__init__.py b/trakt/__init__.py
index c53769b..4980572 100644
--- a/trakt/__init__.py
+++ b/trakt/__init__.py
@@ -5,6 +5,6 @@ try:
 except ImportError:
     pass
 
-version_info = (2, 4, 3)
+version_info = (2, 4, 4)
 __author__ = 'Jon Nappi'
 __version__ = '.'.join([str(i) for i in version_info])
diff --git a/trakt/utils.py b/trakt/utils.py
index d05b755..6b79fec 100644
--- a/trakt/utils.py
+++ b/trakt/utils.py
@@ -14,12 +14,11 @@ def slugify(value):
 
     Adapted from django.utils.text.slugify
     """
-    if sys.version_info[0] == 2:
-        value = unicode(value)  # NOQA
-    value = unicodedata.normalize('NFKD',
-                                  value).encode('ascii',
-                                                'ignore').decode('ascii')
-    value = re.sub('[^\w\s-]', '', value).strip().lower()
+    if sys.version_info[0] == 2 and isinstance(value, str):
+        value = unicode(value, 'utf-8')  # NOQA
+    nfkd_form = unicodedata.normalize('NFKD', value)
+    decoded = nfkd_form.encode('ascii', 'ignore').decode('utf-8')
+    value = re.sub('[^\w\s-]', ' ', decoded).strip().lower()
     return re.sub('[-\s]+', '-', value)
 
 

Slugify bug?
There appears to be some differences in how your slugify function works in utils.py compared to the trakt slugs.  Are they supposed to match?  Without them matching the _get functions in movies.py and tv.py class inits are prone to error as these rely on the slug to pull the information.  Here's an example.

title:  Marvel's Agents of S.H.I.E.L.D.
pytrakt slug:  marvels-agents-of-shield
trakt slug:  marvel-s-agents-of-s-h-i-e-l-d

Also, I noticed that in movie.py your joining the year (if passed) to the slug but you don't have the same logic in tv.py.  Is there a reason to not include that?  TV Shows with the same title also use the year in the slug to differentiate the shows.
diff --git a/testing-requirements.txt b/testing-requirements.txt
index 35d8447..4c50c00 100644
--- a/testing-requirements.txt
+++ b/testing-requirements.txt
@@ -2,4 +2,3 @@
 flake8
 pytest
 pytest-cov
-coveralls
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 6b75c21..78b1af4 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -11,6 +11,8 @@ def test_slugify():
         ('IM AN ALL CAPS STRING', 'im-an-all-caps-string'),
         ('IM A BAD A$$ STRING!@', 'im-a-bad-a-string'),
         (' LOOK AT MY WHITESPACE   ', 'look-at-my-whitespace'),
+        ("Marvel's Agents of S.H.I.E.L.D.", 'marvel-s-agents-of-s-h-i-e-l-d'),
+        ('Naruto Shippūden', 'naruto-shippuden'),
     ]
 
     for inp, expected in test_data:

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-cov coveralls
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi==2025.1.31
charset-normalizer==3.4.1
coverage==7.8.0
coveralls==4.0.1
docopt==0.6.2
exceptiongroup==1.2.2
idna==3.10
iniconfig==2.1.0
oauthlib==3.2.2
packaging==24.2
pluggy==1.5.0
pytest==8.3.5
pytest-cov==6.0.0
requests==2.32.3
requests-oauthlib==2.0.0
tomli==2.2.1
-e git+https://github.com/moogar0880/PyTrakt.git@f574c1c1dfc6f65f21296184659aadc2879f2be6#egg=trakt
urllib3==2.3.0

name: PyTrakt
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - coverage==7.8.0
      - coveralls==4.0.1
      - docopt==0.6.2
      - exceptiongroup==1.2.2
      - idna==3.10
      - iniconfig==2.1.0
      - oauthlib==3.2.2
      - packaging==24.2
      - pluggy==1.5.0
      - pytest==8.3.5
      - pytest-cov==6.0.0
      - requests==2.32.3
      - requests-oauthlib==2.0.0
      - tomli==2.2.1
      - urllib3==2.3.0
prefix: /opt/conda/envs/PyTrakt

tests/test_utils.py::test_slugify
tests/test_utils.py::test_airs_date tests/test_utils.py::test_now tests/test_utils.py::test_timestamp tests/test_utils.py::test_extract_ids
README.rst Makefile trakt/utils.py .landscape.yaml HISTORY.rst .travis.yml trakt/__init__.py
README.rst Makefile trakt/utils.py .landscape.yaml HISTORY.rst .travis.yml trakt/__init__.py