diff --git a/anime/__init__.py b/anime/__init__.py
index e69de29..40a96af 100644
--- a/anime/__init__.py
+++ b/anime/__init__.py
@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-
diff --git a/anime/api/base.py b/anime/api/base.py
index f1c6974..6ae959f 100644
--- a/anime/api/base.py
+++ b/anime/api/base.py
@@ -7,12 +7,12 @@ class ApiBase(object):
     link_prefix = '/ajax/'
     link = ''
     response = 'error'
-    params = {}
-    returns = {}
-    returns_noarg = {}
-    error = {}

     def __init__(self, prefix=''):
+        for attr in ['params', 'returns', 'returns_noarg', 'error']:
+            if not getattr(self, attr, None):
+                setattr(self, attr, {})
+
         if prefix:
             self.link_prefix = prefix
         view = getattr(self, 'view', None)
diff --git a/anime/tests/_functions.py b/anime/tests/_functions.py
index 1dce295..d987639 100644
--- a/anime/tests/_functions.py
+++ b/anime/tests/_functions.py
@@ -56,6 +56,13 @@ def create_cachestr(link='', link_data={}, page=1, data={}):
 def hexdigest(string):
     return sha1(string.encode('utf-8')).hexdigest()

+errors = {
+    'match': '{0}\nnot match original:\n{1}',
+    'type': '{0}\ntype ({1}) not match original type:\n{2}',
+    'dict': '{0}\nnot match original:\n{1};\nKey: {2}, item: {3}',
+    'element': '{0}\nnot match original:\n{1}.\nItem {3} not found',
+}
+
 def check_response(response, origin, *args, **kwargs):

     if origin is None:
@@ -63,7 +70,7 @@ def check_response(response, origin, *args, **kwargs):

     if isinstance(origin, dict):
         if not isinstance(response, dict):
-            raise AssertionError('%s not match original type: %s' % (response, origin))
+            raise AssertionError(errors['type'].format(response, type(response), origin))
@@ -75,36 +82,36 @@ def check_response(response, origin, *args, **kwargs):
                     if item is not None and not isinstance(origin, apiTypes.NoneableDict) and \
                        not isinstance(item, apiTypes.Noneable):
-                        raise AssertionError('%s\nnot match original:\n%s;\nKey: %s, item: %s' % (response, origin, key, item))
+                        raise AssertionError(errors['dict'].format(response, origin, key, item))
             return

     if isinstance(origin, basestring):
         if not isinstance(response, basestring):
             raise AssertionError('%s is not string. Type does not match: %s' % (response, origin))
         elif not origin == response:
-            raise AssertionError('%s not match original: %s' % (response, origin))
+            raise AssertionError(errors['match'].format(response, origin))
         return

     if is_iterator(origin):
         if not is_iterator(response):
-            raise AssertionError('%s not match original type: %s' % (response, origin))
+            raise AssertionError(errors['type'].format(response, type(response), origin))
         if isinstance(origin, apiTypes.FuzzyList):
             origin.set_count(len(response))
         for i in range(0, len(origin)):
             try:
                 check_response(response[i], origin[i], *args, **kwargs)
             except IndexError:
-                raise AssertionError('%s not match original: %s. Item %s not found' % (response, origin, origin[i]))
+                raise AssertionError(errors['element'].format(response, origin, origin[i]))
             except Exception, e:
                 raise e
         return

     if isinstance(origin, bool):
         if not isinstance(response, bool):
-            raise AssertionError('%s not match original type: %s' % (response, origin))
+            raise AssertionError(errors['type'].format(response, type(response), origin))
         else:
             if not response == origin:
-                raise AssertionError('%s not match original: %s' % (response, origin))
+                raise AssertionError(errors['match'].format(response, origin))
         return

     if isinstance(origin, apiTypes.Noneable):
@@ -114,10 +121,11 @@ def check_response(response, origin, *args, **kwargs):

     if isinstance(origin, type):
         if not type(response) == origin:
-            if origin is datetime.date and type(response) is unicode: #rewrite
-                return
+            if isinstance(response, basestring):
+                if filter(lambda x: origin is x, [str, unicode, datetime.date]):
+                    return
             if origin != unicode or type(response) not in (str, bool, int, float, long, complex):
-                raise AssertionError('%s type (%s) not match original type: %s' % (response, type(response), origin))
+                raise AssertionError(errors['type'].format(response, type(response), origin))
         return

     if callable(origin):
diff --git a/anime/tests/views.py b/anime/tests/views.py
index f9f9bfb..3530daf 100644
--- a/anime/tests/views.py
+++ b/anime/tests/views.py
@@ -363,7 +363,8 @@ class ClassesViewsTest(TestCase):
         v.get_link = self.blank
         v.check_parameters = self.blank
         self.assertEquals(v.get_context_data(object_list=None),
-                {'list': None, 'link': '', 'pages': {}, 'cachestr': BLANK_CACHESTR})
+                {'list': None, 'head': None, 'link': '', 'pages': {},
+                'cachestr': BLANK_CACHESTR})

diff --git a/anime/views/classes.py b/anime/views/classes.py
index 556ed6e..83f8332 100644
--- a/anime/views/classes.py
+++ b/anime/views/classes.py
@@ -88,7 +88,8 @@ class AnimeAjaxListView(AnimeListView):

     def api_returns(self):
         return {
-            'head': FuzzyList(getattr(self, 'fields', [])),
+            'head': FuzzyList(map(lambda x: type(x),
+                        getattr(self, 'fields', []))),
             'list': list,
             'pages': NoneableDict({
                 'current': int,
diff --git a/anime/views/table.py b/anime/views/table.py
index 08ca4d3..eee9e10 100644
--- a/anime/views/table.py
+++ b/anime/views/table.py
@@ -23,8 +23,8 @@ class IndexListView(AnimeAjaxListView):
     cache_name = 'mainTable'
     ajax_cache_name = 'ajaxlist'
     response_name = 'list'
-    fields = ['air', 'id', 'title', 'episodes', 'release', 'type']
-    ADDITIONAL_FIELDS = ['rating', '-rating', 'changed', '-changed']
+    fields = [u'air', u'id', u'title', u'episodes', u'release', u'type']
+    ADDITIONAL_FIELDS = [u'rating', u'-rating', u'changed', u'-changed']
     parameters = [
         ('user', None, 'bad_user'),
         ('status', None, 'bad_status'),
cachestr were separated from get_link.
Tests cache changes.