diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 13a84ec..bbed7f1 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -838,8 +838,9 @@ class FileField(Field):
         return super(FileField, self).formfield(**defaults)
 
 class FilePathField(Field):
-    def __init__(self, verbose_name=None, name=None, path='', match=None, recursive=False, **kwargs):
-        self.path, self.match, self.recursive = path, match, recursive
+    def __init__(self, verbose_name=None, name=None, path='', match=None, recursive=False, allow_files=True, allow_folders=False, **kwargs):
+        self.path, self.match, self.recursive, self.allow_files, self.allow_folders = path, match, recursive, allow_files, allow_folders
+        assert self.allow_files or self.allow_folders
         kwargs['max_length'] = kwargs.get('max_length', 100)
         Field.__init__(self, verbose_name, name, **kwargs)
     
@@ -848,6 +849,8 @@ class FilePathField(Field):
             'path': self.path,
             'match': self.match,
             'recursive': self.recursive,
+            'allow_files': self.allow_files,
+            'allow_folders': self.allow_folders,
             'form_class': forms.FilePathField,
         }
         defaults.update(kwargs)
diff --git a/django/newforms/fields.py b/django/newforms/fields.py
index 08e8b84..d781149 100644
--- a/django/newforms/fields.py
+++ b/django/newforms/fields.py
@@ -720,10 +720,11 @@ class MultiValueField(Field):
         raise NotImplementedError('Subclasses must implement this method.')
 
 class FilePathField(ChoiceField):
-    def __init__(self, path, match=None, recursive=False, required=True,
-                 widget=Select, label=None, initial=None, help_text=None,
-                 *args, **kwargs):
-        self.path, self.match, self.recursive = path, match, recursive
+    def __init__(self, path, match=None, recursive=False, allow_files=True,
+                 allow_folders=False,required=True, widget=Select, label=None,
+                 initial=None, help_text=None, *args, **kwargs):
+        self.path, self.match, self.recursive, self.allow_files, self.allow_folders = path, match, recursive, allow_files, allow_folders
+        assert self.allow_files or self.allow_folders
         super(FilePathField, self).__init__(choices=(), required=required,
             widget=widget, label=label, initial=initial, help_text=help_text,
             *args, **kwargs)
@@ -732,15 +733,21 @@ class FilePathField(ChoiceField):
             self.match_re = re.compile(self.match)
         if recursive:
             for root, dirs, files in os.walk(self.path):
-                for f in files:
-                    if self.match is None or self.match_re.search(f):
-                        f = os.path.join(root, f)
-                        self.choices.append((f, f.replace(path, "", 1)))
+                if self.allow_files:
+                    for f in files:
+                        if self.match is None or self.match_re.search(f):
+                            f = os.path.join(root, f)
+                            self.choices.append((f, f.replace(path, "", 1)))
+                if self.allow_folders:
+                    for f in dirs:
+                        if self.match is None or self.match_re.search(f):
+                            f = os.path.join(root, f)
+                            self.choices.append((f, f.replace(path, "", 1)))
         else:
             try:
                 for f in os.listdir(self.path):
                     full_file = os.path.join(self.path, f)
-                    if os.path.isfile(full_file) and (self.match is None or self.match_re.search(f)):
+                    if ((self.allow_files and os.path.isfile(full_file)) or (self.allow_folders and os.path.isdir(full_file))) and (self.match is None or self.match_re.search(f)):
                         self.choices.append((full_file, f))
             except OSError:
                 pass
diff --git a/docs/model-api.txt b/docs/model-api.txt
index f73c5aa..a6627e2 100644
--- a/docs/model-api.txt
+++ b/docs/model-api.txt
@@ -321,6 +321,16 @@ on the filesystem. Has three special arguments, of which the first is
     ``recursive``           Optional. Either ``True`` or ``False``. Default is
                             ``False``. Specifies whether all subdirectories of
                             ``path`` should be included.
+                            
+    ``allow_files``         Optional.  Specifies whether or not the list of
+                            choices should contain files, it defaults to 
+                            ``True``. Either this or ``allow_folders`` must be 
+                            ``True``.
+                            
+    ``allow_folders``       Optional.  Specifies whether or not the list of 
+                            choices should contain folders, it defaults to 
+                            ``False``.  Either this or ``allow_files`` must be 
+                            ``True``.
     ======================  ===================================================
 
 Of course, these arguments can be used together.
diff --git a/docs/newforms.txt b/docs/newforms.txt
index 533ff75..b6f364b 100644
--- a/docs/newforms.txt
+++ b/docs/newforms.txt
@@ -1380,6 +1380,14 @@ extra arguments:
     ``match``       No          A regular expression pattern; only files with
                                 names matching this expression will be allowed
                                 as choices.
+                                
+    ``allow_files`` No          Specifies whether or not the list of choices 
+                                should contain files, it defaults to ``True``. 
+                                Either this or ``allow_folders`` must be ``True``.
+    
+    ``allow_folders`` No        Specifies whether or not the list of choices 
+                                should contain folders, it defaults to ``False``. 
+                                Either this or ``allow_files`` must be ``True``.
     ==============  ==========  ===============================================
 
 ``ImageField``
diff --git a/tests/regressiontests/forms/fields.py b/tests/regressiontests/forms/fields.py
index 9421d8c..7a43c3c 100644
--- a/tests/regressiontests/forms/fields.py
+++ b/tests/regressiontests/forms/fields.py
@@ -1159,6 +1159,13 @@ u'.../django/newforms/fields.py'
 >>> f.choices.sort()
 >>> f.choices
 [('.../django/newforms/__init__.py', '__init__.py'), ('.../django/newforms/extras/__init__.py', 'extras/__init__.py'), ('.../django/newforms/extras/widgets.py', 'extras/widgets.py'), ('.../django/newforms/fields.py', 'fields.py'), ('.../django/newforms/forms.py', 'forms.py'), ('.../django/newforms/models.py', 'models.py'), ('.../django/newforms/util.py', 'util.py'), ('.../django/newforms/widgets.py', 'widgets.py')]
+>>> f = forms.FilePathField(path=path, allow_folders=True, allow_files=False)
+>>> f.choices
+[('.../django/newforms/extras', 'extras')]
+>>> f = forms.FilePathField(path=path, allow_folders=True, allow_files=True)
+>>> f.choices.sort()
+>>> f.choices
+[('.../django/newforms/__init__.py', '__init__.py'), ('.../django/newforms/__init__.pyc', '__init__.pyc'), ('.../django/newforms/extras', 'extras'), ('.../django/newforms/fields.py', 'fields.py'), ('.../django/newforms/fields.pyc', 'fields.pyc'), ('.../django/newforms/forms.py', 'forms.py'), ('.../django/newforms/forms.pyc', 'forms.pyc'), ('.../django/newforms/formsets.pyc', 'formsets.pyc'), ('.../django/newforms/models.py', 'models.py'), ('.../django/newforms/models.pyc', 'models.pyc'), ('.../django/newforms/util.py', 'util.py'), ('.../django/newforms/util.pyc', 'util.pyc'), ('.../django/newforms/widgets.py', 'widgets.py'), ('.../django/newforms/widgets.pyc', 'widgets.pyc')]
 
 # SplitDateTimeField ##########################################################
 
