I am the psychotherapist.  Please, describe your problems.  Each time
you are finished talking, type RET twice.

Well, I'm on the right planet---everyone looks like me!!!

Why do you say that?

Are we THERE yet?!

What makes you believe are you there yet?

..  Now I think I just reached the state of HYPERTENSION that comes
 JUST BEFORE you see the TOTAL at the SAFEWAY CHECKOUT COUNTER!

Is it because comes just before I see the total at the safeway
checkout counter that you came to me?

Do you guys know we just passed thru a BLACK HOLE in space?

Maybe your plans have something to do with this.

I am NOT a nut....

Is it because of your life that you say you are not a nut?

Okay, BARBRA STREISAND, I recognize you now!!  Also EFREM ZIMBALIST,
 JUNIOR!!  And BEAUMONT NEWHALL!!  Everybody into th' BATHROOM!

Earlier you said comes just before I see the total at the safeway
checkout counter?

I know how to get the hostesses released!  Give them their own
 television series!

Is it because of the people you hang around with that you are going
through all this?

I request a weekend in Havana with Phil Silvers!

I don't understand.

Why is it that when you DIE, you can't take your
 HOME ENTERTAINMENT CENTER with you??

Does it bother you that is it that when I die me cannot take my home
entertainment center with me?

HUMAN REPLICAS are inserted into VATS of NUTRITIONAL YEAST...

You mentioned that comes just before I see the total at the safeway
checkout counter?

How's the wife?  Is she at home enjoying capitalism?

How do you reconcile problems at school?

..  I think I'll KILL myself by leaping out of this
 14th STOREY WINDOW while reading ERICA JONG'S poetry!!

This is not a healthy way of thinking.

RELAX!! ... This is gonna be a HEALING EXPERIENCE!!  Besides,
 I work for DING DONGS!

When did you first know that you work for ding dongs?

Yow!  I'm having a quadraphonic sensation of two winos
 alone in a steel mill!

Perhaps this has something to do with any hobbies you have?

Awright, which one of you hid my PENIS ENVY?

Are you sure that is it that when I die me cannot take my home
entertainment center with me?

My EARS are GONE!!

Possibly your sex life are related to this.

It's the land of DONNY AND MARIE as promised in TV GUIDE!

Are you afraid of that?

My TOYOTA is built like a ... BAGEL with CREAM CHEESE!!

Do you really think built might want to have this bagel?

I wonder if I could ever get started in the credit world?

Earlier you said comes just before I see the total at the safeway
checkout counter?

TATTOOED MIDGETS are using ALFREDO in their SALAMI FACTORY!

Is it because of hangups you have that you are going through all this?

I LIKE Aisle 7a.

What makes you think you like aisle 7a?

Youth of today!  Join me in a mass rally for traditional mental attitudes!

You mentioned that you work for ding dongs?

Yow!  Did something bad happen or am I in a drive-in movie??

How do you reconcile your inhibitions?

Vote for ME -- I'm well-tapered, half-cocked, ill-conceived and
 TAX-DEFERRED!

Why do you say that?

Are we THERE yet?!

What makes you believe is it that when I die me cannot take my home
entertainment center with me?

Is it FUN to be a MIDGET?

Maybe this is related to some problems in your childhood?

I left my WALLET in the BATHROOM!!

Is it because of some problems at home that you say you left your
wallet in the bathroom?

Spreading peanut butter reminds me of opera!!  I wonder why?

Can you elaborate on that?

Dizzy, are we "REAL PEOPLE" or "AMAZING ANIMALS"?

Earlier you said built would like to have this bagel?

My LESLIE GORE record is BROKEN..

Perhaps your plans could have caused this.

With YOU, I can be MYSELF..  We don't NEED Dan Rather..

Are you sure that you do not need dan rather?

Yow!

Yow!  Are we interactive yet?

You must be a CUB SCOUT!!  Have you made your MONEY-DROP today??

You mentioned that comes just before I see the total at the safeway
checkout counter?

It's the RINSE CYCLE!!  They've ALL IGNORED the RINSE CYCLE!!

Is it because of your life that you are going through all this?

There's a little picture of ED MCMAHON doing BAD THINGS to JOAN RIVERS
 in a $200,000 MALIBU BEACH HOUSE!!

I don't understand.

FISH-NET-FISH-NET-FISH-NET-FISH-NET-FISH!!

Do you really think you work for ding dongs?

NATHAN...  your PARENTS were in a CARCRASH!!
 They're VOIDED - They COLLAPSED
 They had no CHAINSAWS...  They had no MONEY MACHINES...
 They did PILLS in SKIMPY GRASS SKIRTS...
 Nathan, I EMULATED them...  but they were OFF-KEY...

Is the fact that they were off key the real reason?

I want you to MEMORIZE the collected poems of EDNA ST VINCENT MILLAY..
 BACKWARDS!!

I would appreciate it if you would continue.

Now KEN is having a MENTAL CRISIS beacuse his "R.V." PAYMENTS are
 OVER-DUE!!

