diff --git a/django/contrib/staticfiles/finders.py b/django/contrib/staticfiles/finders.py
index 7b4c7c8..30986e9 100644
--- django/contrib/staticfiles/finders.py
+++ django/contrib/staticfiles/finders.py
@@ -28,7 +28,7 @@ class BaseFinder(object):
         """
         raise NotImplementedError()
 
-    def list(self, ignore_patterns):
+    def list(self, ignore_patterns, include_patterns):
         """
         Given an optional list of paths to ignore, this should return
         a two item iterable consisting of the relative path and storage
@@ -96,13 +96,13 @@ class FileSystemFinder(BaseFinder):
         if os.path.exists(path):
             return path
 
-    def list(self, ignore_patterns):
+    def list(self, ignore_patterns, include_patterns):
         """
         List all files in all locations.
         """
         for prefix, root in self.locations:
             storage = self.storages[root]
-            for path in utils.get_files(storage, ignore_patterns):
+            for path in utils.get_files(storage, ignore_patterns, include_patterns):
                 yield path, storage
 
 
@@ -128,13 +128,13 @@ class AppDirectoriesFinder(BaseFinder):
                     self.apps.append(app)
         super(AppDirectoriesFinder, self).__init__(*args, **kwargs)
 
-    def list(self, ignore_patterns):
+    def list(self, ignore_patterns, include_patterns):
         """
         List all files in all app storages.
         """
         for storage in self.storages.itervalues():
             if storage.exists(''):  # check if storage location exists
-                for path in utils.get_files(storage, ignore_patterns):
+                for path in utils.get_files(storage, ignore_patterns, include_patterns):
                     yield path, storage
 
     def find(self, path, all=False):
@@ -203,11 +203,11 @@ class BaseStorageFinder(BaseFinder):
                 return match
         return []
 
-    def list(self, ignore_patterns):
+    def list(self, ignore_patterns, include_patterns):
         """
         List all files of the storage.
         """
-        for path in utils.get_files(self.storage, ignore_patterns):
+        for path in utils.get_files(self.storage, ignore_patterns, include_patterns):
             yield path, self.storage
 
 
diff --git a/django/contrib/staticfiles/management/commands/collectstatic.py b/django/contrib/staticfiles/management/commands/collectstatic.py
index 18f8893..9f6005c 100644
--- django/contrib/staticfiles/management/commands/collectstatic.py
+++ django/contrib/staticfiles/management/commands/collectstatic.py
@@ -116,7 +116,7 @@ Type 'yes' to continue, or 'no' to cancel: """
 
         found_files = []
         for finder in finders.get_finders():
-            for path, storage in finder.list(self.ignore_patterns):
+            for path, storage in finder.list(self.ignore_patterns, None):
                 # Prefix the relative path if the source storage contains it
                 if getattr(storage, 'prefix', None):
                     prefixed_path = os.path.join(storage.prefix, path)
diff --git a/django/contrib/staticfiles/utils.py b/django/contrib/staticfiles/utils.py
index f500ed6..21e979b 100644
--- django/contrib/staticfiles/utils.py
+++ django/contrib/staticfiles/utils.py
@@ -6,7 +6,7 @@ from django.core.exceptions import ImproperlyConfigured
 def matches_patterns(path, patterns=None):
     """
     Return True or False depending on whether the ``path`` should be
-    ignored (if it matches any pattern in ``ignore_patterns``).
+    ignored (if it matches any pattern in ``patterns``).
     """
     if patterns is None:
         patterns = []
@@ -15,26 +15,30 @@ def matches_patterns(path, patterns=None):
             return True
     return False
 
-def get_files(storage, ignore_patterns=None, location=''):
+def get_files(storage, ignore_patterns=None, include_patterns=None, location=''):
     """
     Recursively walk the storage directories yielding the paths
     of all files that should be copied.
     """
     if ignore_patterns is None:
         ignore_patterns = []
+    if include_patterns is None:
+        include_patterns = []
     directories, files = storage.listdir(location)
     for fn in files:
+        if location:
+            fn = os.path.normpath(os.path.join(location, fn)).replace('\\', '/')
         if matches_patterns(fn, ignore_patterns):
             continue
-        if location:
-            fn = os.path.join(location, fn)
+        if include_patterns and not matches_patterns(fn, include_patterns):
+            continue
         yield fn
     for dir in directories:
+        if location:
+            dir = os.path.normpath(os.path.join(location, dir)).replace('\\', '/')
         if matches_patterns(dir, ignore_patterns):
             continue
-        if location:
-            dir = os.path.join(location, dir)
-        for fn in get_files(storage, ignore_patterns, dir):
+        for fn in get_files(storage, ignore_patterns, include_patterns, dir):
             yield fn
 
 def check_settings(base_url=None):
