I've had and continue to struggle with this exact same problem.  Here is what I've discovered.
1) Have a well defined purpose that motivates you.  This should have motivation beyond just money.  What can you do that nobody else can do?  How can you bring value to other people's lives?
2) Be specific.  If you only have a vague concept of what your work is, then you will naturally procrastinate.  If you find yourself being lazy, make a list of EXACT actionable items that you can accomplish in 15 minute chunks and then just do 1 of them.  If you are feeling good then you can do another.
3) Stop working so damn much!  I actually had the Ruby on Rails creator tell me this directly when I asked him this question at a talk he gave.  You need to have time off to do what you want to do.  I have 1 day a week where I do whatever I want to and I make it a rule that I will not do any work.  I don't check email and I don't turn on my IM client.  If all you see is more work with no chance of enjoying yourself then what's the point of working?
3) Multi-tasking is for computers not people.  Do one thing at a time and concentrate on it.  Turn off distractions.  As the poem says:
	Quote:
	
	
		| Work while you work, Play while you play;
 This is the way
 To be happy each day.
 All that you do,
 Do with your might;
 Things done by halves
 Are never done right.
 | 
	
 4) Make a list of what you want to accomplish the night before.  These need to be specific, not just vague things like, "work on project A".  What can you get done on project A?
5) Health and exercise.  Eat more often and eat low glycemic foods.  Stay away from large meals and especially ones that are mostly sugar.  If you are going to have something with lots of sugar make sure to eat it with protein too to balance it out.  Exercise.  If you don't have the physical energy, you won't have the fuel to do mental work.
I also recommend the following books:
Think and Grow Rich
The Now Habit
The Power of Full Engagement