Index: /trunk/StreamVision/HotKeymodule.c
===================================================================
--- /trunk/StreamVision/HotKeymodule.c	(revision 211)
+++ /trunk/StreamVision/HotKeymodule.c	(revision 211)
@@ -0,0 +1,36 @@
+#include "Python.h"
+#include "pymactoolbox.h"
+
+#include <Carbon/Carbon.h>
+
+/* from _CarbonEvtmodule.c */
+extern PyTypeObject EventHotKeyRef_Type;
+#define EventHotKeyRef_Check(x) ((x)->ob_type == &EventHotKeyRef_Type || PyObject_TypeCheck((x), &EventHotKeyRef_Type))
+typedef struct EventHotKeyRefObject {
+  PyObject_HEAD
+  EventHotKeyRef ob_itself;
+} EventHotKeyRefObject;
+
+static PyObject
+*HotKey_HotKeyAddress(PyObject *self, PyObject *args) {
+  PyObject *v;
+  if (!PyArg_ParseTuple(args, "O", &v))
+    return NULL;
+  if (!EventHotKeyRef_Check(v)) {
+    PyErr_SetString(PyExc_TypeError, "_CarbonEvt.EventHotKeyRef required");
+    return NULL;
+  }
+  return PyInt_FromLong((int)((EventHotKeyRefObject *)v)->ob_itself);
+}
+
+static PyMethodDef HotKeymodule_methods[] = {
+  {"HotKeyAddress", HotKey_HotKeyAddress, METH_VARARGS,
+   "HotKeyAddress(_CarbonEvt.EventHotKeyRef) -> integer\n\n"
+   "Return the address of the underlying EventHotKeyRef (passed as data1 in hot key NSEvents)."},
+  {NULL, NULL, 0, NULL}
+};
+
+PyMODINIT_FUNC
+initHotKey(void) {
+  (void)Py_InitModule("HotKey", HotKeymodule_methods);
+}
Index: /trunk/StreamVision/StreamVision.py
===================================================================
--- /trunk/StreamVision/StreamVision.py	(revision 210)
+++ /trunk/StreamVision/StreamVision.py	(revision 211)
@@ -7,8 +7,8 @@
 from PyObjCTools import AppHelper
 from Carbon.CarbonEvt import RegisterEventHotKey, GetApplicationEventTarget
-from Carbon.Events import cmdKey
+from Carbon.Events import cmdKey, shiftKey
 import struct
 import scrape
-import _StreamVision
+import HotKey
 
 GROWL_APP_NAME = 'StreamVision'
@@ -75,23 +75,31 @@
     def displayTrackInfo(self):
         iTunes = iTunesApp()
-        if iTunes.player_state.get() == k.playing:
-            if iTunes.current_track.class_.get() == k.URL_track:
-                growlNotify(cleanStreamTitle(iTunes.current_stream_title.get()),
-                            cleanStreamTrackName(iTunes.current_track.name.get()))
-            else:
-                kw = {}
-                artwork = iTunes.current_track.artworks.get()
-                if artwork:
-                    kw['pictImage'] = artwork[0].data.get()
-                growlNotify(iTunes.current_track.name.get() + '  ' +
-                            '★' * (iTunes.current_track.rating.get() / 20),
-                            iTunes.current_track.album.get() + "\n" +
-                            iTunes.current_track.artist.get(),
-                            **kw)
-        else:
-            trackName = ''
-            if iTunes.current_track.class_.get() != k.Property:
-                trackName = iTunes.current_track.name.get()
-            growlNotify("iTunes is not playing.", trackName)
+
+        trackClass = iTunes.current_track.class_.get()
+        trackName = ''
+        if trackClass != k.Property:
+            trackName = iTunes.current_track.name.get()
+
+        if iTunes.player_state.get() != k.playing:
+            growlNotify('iTunes is not playing.', trackName)
+            return
+        if trackClass == k.URL_track:
+            growlNotify(cleanStreamTitle(iTunes.current_stream_title.get()),
+                        cleanStreamTrackName(trackName))
+            return
+        if trackClass == k.Property:
+           growlNotify('iTunes is playing.', '')
+           return
+        kw = {}
+        # XXX iTunes doesn't let you get artwork for shared tracks
+        if trackClass != k.shared_track:
+            artwork = iTunes.current_track.artworks.get()
+            if artwork:
+                kw['pictImage'] = artwork[0].data.get()
+        growlNotify(trackName + '  ' +
+                    '★' * (iTunes.current_track.rating.get() / 20),
+                    iTunes.current_track.album.get() + "\n" +
+                    iTunes.current_track.artist.get(),
+                    **kw)
 
     def goToSite(self):
@@ -110,5 +118,5 @@
                                         GetApplicationEventTarget(), 0)
         self.hotKeys.append(hotKeyRef)
-        self.hotKeyActions[_StreamVision.HotKeyAddress(hotKeyRef)] = func
+        self.hotKeyActions[HotKey.HotKeyAddress(hotKeyRef)] = func
 
     def incrementRatingBy(self, increment):
@@ -140,6 +148,6 @@
         self.registerHotKey(lambda: iTunesApp().previous_track(), 109) # F10
         self.registerHotKey(lambda: iTunesApp().next_track(), 103) # F11
-        self.registerHotKey(lambda: self.incrementRatingBy(-20), 109, cmdKey) # cmd-F10
-        self.registerHotKey(lambda: self.incrementRatingBy(20), 103, cmdKey) # cmd-F11
+        self.registerHotKey(lambda: self.incrementRatingBy(-20), 109, shiftKey) # shift-F10
+        self.registerHotKey(lambda: self.incrementRatingBy(20), 103, shiftKey) # shift-F11
         NSDistributedNotificationCenter.defaultCenter().addObserver_selector_name_object_(self, self.displayTrackInfo, 'com.apple.iTunes.playerInfo', None)
 
Index: unk/StreamVision/_StreamVisionmodule.c
===================================================================
--- /trunk/StreamVision/_StreamVisionmodule.c	(revision 210)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#include "Python.h"
-#include "pymactoolbox.h"
-
-#include <Carbon/Carbon.h>
-
-/* from _CarbonEvtmodule.c */
-extern PyTypeObject EventHotKeyRef_Type;
-#define EventHotKeyRef_Check(x) ((x)->ob_type == &EventHotKeyRef_Type || PyObject_TypeCheck((x), &EventHotKeyRef_Type))
-typedef struct EventHotKeyRefObject {
-  PyObject_HEAD
-  EventHotKeyRef ob_itself;
-} EventHotKeyRefObject;
-
-static PyObject
-*StreamVision_HotKeyAddress(PyObject *self, PyObject *args) {
-  PyObject *v;
-  if (!PyArg_ParseTuple(args, "O", &v))
-    return NULL;
-  if (!EventHotKeyRef_Check(v)) {
-    PyErr_SetString(PyExc_TypeError, "_CarbonEvt.EventHotKeyRef required");
-    return NULL;
-  }
-  return PyInt_FromLong((int)((EventHotKeyRefObject *)v)->ob_itself);
-}
-
-static PyMethodDef _StreamVisionmodule_methods[] = {
-  {"HotKeyAddress", StreamVision_HotKeyAddress, METH_VARARGS,
-   "HotKeyAddress(_CarbonEvt.EventHotKeyRef) -> integer\n\n"
-   "Return the address of the underlying EventHotKeyRef (passed as data1 in hot key NSEvents)."},
-  {NULL, NULL, 0, NULL}
-};
-
-PyMODINIT_FUNC
-init_StreamVision(void) {
-  (void)Py_InitModule("_StreamVision", _StreamVisionmodule_methods);
-}
Index: /trunk/StreamVision/setup.py
===================================================================
--- /trunk/StreamVision/setup.py	(revision 210)
+++ /trunk/StreamVision/setup.py	(revision 211)
@@ -17,6 +17,6 @@
 setup(
     app=["StreamVision.py"],
-    ext_modules=[Extension('_StreamVision',
-                           sources=['_StreamVisionmodule.c'],
+    ext_modules=[Extension('HotKey',
+                           sources=['HotKeymodule.c'],
                            extra_link_args=['-framework', 'Carbon'])],
     data_files=["English.lproj"],
