diff --git a/identica-mode.el b/identica-mode.el
index c3794f9..4f05058 100644
--- a/identica-mode.el
+++ b/identica-mode.el
@@ -488,11 +488,101 @@
       (error
        (message "Failure: HTTP GET") nil))))
 
+(defvar twittering-http-buffer "*twittering-http-buffer*")
+(defun twittering-get-or-generate-buffer (buffer)
+  (if (bufferp buffer)
+      (if (buffer-live-p buffer)
+	  buffer
+	(generate-new-buffer (buffer-name buffer)))
+    (if (stringp buffer)
+	(or (get-buffer buffer)
+	    (generate-new-buffer buffer)))))
+
+(defun twittering-http-buffer ()
+  (twittering-get-or-generate-buffer twittering-http-buffer))
+
+(defun twittering-get-password ()
+  (or twittering-password
+      (setq twittering-password (read-passwd "twittering-mode: "))))
+
+(defun twittering-http-get (method-class method &optional parameters sentinel)
+  (if (null sentinel) (setq sentinel 'twittering-http-get-default-sentinel))
+
+  ;; clear the buffer
+  (save-excursion
+    (set-buffer (twittering-http-buffer))
+    (erase-buffer))
+
+  (let (proc server port
+	     (proxy-user identica-proxy-user)
+	     (proxy-password identica-proxy-password))
+    (condition-case nil
+	(progn
+	  (if (and twittering-proxy-use twittering-proxy-server)
+	      (setq server twittering-proxy-server
+		    port (if (integerp twittering-proxy-port)
+			     (int-to-string twittering-proxy-port)
+			   twittering-proxy-port))
+	    (setq server "twitter.com"
+		  port "80"))
+	  (setq proc
+		(open-network-stream
+		 "twitter-network-connection-process" (twittering-http-buffer)
+		 server (string-to-number port)))
+	  (set-process-sentinel proc sentinel)
+	  (process-send-string
+	   proc
+	   (let ((nl "\r\n")
+		 request)
+	     (setq request
+		   (concat "GET https://twitter.com/" method-class "/" method
+			   ".xml"
+			   (when parameters
+			     (concat "?"
+				     (mapconcat
+				      (lambda (param-pair)
+					(format "%s=%s"
+						(identica-percent-encode (car
+									    param-pair))
+						(identica-percent-encode (cdr
+									    param-pair))))
+				      parameters
+				      "&")))
+			   " HTTP/1.1" nl
+			   "Host: twitter.com" nl
+			   "User-Agent: " (twittering-user-agent) nl
+			   "Authorization: Basic "
+			   (base64-encode-string
+			    (concat twittering-username ":"
+				    (twittering-get-password)))
+			   nl
+			   "Accept: text/xml"
+			   ",application/xml"
+			   ",application/xhtml+xml"
+			   ",application/html;q=0.9"
+			   ",text/plain;q=0.8"
+			   ",image/png,*/*;q=0.5" nl
+			   "Accept-Charset: utf-8;q=0.7,*;q=0.7" nl
+			   (when twittering-proxy-use
+			     "Proxy-Connection: Keep-Alive" nl
+			     (when (and proxy-user proxy-password)
+			       (concat
+				"Proxy-Authorization: Basic "
+				(base64-encode-string
+				 (concat proxy-user ":"
+					 proxy-password))
+				nl)))
+			   nl))
+	     (debug-print (concat "GET Request\n" request))
+	     request)))
+      (error
+       (message "Failure: HTTP GET") nil))))
+
+
 (defun identica-http-get-default-sentinel (proc stat &optional suc-msg)
   (let ((header (identica-get-response-header))
 	(body (identica-get-response-body))
-	(status nil)
-	)
+	(status nil))
     (if (string-match "HTTP/1\.[01] \\([A-Za-z0-9 ]+\\)\r?\n" header)
 	(progn
 	  (setq status (match-string-no-properties 1 header))
@@ -507,8 +597,28 @@
 	    (when identica-display-success-messages
 	      (message (if suc-msg suc-msg "Success: Get."))))
 	   (t (message status))))
-      (message "Failure: Bad http response.")))
-  )
+      (message "Failure: Bad http response."))))
+
+
+(defun twittering-http-get-default-sentinel (proc stat &optional suc-msg)
+  (let ((header (identica-get-response-header (twittering-http-buffer)))
+	(body (identica-get-response-body (twittering-http-buffer)))
+	(status nil))
+    (if (string-match "HTTP/1\.[01] \\([A-Za-z0-9 ]+\\)\r?\n" header)
+	(progn
+	  (setq status (match-string-no-properties 1 header))
+	  (case-string
+	   status
+	   (("200 OK")
+	    (mapcar
+	     #'identica-cache-status-datum
+	     (reverse (identica-xmltree-to-status
+		       body)))
+	    (identica-render-timeline)
+	    (when identica-display-success-messages
+	      (message (if suc-msg suc-msg "Success: Get."))))
+	   (t (message status))))
+      (message "Twitter Failure: Bad http response."))))
 
 (defun identica-render-timeline ()
   (with-current-buffer (identica-buffer)
@@ -528,8 +638,7 @@
       (setq buffer-read-only t)
       (debug-print (current-buffer))
       (goto-char (+ point (if identica-scroll-mode (- (point-max) end) 0))))
-      (identica-set-mode-string)
-    ))
+      (identica-set-mode-string)))
 
 (defun identica-format-status (status format-str)
   (flet ((attr (key)
@@ -550,8 +659,7 @@
 		    (set-text-properties
 		     1 2 `(display ,(create-image (concat identica-tmp-dir "/" filename)))
 		     icon-string)
-		    icon-string)
-		  )))))
+		    icon-string))))))
     (let ((cursor 0)
 	  (result ())
 	  c
@@ -754,10 +862,10 @@ PARAMETERS is alist of URI parameters. ex) ((\"mode\" . \"view\") (\"page\" . \"
     (set-buffer buffer)
     (identica-clean-response-body)
     (let ((content (buffer-string)))
+      (goto-char (point-min))
       (xml-parse-region (+ (string-match "<\\?xml" content)
 			     (length (match-string 0 content)))
-                        (point-max))
-      )))
+                        (point-max)))))
 
 (defun identica-clean-weird-chars (&optional buffer)
 ;;(if (null buffer) (setq buffer (identica-http-buffer)))
@@ -1073,16 +1181,18 @@ If STATUS-DATUM is already in DATA-VAR, return nil. If not, return t."
     (if (not buf)
 	(identica-stop)
        (if (not identica-timeline-last-update)
-	   (identica-http-get "statuses" identica-method)
+	   (progn
+	     (identica-http-get "statuses" identica-method)
+	     (twittering-http-get "status" identica-method))
 	 (let* ((system-time-locale "C")
 		(since
 		  (identica-global-strftime
 		   "%a, %d %b %Y %H:%M:%S GMT"
 		   identica-timeline-last-update)))
 	   (identica-http-get "statuses" identica-method
-			       `(("since" . ,since))
-				)))))
-
+			       `(("since" . ,since)))
+	   (twittering-http-get "statuses" identica-method
+				`(("since" . ,since)))))))
   (if identica-icon-mode
       (if identica-image-stack
 	  (let ((proc
@@ -1100,8 +1210,8 @@ If STATUS-DATUM is already in DATA-VAR, return nil. If not, return t."
 	     (lambda (proc stat)
 	       (clear-image-cache)
 	       (save-excursion
-		 (set-buffer (identica-wget-buffer))
-		 )))))))
+		 (set-buffer (identica-wget-buffer)))))))))
+
 (defun identica-friends-timeline ()
   (interactive)
   (setq identica-method "friends_timeline")
@@ -1143,15 +1253,17 @@ If STATUS-DATUM is already in DATA-VAR, return nil. If not, return t."
   (if (not identica-last-timeline-retrieved)
       (setq identica-last-timeline-retrieved identica-method))
   (if (not identica-timeline-last-update)
-      (identica-http-get "statuses" identica-last-timeline-retrieved)
+      (progn (identica-http-get "statuses" identica-last-timeline-retrieved)
+	     (twittering-http-get "statuses" identica-last-timeline-retrieved))
     (let* ((system-time-locale "C")
 	   (since
 	     (identica-global-strftime
 	      "%a, %d %b %Y %H:%M:%S GMT"
 	      identica-timeline-last-update)))
       (identica-http-get "statuses" identica-last-timeline-retrieved
-			    `(("since" . ,since))
-			   ))))
+			    `(("since" . ,since)))
+      (twittering-http-get "statuses" identica-last-timeline-retrieved
+			   `(("since" . ,since))))))
 
 (defun identica-click ()
   (interactive)
