diff --git a/SConstruct b/SConstruct
index 558ebf9..c619804 100644
--- a/SConstruct
+++ b/SConstruct
@@ -3,14 +3,14 @@
 #
 # For example, invoke scons as 
 #
-#   scons debug=1 dri=0 machine=x86
+#   scons build=debug llvm=yes machine=x86
 #
 # to set configuration variables. Or you can write those options to a file
 # named config.py:
 #
 #   # config.py
-#   debug=1
-#   dri=0
+#   build='debug'
+#   llvm=True
 #   machine='x86'
 # 
 # Invoke
@@ -30,54 +30,8 @@
 #######################################################################
 # Configuration options
 
-default_statetrackers = 'mesa'
-default_targets = 'graw-null'
-
-if common.default_platform in ('linux', 'freebsd', 'darwin'):
-	default_drivers = 'softpipe,galahad,failover,svga,i915,i965,trace,identity,llvmpipe'
-	default_winsys = 'xlib'
-elif common.default_platform in ('winddk',):
-	default_drivers = 'softpipe,svga,i915,i965,trace,identity'
-	default_winsys = 'all'
-elif common.default_platform in ('embedded',):
-	default_drivers = 'softpipe,llvmpipe'
-	default_winsys = 'xlib'
-else:
-	default_drivers = 'all'
-	default_winsys = 'all'
-
 opts = Variables('config.py')
 common.AddOptions(opts)
-opts.Add(ListVariable('statetrackers', 'state trackers to build', default_statetrackers,
-                     ['mesa', 'python', 'xorg', 'egl']))
-opts.Add(ListVariable('drivers', 'pipe drivers to build', default_drivers,
-                     ['softpipe', 'galahad', 'failover', 'svga', 'i915', 'i965', 'trace', 'r300', 'r600', 'identity', 'llvmpipe', 'nouveau', 'nv50', 'nvfx']))
-opts.Add(ListVariable('winsys', 'winsys drivers to build', default_winsys,
-                     ['xlib', 'vmware', 'i915', 'i965', 'gdi', 'radeon', 'r600', 'graw-xlib']))
-
-opts.Add(ListVariable('targets', 'driver targets to build', default_targets,
-		      ['dri-i915',
-		       'dri-i965',
-		       'dri-nouveau',
-		       'dri-radeong',
-		       'dri-swrast',
-		       'dri-vmwgfx',
-		       'egl-i915',
-		       'egl-i965',
-		       'egl-nouveau',
-		       'egl-radeon',
-		       'egl-swrast',
-		       'egl-vmwgfx',
-		       'graw-xlib',
-		       'graw-null',
-		       'libgl-gdi',
-		       'libgl-xlib',
-		       'xorg-i915',
-		       'xorg-i965',
-		       'xorg-nouveau',
-		       'xorg-radeon',
-		       'xorg-vmwgfx']))
-
 opts.Add(EnumVariable('MSVS_VERSION', 'MS Visual C++ version', None, allowed_values=('7.1', '8.0', '9.0')))
 
 env = Environment(
@@ -87,61 +41,26 @@
 	ENV = os.environ,
 )
 
-if os.environ.has_key('CC'):
-	env['CC'] = os.environ['CC']
-if os.environ.has_key('CFLAGS'):
-	env['CCFLAGS'] += SCons.Util.CLVar(os.environ['CFLAGS'])
-if os.environ.has_key('CXX'):
-	env['CXX'] = os.environ['CXX']
-if os.environ.has_key('CXXFLAGS'):
-	env['CXXFLAGS'] += SCons.Util.CLVar(os.environ['CXXFLAGS'])
-if os.environ.has_key('LDFLAGS'):
-	env['LINKFLAGS'] += SCons.Util.CLVar(os.environ['LDFLAGS'])
+# Backwards compatability with old target configuration variable
+try:
+    targets = ARGUMENTS['targets']
+except KeyError:
+    pass
+else:
+    targets = targets.split(',')
+    print 'scons: warning: targets option is deprecated; pass the targets on their own such as'
+    print
+    print '  scons %s' % ' '.join(targets)
+    print 
+    COMMAND_LINE_TARGETS.append(targets)
+
 
 Help(opts.GenerateHelpText(env))
 
-# replicate options values in local variables
-debug = env['debug']
-dri = env['dri']
-machine = env['machine']
-platform = env['platform']
-
-# derived options
-x86 = machine == 'x86'
-ppc = machine == 'ppc'
-gcc = platform in ('linux', 'freebsd', 'darwin', 'embedded')
-msvc = platform in ('windows', 'winddk')
-
-Export([
-	'debug', 
-	'x86', 
-	'ppc', 
-	'dri', 
-	'platform',
-	'gcc',
-	'msvc',
-])
-
 
 #######################################################################
 # Environment setup
 
-# Always build trace, rbug, identity, softpipe, and llvmpipe (where possible)
-if 'trace' not in env['drivers']:
-    env['drivers'].append('trace')
-if 'rbug' not in env['drivers']:
-    env['drivers'].append('rbug')
-if 'galahad' not in env['drivers']:
-    env['drivers'].append('galahad')
-if 'identity' not in env['drivers']:
-    env['drivers'].append('identity')
-if 'softpipe' not in env['drivers']:
-    env['drivers'].append('softpipe')
-if env['llvm'] and 'llvmpipe' not in env['drivers']:
-    env['drivers'].append('llvmpipe')
-if 'sw' not in env['drivers']:
-    env['drivers'].append('sw')
-
 # Includes
 env.Prepend(CPPPATH = [
 	'#/include',
@@ -157,7 +76,7 @@
     env.Append(CPPPATH = ['#include/c99'])
 
 # Embedded
-if platform == 'embedded':
+if env['platform'] == 'embedded':
 	env.Append(CPPDEFINES = [
 		'_POSIX_SOURCE',
 		('_POSIX_C_SOURCE', '199309L'), 
@@ -174,7 +93,7 @@
 	])
 
 # Posix
-if platform in ('posix', 'linux', 'freebsd', 'darwin'):
+if env['platform'] in ('posix', 'linux', 'freebsd', 'darwin'):
 	env.Append(CPPDEFINES = [
 		'_POSIX_SOURCE',
 		('_POSIX_C_SOURCE', '199309L'), 
@@ -184,9 +103,9 @@
 		'PTHREADS',
 		'HAVE_POSIX_MEMALIGN',
 	])
-	if gcc:
+	if env['gcc']:
 		env.Append(CFLAGS = ['-fvisibility=hidden'])
-	if platform == 'darwin':
+	if env['platform'] == 'darwin':
 		env.Append(CPPDEFINES = ['_DARWIN_C_SOURCE'])
 	env.Append(LIBS = [
 		'm',
@@ -212,5 +131,3 @@
 	duplicate = 0 # http://www.scons.org/doc/0.97/HTML/scons-user/x2261.html
 )
 
-env.Default('src')
-
