Search Site:

About

Linux

Printers?

Programming

Windows?

Download

Skins

Edit - To Do - AllRecentChanges

Recent Changes Printable View Page History Edit Page

Printers.QL550LabelPrinterProtocol History

Hide minor edits - Show changes to markup

Friday 01 June 2007, at 02:39 GMT+8 by 192.168.0.101 -
Changed line 3 from:

Printing Protocol description for the PT-9500PC - NEW 01-JUN-2007

to:

Printing Protocol description for the PT-9500PC - NEW 01-JUN-2007

Changed lines 6-8 from:
to:
Friday 01 June 2007, at 02:38 GMT+8 by 192.168.0.101 -
Changed line 3 from:

Printing Protocol description for the PT-9500PC - NEW (01-JUN-2007)

to:

Printing Protocol description for the PT-9500PC - NEW 01-JUN-2007

Changed line 10 from:

Printing Protocol description for the QL-500/QL-550 - v1.4 (06-FEB-2007)

to:

Printing Protocol description for the QL-500/QL-550 - v1.4 (06-FEB-2007)

Friday 01 June 2007, at 02:37 GMT+8 by 192.168.0.101 -
Changed lines 2-3 from:

http:/pub/images/QL550LabelPrinter01.jpg

Printing Protocol description for the PT-9500PC

to:

http:/pub/images/pt9500pc.jpg

Printing Protocol description for the PT-9500PC - NEW (01-JUN-2007)

Changed lines 8-10 from:
  • NEW:

Printing Protocol description for the QL-500/QL-550 - v1.4 (2007-02-06)

to:

http:/pub/images/QL550LabelPrinter01.jpg

Printing Protocol description for the QL-500/QL-550 - v1.4 (06-FEB-2007)

Friday 01 June 2007, at 02:32 GMT+8 by Renaud - Added documents about the PT9500 printer
Changed line 1 from:

(:description Collective reverse-engineering findings on the protocol used by the Brother QL500/QL550 USB label printers :)

to:

(:description Collective reverse-engineering findings on the protocol used by the Brother QL500/QL550 and PT9500PC label printers :)

Added lines 3-9:

Printing Protocol description for the PT-9500PC

Cristian Georgescu kindly submitted a couple of very useful documents that describe in detail the protocols used by the Brother PT-9500PC label printer.
That protocol is very similar to the one used by the QL500/QL550 below, so anyone looking at implementing a driver or a hardware solution might want to have a close look at these documents:

Tuesday 06 February 2007, at 10:54 GMT+8 by Renaud - added missing information supplied by Arne Ljung
Added line 1:

(:description Collective reverse-engineering findings on the protocol used by the Brother QL500/QL550 USB label printers :)

Changed line 3 from:

Printing Protocol description for the QL-500/QL-550 - v1.3 (2006-02-01)

to:

Printing Protocol description for the QL-500/QL-550 - v1.4 (2007-02-06)

Changed lines 7-8 from:

I did this to be able to print labels on this printer from Linux. See QL550LabelPrinter for more information on this project.

to:

I did this to be able to print labels on this printer from Linux. See QL550LabelPrinter for more information on this project.
The purpose of collecting these data is to ensure interroperabilty between this printer and Operating Systems unsupported by the manufacturer.

Changed line 123 from:
  • 80 20 42 30 4f 30 00 00 00 00 3e 0a 00 00 15 00\\
to:
  • 80 20 42 30 4f 30 00 00 00 00 LW MT 00 00 RB 00\\
Changed lines 125-126 from:
  • 80 20 42 30 4f 30 00 00 00 P1 3e 0a 00 00 15 00
    00 00 P2 01 00 00 00 00 00 00 00 00 00 00 00 00\\
to:
  • 80 20 42 30 4f 30 00 00 00 P1 LW MT 00 00 RB 00
    00 LL P2 01 00 00 00 00 00 00 00 00 00 00 00 00
    LW/LL/MT = Label Width/Length/Media Type (see above)
    RB = Roll Base encoding (see below)\\
Changed lines 132-134 from:

80 20 42 30 4f 30 00 00 00 00 3e 0a 00 00 15 00
00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00

to:

80 20 42 30 4f 30 00 00 00 00 LW MT 00 00 RB 00
00 LL 06 00 00 00 00 00 00 00 00 00 00 00 00 00

Changed line 137 from:

(:table border=1 cellpadding=5 cellspacing=0 bgcolor=#eee:)

to:

(:table border=1 cellpadding=5 cellspacing=0 bgcolor=#eeeeee:)

Changed line 164 from:

Thanks to Ralf Muschall and Arne John Glenstrup who have helped with their remarks, corrections and additions.

to:

Thanks to Ralf Muschall, Arne John Glenstrup and Arne Ljung who have helped with their remarks, corrections and additions.

Friday 03 February 2006, at 01:18 GMT+8 by Renaud -
Changed line 132 from:

Each roll base has a number of holes encoding its model number (a depressed pin sets the bit to 1):

to:

Each roll base has a number of holes encoding its model number (a depressed pin in the printer sets the bit to 1):

Thursday 02 February 2006, at 01:42 GMT+8 by Renaud -
Changed lines 89-90 from:

Note: Mirrorring must be done is software as the printer does not perform it in hardware.

to:

Note: Mirrorring must be done in software as the printer hardware does not perform it automatically.

Wednesday 01 February 2006, at 14:01 GMT+8 by Renaud -
Changed line 132 from:

Each roll base has a number of holes encoding its model number:

to:

Each roll base has a number of holes encoding its model number (a depressed pin sets the bit to 1):

Wednesday 01 February 2006, at 13:52 GMT+8 by Renaud -
Changed lines 2-4 from:

Printing Protocol description for the QL-500/QL-550 - v1.2 (2005-05-17)

These findings are incomplete and they are probably erroneous in many ways. They are the fruit of my personnal trials on the Brother P-Touch QL-500/QL-550 label printers and did not involve Brother® at all. If you have information about the protocol, please let me know: (:email etc@nkadesign.com:).

to:

Printing Protocol description for the QL-500/QL-550 - v1.3 (2006-02-01)

These findings are incomplete and they are probably erroneous in many ways. They are the fruit of my and other contributor's trials on the Brother P-Touch QL-500/QL-550 label printers and did not involve Brother® at all. If you have information about the protocol, please let me know: (:email etc@nkadesign.com:).

Changed lines 65-70 from:
  • 14 (0Eh): ID Label hardcoded ID set by the base of the roll holder.
    - 01 : 29x90mm white paper labels - Ref DK-11201
    - 03 : 62x29mm white paper labels - Ref DK-11209
    - 05 : 17x54mm white paper labels - Ref DK-11204
    - 15 : 62mm continuous white paper roll - Ref DK-22205
    - 19 : 62mm continuous clear film roll - Ref DK-22113
to:
  • 14 (0Eh): ID Label hardcoded ID set by the base of the roll holder
    (see section Roll base encoding below)
Changed lines 88-89 from:

LB HB = size of margin in 1/300inch

to:

LB HB = size of margin in 1/300inch
Note: Mirrorring must be done is software as the printer does not perform it in hardware.

Changed line 95 from:

PX = binary representation of the line image: each bit set to 1 prints a dot.\\

to:

PX = binary representation of the line image: each bit set to 1 prints a dot. Bits are printed right-to-left, with bit 7 rightmost.\\

Deleted line 96:

PX = binary representation of the line image: each bit set to 1 prints a dot.\\

Added lines 130-156:

Roll base encoding
Each roll base has a number of holes encoding its model number: (:table border=1 cellpadding=5 cellspacing=0 bgcolor=#eee:) (:cellnr:)

4   3
    2
    1
    0

(:tableend:) List of kown label types and their corresponding code (bit 4 = 0):
- 01 : 29x90mm white paper labels - Ref DK-11201
- 02 : 38x90mm white paper labels - Ref DK-11208
- 03 : 62x29mm white paper labels - Ref DK-11209
- 04 : 62x100mm white paper labels - Ref DK-11202
- 05 : 17x54mm white paper labels - Ref DK-11204
- 06 : 17x87mm white paper labels - Ref DK-11203
- 07 : 58x58 CD/DVD film labels - Ref DK-11207
Continuous rolls (bit 4 = 1):
- 14 : 29mm continuous white paper or film(?) roll - Ref DK-22210 or 22211
- 15 : 62mm continuous white paper roll - Ref DK-22205
- 16 : 29mm continuous white film or paper(?) roll - Ref DK-22211 or 22210
- 17 : 62mm continuous white or yellow (?) film roll - Ref DK-22206 or DK-22212
- 18 : 62mm continuous yellow or white (?) film roll - Ref DK-22212 or DK-22206
- 19 : 62mm continuous clear film roll - Ref DK-22113
- 1a : 12mm continuous white paper roll - Ref DK-22214

Changed line 160 from:

Thanks to Ralf Muschall who has helped with his remarks and corrections.

to:

Thanks to Ralf Muschall and Arne John Glenstrup who have helped with their remarks, corrections and additions.

Tuesday 20 December 2005, at 02:22 GMT+8 by Renaud -
Changed lines 2-4 from:

Printing Protocol description for the QL-550 - v1.2 (2005-05-17)

These findings are incomplete and they are probably erroneous in many ways. They are the fruit of my personnal trials on the Brother P-Touch QL-550 label printer and did not involve Brother® at all. If you have information about the protocol, please let me know: (:email etc@nkadesign.com:).

to:

Printing Protocol description for the QL-500/QL-550 - v1.2 (2005-05-17)

These findings are incomplete and they are probably erroneous in many ways. They are the fruit of my personnal trials on the Brother P-Touch QL-500/QL-550 label printers and did not involve Brother® at all. If you have information about the protocol, please let me know: (:email etc@nkadesign.com:).

Changed line 91 from:

PM = A logical OR combination of 80 for Mirror printing and 40 for Auto Cut after the label is printed, 00 otherwise.\\

to:

PM = A logical OR combination of 80 for Mirror printing and 40 for Auto Cut after the label is printed, 00 otherwise (only for QL550).\\

Tuesday 20 December 2005, at 02:20 GMT+8 by Renaud -
Changed lines 3-4 from:

These findings are incomplete and they are probably erroneous in many ways. They are the fruit of my personnal trials on the Brother P-Touch QL-550 label printer and did not involve Brother® at all. If you have information about the protocol, please let me know: (:email:).

to:

These findings are incomplete and they are probably erroneous in many ways. They are the fruit of my personnal trials on the Brother P-Touch QL-550 label printer and did not involve Brother® at all. If you have information about the protocol, please let me know: (:email etc@nkadesign.com:).

Monday 04 July 2005, at 04:26 GMT+8 by testert -
Changed lines 137-138 from:

Thanks to Ralf Muschall who has helped with his remarks and corrections.

to:

Thanks to Ralf Muschall who has helped with his remarks and corrections. (:comments:)

Saturday 02 July 2005, at 05:28 GMT+8 by Renaud -
Changed line 137 from:

Thanks to Ralph Muschall who has helped with his remarks and corrections.

to:

Thanks to Ralf Muschall who has helped with his remarks and corrections.

Tuesday 17 May 2005, at 13:17 GMT+8 by Renaud -
Added line 1:

http:/pub/images/QL550LabelPrinter01.jpg

Monday 16 May 2005, at 16:58 GMT+8 by Renaud -
Changed line 1 from:

Printing Protocol description for the QL-550 - v1.1 (2005-02-07)

to:

Printing Protocol description for the QL-550 - v1.2 (2005-05-17)

Changed lines 40-41 from:

Findings flagged with ?? is uncertain and need confirmation.

to:

Findings flagged with ?? are uncertain and need confirmation.

Changed line 71 from:

- 00 : continuous roll\\

to:

- 00 : Continuous roll\\

Changed line 80 from:

- 01 : Buffer busy ??

to:

- 01 : Buffer busy ??\\

Monday 16 May 2005, at 16:55 GMT+8 by Renaud -
Changed lines 39-40 from:

Numbers in block are in Hexadecimal.

to:

Numbers in block are in Hexadecimal.
Findings flagged with ?? is uncertain and need confirmation.

Changed lines 81-82 from:
to:

- 04 : Undefined ??

Changed line 98 from:

The packet is always 90 bytes (5Ah) as this printer model is 62mm wide (480 dots at 300dpi).\\

to:

The packet is always 90 bytes (5Ah) as this printer model is 62mm wide (720 dots at 300dpi).\\

Changed lines 134-136 from:

The data on this page is given without warranty and is for information only.

to:

The data on this page is given without warranty and is for information only.


Thanks to Ralph Muschall who has helped with his remarks and corrections.

Sunday 15 May 2005, at 13:19 GMT+8 by Renaud -
Changed lines 5-6 from:

I did this to be able to print labels on this printer from Linux. See QL550LabelPrinter for more information on this project.

to:

I did this to be able to print labels on this printer from Linux. See QL550LabelPrinter for more information on this project.

Sunday 15 May 2005, at 11:30 GMT+8 by Renaud -
Changed line 49 from:

Returns a 32 bytes status:

to:

Returns a 32 bytes status:\\

Changed line 88 from:

PM = A logical OR combination of 80 for Mirror printing and 40 for 'Auto Cut'' after the label is printed, 00 otherwise.\\

to:

PM = A logical OR combination of 80 for Mirror printing and 40 for Auto Cut after the label is printed, 00 otherwise.\\

Sunday 15 May 2005, at 10:10 GMT+8 by Renaud -
Changed lines 1-3 from:

Printing Protocol description for the QL-550 - v1 (2004-12-28)

These findings are incomplete and they are probably erroneous in many ways. They are the fruit of my personnal trials on the Brother P-Touch QL-550 label printer and did not involve Brother® at all. If you have information about the protocol, please let me know.

to:

Printing Protocol description for the QL-550 - v1.1 (2005-02-07)

These findings are incomplete and they are probably erroneous in many ways. They are the fruit of my personnal trials on the Brother P-Touch QL-550 label printer and did not involve Brother® at all. If you have information about the protocol, please let me know: (:email:).

Added lines 7-37:

Reading / Writting

Data is sent and received through the USB interface. Need direct access to USB block write/read, with libusb on Windows/Linux platforms or on Linux only, through simple access to the /dev/usb/lpX device.

Sequence of calls for 1 label jobs:

  1. Reset
  2. Init
  3. Get Printer Status -> returns 32 byte status
  4. Init
  5. Set Page Length
  6. Set Side Margin
  7. Image data -> returns 3x32 byte status
  8. Job Completion
  9. Init

Sequence of calls for 2 or more labels jobs:

  1. Reset
  2. Init
  3. Get Printer Status -> returns 32 byte status
  4. Init
  5. Set Page Length
  6. Set Side Margin
  7. Image data -> returns 3x32 byte status
  8. Page completion
  9. Set Page Length
  10. Set Side Margin
  11. Image data -> returns 3x32 byte status
  12. Job Completion
  13. Init
Changed lines 49-63 from:

Returns one of the following 32 bytes status:

  • OK
    80 20 42 30 4f 30 00 00 00 00 LW 0a 00 00 15 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    LW = Label roll width (in mm), eg 3E=62mm wide roll
  • No cartidge loaded
    80 20 42 30 4f 30 00 00 00 10 00 00 00 00 00 00
    00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00
  • Paper not loaded (Paper Loading lever is up)
    80 20 42 30 4f 30 00 00 00 10 3e 0a 00 00 15 00
    00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00
  • Paper Out (remains after an unsuccessful print)
    80 20 42 30 4f 30 00 00 00 40 3e 0a 00 00 15 00
    00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00
to:

Returns a 32 bytes status: 80 20 42 30 4f 30 00 00 00 EC LW MT 00 00 ID 00
00 LL SK BS 00 00 00 00 00 00 00 00 00 00 00 00
Each byte address in the status is detailed as follow:

  • 09 (09h): EC Error Code (SK flag = 02)
    - 00 : No Error
    - 10 : Cover Open
    - 40 : Paper Out
  • 10 (0Ah): LW Label Width in mm
    - 1D : 29mm
    - 3E : 62mm
  • 11 (0Bh): MT Media Type ??
    - 0A : White Paper Tape
    - 0B : Standard Address Labels
  • 14 (0Eh): ID Label hardcoded ID set by the base of the roll holder.
    - 01 : 29x90mm white paper labels - Ref DK-11201
    - 03 : 62x29mm white paper labels - Ref DK-11209
    - 05 : 17x54mm white paper labels - Ref DK-11204
    - 15 : 62mm continuous white paper roll - Ref DK-22205
    - 19 : 62mm continuous clear film roll - Ref DK-22113
  • 17 (11h): LL Label Length in mm
    - 00 : continuous roll
    - 5a : 90mm long labels
  • 18 (12h): SK Status Kind
    - 00 : Reply to Status Request
    - 01 : Printing completion
    - 02 : Error, refer to EC byte for more details
    - 06 : Buffer status (read with BS)
  • 19 (13h): BS Buffer Status ?? (only when SK=06)
    - 00 : Buffer empty ??
    - 01 : Buffer busy ??
Changed lines 82-84 from:

1b 69 7a 00 0a 3e 00 LB HB 00 00 00 00
LB HB = size of page in 1/300inch

to:

1b 69 7a 00 MT LW LL LB HB 00 00 00 00
MT, LW, LL are identical to those returned by the Get Printer Status.
LB HB = length of page in 1/300inch (least significant byte first).

Changed lines 87-91 from:

1b 69 4d PC
PC = 40 to cut label after it is printed, 00 otherwise 1b 69 64 LB HB
LB HB = size of margin in 1/300inch

to:

1b 69 4d PM 1b 69 64 LB HB
PM = A logical OR combination of 80 for Mirror printing and 40 for 'Auto Cut'' after the label is printed, 00 otherwise.
LB HB = size of margin in 1/300inch

Changed lines 92-95 from:

A single line of 1/300inch
Line Header: 67 00 PL
Line Data : PX x PL
PL = packet length following the header. For 62mm wide rolls PL = 5a (90)\\

to:

Prints a single 1/300inch line.
Line Header: 67 00 5a
Line Data : PX x 90\\

Changed lines 96-97 from:

Note: Under Windows, the first and last 12 bits are set to 0 to create a small margin (1.35mm) along the length of the label. This is however not necessary.
eg: a black line 1/300inch thin:

to:

The packet is always 90 bytes (5Ah) as this printer model is 62mm wide (480 dots at 300dpi).
PX = binary representation of the line image: each bit set to 1 prints a dot.
Note: the first and last 12 bits are set to 0 to create a small margin (1.35mm) along the length of the label.
eg: a black line 1/300inch thin:

Changed lines 106-113 from:
to:

eg: a black line on a 29mm wide label

67 00 5a 00 ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff c0 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00
Changed line 127 from:

P2 = 01 if OK, 02 if Paper Out\\

to:

P2 = 01 if OK, 02 if Paper Out

Deleted lines 130-155:

Sequence of calls for 1 label jobs

  1. Reset
  2. Init
  3. Get Printer Status -> returns 32 byte status
  4. Init
  5. Set Page Length
  6. Set Side Margin
  7. Image data -> returns 3x32 byte status
  8. Job Completion
  9. Init

Sequence of calls for 2 or more labels jobs

  1. Reset
  2. Init
  3. Get Printer Status -> returns 32 byte status
  4. Init
  5. Set Page Length
  6. Set Side Margin
  7. Image data -> returns 3x32 byte status
  8. Page completion
  9. Set Page Length
  10. Set Side Margin
  11. Image data -> returns 3x32 byte status
  12. Job Completion
  13. Init
Sunday 06 February 2005, at 07:45 GMT+8 by Renaud -
Changed lines 1-102 from:

Describe QL550LabelPrinterProtocol here.

to:

Printing Protocol description for the QL-550 - v1 (2004-12-28)

These findings are incomplete and they are probably erroneous in many ways. They are the fruit of my personnal trials on the QL550LabelPrinter Brother P-Touch QL-550? label printer and did not involve Brother® at all. If you have information about the protocol, please let me know.

Purpose

I did this to be able to print labels on this printer from Linux. See QL550LabelPrinter for more information on this project.

Basic commands

Numbers in block are in Hexadecimal.

Reset - 200 bytes
00 x 200

Init - 2 bytes
1b 40

Get Printer Status - 3 bytes
1b 69 53
Returns one of the following 32 bytes status:

  • OK
    80 20 42 30 4f 30 00 00 00 00 LW 0a 00 00 15 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    LW = Label roll width (in mm), eg 3E=62mm wide roll
  • No cartidge loaded
    80 20 42 30 4f 30 00 00 00 10 00 00 00 00 00 00
    00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00
  • Paper not loaded (Paper Loading lever is up)
    80 20 42 30 4f 30 00 00 00 10 3e 0a 00 00 15 00
    00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00
  • Paper Out (remains after an unsuccessful print)
    80 20 42 30 4f 30 00 00 00 40 3e 0a 00 00 15 00
    00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00

Set Page Length (number of lines to be printed) - 13 bytes
1b 69 7a 00 0a 3e 00 LB HB 00 00 00 00
LB HB = size of page in 1/300inch

Set Paper Cut and Side Margin - 9 bytes
1b 69 4d PC
PC = 40 to cut label after it is printed, 00 otherwise 1b 69 64 LB HB
LB HB = size of margin in 1/300inch

Line Image Data - 93 bytes
A single line of 1/300inch
Line Header: 67 00 PL
Line Data : PX x PL
PL = packet length following the header. For 62mm wide rolls PL = 5a (90)
PX = binary representation of the line image: each bit set to 1 prints a dot.
Note: Under Windows, the first and last 12 bits are set to 0 to create a small margin (1.35mm) along the length of the label. This is however not necessary.
eg: a black line 1/300inch thin:

67 00 5a 00 0f ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
ff ff ff ff ff ff ff ff ff ff ff f0 00

Image Data - Line Image Data (93 bytes) x Page length
The set of lines that make the full image to be printed.
Data: Line Image Data x Page Length

Job Completion or Page completion
1a if job is completed (no other labels following in this job)
0c if page is completed (more labels follow)
Both return the following 3x32 byte status sequentially:

  • 80 20 42 30 4f 30 00 00 00 00 3e 0a 00 00 15 00
    00 00 06 01 00 00 00 00 00 00 00 00 00 00 00 00
  • 80 20 42 30 4f 30 00 00 00 P1 3e 0a 00 00 15 00
    00 00 P2 01 00 00 00 00 00 00 00 00 00 00 00 00
    P1 = 00 if OK, 40 if Paper Out
    P2 = 01 if OK, 02 if Paper Out
    * This one is sent only if no error occured in the previous packet
    80 20 42 30 4f 30 00 00 00 00 3e 0a 00 00 15 00
    00 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00

Sequence of calls for 1 label jobs

  1. Reset
  2. Init
  3. Get Printer Status -> returns 32 byte status
  4. Init
  5. Set Page Length
  6. Set Side Margin
  7. Image data -> returns 3x32 byte status
  8. Job Completion
  9. Init

Sequence of calls for 2 or more labels jobs

  1. Reset
  2. Init
  3. Get Printer Status -> returns 32 byte status
  4. Init
  5. Set Page Length
  6. Set Side Margin
  7. Image data -> returns 3x32 byte status
  8. Page completion
  9. Set Page Length
  10. Set Side Margin
  11. Image data -> returns 3x32 byte status
  12. Job Completion
  13. Init

The data on this page is given without warranty and is for information only.

Edit Page - Page History - Printable View - Recent Changes - WikiHelp - Search - RSS -
Page last modified on Friday 01 June 2007, at 02:39 GMT+8 - Viewed 429 times