Index: /platform/quicksilver/TwitterPlugin/Info.plist
===================================================================
--- /platform/quicksilver/TwitterPlugin/Info.plist (revision 7002)
+++ /platform/quicksilver/TwitterPlugin/Info.plist (revision 7005)
@@ -16,5 +16,5 @@
 	<string>BNDL</string>
 	<key>CFBundleVersion</key>
-	<string>9F</string>
+	<string>B7</string>
 	<key>NSPrincipalClass</key>
 	<string>RCLoader</string>
@@ -63,5 +63,5 @@
 		<array/>
 	</dict>
-	<key>QSPresetAdditionsTemplate</key>
+	<key>QSPresetAdditions</key>
 	<array>
 		<dict>
@@ -69,5 +69,5 @@
 			<string>QSPresetTwitterPlugin</string>
 			<key>name</key>
-			<string>TwitterPlugin</string>
+			<string>Twitter following</string>
 			<key>source</key>
 			<string>TwitterPluginSource</string>
Index: /platform/quicksilver/TwitterPlugin/TwitterPluginSource.rb
===================================================================
--- /platform/quicksilver/TwitterPlugin/TwitterPluginSource.rb (revision 7005)
+++ /platform/quicksilver/TwitterPlugin/TwitterPluginSource.rb (revision 7005)
@@ -0,0 +1,71 @@
+require 'osx/cocoa'
+require 'open-uri'
+require 'rubygems'
+require 'json'
+
+class TwitterPluginSource < OSX::QSObjectSource
+  @friends = []
+
+  def indexIsValidFromDate_forEntry(index, entry)
+    true
+  end
+
+  def iconForEntry(dict)
+    Shared.logger.info(dict.class.to_s)
+    nil
+  end
+
+=begin
+  - (NSString *)identifierForObject:(id <QSObject>)object{
+        return nil;
+    }
+=end
+
+  def name_pass
+    screen_name.to_s + ':' + password
+  end
+
+  def objectsForEntry(entry)
+    dict = OSX::NSUserDefaultsController.sharedUserDefaultsController.values;
+    screen_name = dict.valueForKey("TwitterPreference.screenName")
+    password    = dict.valueForKey("TwitterPreference.password")
+
+    url = 'http://' + screen_name + ':' + password +
+          '@twitter.com/statuses/friends/' + screen_name +
+          '.json'
+    Shared.logger.info(url)
+
+    @friends = []
+    objects = []
+    begin
+      @friends = JSON.parse(open(url).read)
+      @friends.each do |j|
+        obj = OSX::QSObject.objectWithName(j['name'])
+        obj.setObject_forType('', 'TwitterPluginType')
+        obj.setPrimaryType('TwitterPluginType')
+        objects.push(obj)
+      end
+    end
+    objects
+  end
+
+  # Object Handler Methods
+
+  def setQuickIconForObject(object)
+    # An icon that is either already in memory or easy to load
+    if @friends
+      her = @friends.find {|x| x['name'] == object.name.to_s}
+      object.setIcon(OSX::NSImage.alloc.initWithContentsOfURL(OSX::NSURL.URLWithString(her['profile_image_url'])))
+    end
+  end
+
+=begin
+- (BOOL)loadIconForObject:(QSObject *)object{
+        return NO;
+    id data=[object objectForType:kTwitterPluginType];
+        [object setIcon:nil];
+    return YES;
+}
+*/
+=end
+end
Index: /platform/quicksilver/TwitterPlugin/TwitterPlugin.xcodeproj/project.pbxproj
===================================================================
--- /platform/quicksilver/TwitterPlugin/TwitterPlugin.xcodeproj/project.pbxproj (revision 7002)
+++ /platform/quicksilver/TwitterPlugin/TwitterPlugin.xcodeproj/project.pbxproj (revision 7005)
@@ -15,7 +15,7 @@
 		861673880D6AB5C500767E2A /* RCLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 861673840D6AB5C500767E2A /* RCLoader.m */; };
 		861673890D6AB5C500767E2A /* shared.rb in Resources */ = {isa = PBXBuildFile; fileRef = 861673850D6AB5C500767E2A /* shared.rb */; };
-		8616738C0D6AB69F00767E2A /* TwitterPluginSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BBF581830B1D9DC3003CFF55 /* TwitterPluginSource.m */; };
 		8618D1180D465B01003A880D /* girl_square.icns in Resources */ = {isa = PBXBuildFile; fileRef = 8618D1170D465B01003A880D /* girl_square.icns */; };
 		866641FF0D6B0A0500BD4B98 /* QSEffects.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7FFA8E9C0816CCCA00A858CD /* QSEffects.framework */; };
+		86735EC40D6C7E6D008FCDC9 /* TwitterPluginSource.rb in Resources */ = {isa = PBXBuildFile; fileRef = 86735EC30D6C7E6D008FCDC9 /* TwitterPluginSource.rb */; };
 		869C3FC60D0EF761005B7175 /* TwitterPrefPane.nib in Resources */ = {isa = PBXBuildFile; fileRef = 869C3FC50D0EF761005B7175 /* TwitterPrefPane.nib */; };
 		869C3FCA0D0EF7C4005B7175 /* TwitterPrefPane.m in Sources */ = {isa = PBXBuildFile; fileRef = 869C3FC90D0EF7C4005B7175 /* TwitterPrefPane.m */; };
@@ -39,4 +39,5 @@
 		861673850D6AB5C500767E2A /* shared.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = shared.rb; sourceTree = "<group>"; };
 		8618D1170D465B01003A880D /* girl_square.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = girl_square.icns; sourceTree = "<group>"; };
+		86735EC30D6C7E6D008FCDC9 /* TwitterPluginSource.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = TwitterPluginSource.rb; sourceTree = "<group>"; };
 		869C3FC50D0EF761005B7175 /* TwitterPrefPane.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = TwitterPrefPane.nib; sourceTree = "<group>"; };
 		869C3FC80D0EF7C4005B7175 /* TwitterPrefPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TwitterPrefPane.h; sourceTree = "<group>"; };
@@ -46,6 +47,4 @@
 		BBF5817A0B1D9D84003CFF55 /* TwitterPluginAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TwitterPluginAction.h; sourceTree = "<group>"; };
 		BBF5817B0B1D9D84003CFF55 /* TwitterPluginAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TwitterPluginAction.m; sourceTree = "<group>"; };
-		BBF581820B1D9DC3003CFF55 /* TwitterPluginSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TwitterPluginSource.h; sourceTree = "<group>"; };
-		BBF581830B1D9DC3003CFF55 /* TwitterPluginSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TwitterPluginSource.m; sourceTree = "<group>"; };
 		DD92D38A0106425D02CA0E72 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
 		E1EAB045068128A200774DFF /* TwitterPlugin.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = TwitterPlugin.m; sourceTree = "<group>"; };
@@ -117,4 +116,5 @@
 			isa = PBXGroup;
 			children = (
+				86735EC30D6C7E6D008FCDC9 /* TwitterPluginSource.rb */,
 				861673810D6AB5C500767E2A /* load_ruby.rb */,
 				861673820D6AB5C500767E2A /* qs_action.rb */,
@@ -126,6 +126,4 @@
 				E1EAB047068128A800774DFF /* TwitterPlugin.h */,
 				E1EAB045068128A200774DFF /* TwitterPlugin.m */,
-				BBF581820B1D9DC3003CFF55 /* TwitterPluginSource.h */,
-				BBF581830B1D9DC3003CFF55 /* TwitterPluginSource.m */,
 				869C3FC80D0EF7C4005B7175 /* TwitterPrefPane.h */,
 				869C3FC90D0EF7C4005B7175 /* TwitterPrefPane.m */,
@@ -200,4 +198,5 @@
 				861673870D6AB5C500767E2A /* qs_action.rb in Resources */,
 				861673890D6AB5C500767E2A /* shared.rb in Resources */,
+				86735EC40D6C7E6D008FCDC9 /* TwitterPluginSource.rb in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -228,5 +227,4 @@
 				869C3FCA0D0EF7C4005B7175 /* TwitterPrefPane.m in Sources */,
 				861673880D6AB5C500767E2A /* RCLoader.m in Sources */,
-				8616738C0D6AB69F00767E2A /* TwitterPluginSource.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
Index: /atform/quicksilver/TwitterPlugin/TwitterPluginSource.h
===================================================================
--- /platform/quicksilver/TwitterPlugin/TwitterPluginSource.h (revision 3067)
+++  (revision )
@@ -1,17 +1,0 @@
-//
-//  TwitterPluginSource.h
-//  TwitterPlugin
-//
-//  Created by Motohiro Takayama on 12/12/07.
-//  Copyright __MyCompanyName__ 2007. All rights reserved.
-//
-
-#import <QSCore/QSObjectSource.h>
-
-#define TwitterPluginType @"TwitterPluginType"
-
-@interface TwitterPluginSource : QSObjectSource
-{
-}
-@end
-
Index: /atform/quicksilver/TwitterPlugin/TwitterPluginSource.m
===================================================================
--- /platform/quicksilver/TwitterPlugin/TwitterPluginSource.m (revision 3067)
+++  (revision )
@@ -1,55 +1,0 @@
-//
-//  TwitterPluginSource.m
-//  TwitterPlugin
-//
-//  Created by Motohiro Takayama on 12/12/07.
-//  Copyright __MyCompanyName__ 2007. All rights reserved.
-//
-
-#import "TwitterPluginSource.h"
-#import <QSCore/QSObject.h>
-
-
-@implementation TwitterPluginSource
-- (BOOL)indexIsValidFromDate:(NSDate *)indexDate forEntry:(NSDictionary *)theEntry{
-    return YES;
-}
-
-- (NSImage *) iconForEntry:(NSDictionary *)dict{
-    return nil;
-}
-
-
-// Return a unique identifier for an object (if you haven't assigned one before)
-//- (NSString *)identifierForObject:(id <QSObject>)object{
-//    return nil;
-//}
-
-- (NSArray *) objectsForEntry:(NSDictionary *)theEntry{
-    NSMutableArray *objects=[NSMutableArray arrayWithCapacity:1];
-    QSObject *newObject;
-	
-	newObject=[QSObject objectWithName:@"TestObject"];
-	[newObject setObject:@"" forType:TwitterPluginType];
-	[newObject setPrimaryType:TwitterPluginType];
-	[objects addObject:newObject];
-  
-    return objects;
-    
-}
-
-
-// Object Handler Methods
-
-/*
-- (void)setQuickIconForObject:(QSObject *)object{
-    [object setIcon:nil]; // An icon that is either already in memory or easy to load
-}
-- (BOOL)loadIconForObject:(QSObject *)object{
-	return NO;
-    id data=[object objectForType:kTwitterPluginType];
-	[object setIcon:nil];
-    return YES;
-}
-*/
-@end
