diff -ur -x '*.pyc' -x '*.py~' anki-1.2.5.orig/libanki/anki/cards.py anki-1.2.5/libanki/anki/cards.py
--- anki-1.2.5.orig/libanki/anki/cards.py	2011-01-19 06:42:48.000000000 +0800
+++ anki-1.2.5/libanki/anki/cards.py	2011-02-01 14:23:17.065672624 +0800
@@ -146,10 +146,16 @@
         "Generate a random offset to spread intervals."
         self.fuzz = random.uniform(0.95, 1.05)
 
-    def htmlQuestion(self, type="question", align=True):
+    def htmlQuestion(self, type="question", align=False):
+        # format qa
+        d = {}
+        for f in self.fact.model.fieldModels:
+            d[f.name] = (f.id, self.fact.get(f.name, ''))
+        qa = formatQA(None, self.fact.modelId, d, self.splitTags(),
+                      self.cardModel, None, card=self)
         div = '''
%s
''' % (
             type[0], type[0], hexifyID(self.cardModelId),
-            getattr(self, type))
+            qa[type])
         # add outer div & alignment (with tables due to qt's html handling)
         if not align:
             return div
@@ -163,7 +169,7 @@
         return (("")
 
-    def htmlAnswer(self, align=True):
+    def htmlAnswer(self, align=False):
         return self.htmlQuestion(type="answer", align=align)
 
     def updateStats(self, ease, state):
diff -ur -x '*.pyc' -x '*.py~' anki-1.2.5.orig/libanki/anki/deck.py anki-1.2.5/libanki/anki/deck.py
--- anki-1.2.5.orig/libanki/anki/deck.py	2011-01-27 07:03:10.000000000 +0800
+++ anki-1.2.5/libanki/anki/deck.py	2011-02-04 19:04:20.809000512 +0800
@@ -1636,7 +1636,8 @@
             t = ""
             if fam: t += 'font-family:"%s";' % toPlatformFont(fam)
             if siz: t += 'font-size:%dpx;' % siz
-            if col: t += 'color:%s;' % col
+            # no fixed field colors for me, please
+            # if col: t += 'color:%s;' % col
             if rtl == "rtl":
                 t += "direction:rtl;unicode-bidi:embed;"
             if pre:
diff -ur -x '*.pyc' -x '*.py~' anki-1.2.5.orig/libanki/anki/hooks.py anki-1.2.5/libanki/anki/hooks.py
--- anki-1.2.5.orig/libanki/anki/hooks.py	2011-01-19 06:42:48.000000000 +0800
+++ anki-1.2.5/libanki/anki/hooks.py	2011-02-01 01:16:01.260586001 +0800
@@ -18,18 +18,18 @@
 
 _hooks = {}
 
-def runHook(hook, *args):
+def runHook(hook, *args, **kwargs):
     "Run all functions on hook."
     hook = _hooks.get(hook, None)
     if hook:
         for func in hook:
-            func(*args)
+            func(*args, **kwargs)
 
-def runFilter(hook, arg, *args):
+def runFilter(hook, arg, *args, **kwargs):
     hook = _hooks.get(hook, None)
     if hook:
         for func in hook:
-            arg = func(arg, *args)
+            arg = func(arg, *args, **kwargs)
     return arg
 
 def addHook(hook, func):
diff -ur -x '*.pyc' -x '*.py~' anki-1.2.5.orig/libanki/anki/models.py anki-1.2.5/libanki/anki/models.py
--- anki-1.2.5.orig/libanki/anki/models.py	2011-01-19 06:42:48.000000000 +0800
+++ anki-1.2.5/libanki/anki/models.py	2011-02-05 01:27:56.361000512 +0800
@@ -132,7 +132,7 @@
 
 mapper(CardModel, cardModelsTable)
 
-def formatQA(cid, mid, fact, tags, cm, deck):
+def formatQA(cid, mid, fact, tags, cm, deck, **kwargs):
     "Return a dict of {id, question, answer}"
     d = {'id': cid}
     fields = {}
@@ -154,7 +154,8 @@
         # convert old style
         format = re.sub("%\((.+?)\)s", "{{\\1}}", format)
         # allow custom rendering functions & info
-        fields = runFilter("prepareFields", fields, cid, mid, fact, tags, cm, deck)
+        fields = runFilter("prepareFields", fields, cid, mid, fact, tags, cm, deck, **kwargs)
+        format = runFilter("preRenderFormatQA", format, type, cid, mid, fact, tags, cm, deck, **kwargs)
         html = render(format, fields)
         d[type] = runFilter("formatQA", html, type, cid, mid, fact, tags, cm, deck)
     return d