diff --git a/Lib/cgi.py b/Lib/cgi.py
index 0bb5b8ea..fd30383 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -181,14 +181,14 @@
 def parse_qs(qs, keep_blank_values=0, strict_parsing=0):
     """Parse a query given as a string argument."""
     warn("cgi.parse_qs is deprecated, use urlparse.parse_qs \
-            instead",PendingDeprecationWarning)
+            instead", PendingDeprecationWarning, 2)
     return urlparse.parse_qs(qs, keep_blank_values, strict_parsing)
 
 
 def parse_qsl(qs, keep_blank_values=0, strict_parsing=0):
     """Parse a query given as a string argument."""
     warn("cgi.parse_qsl is deprecated, use urlparse.parse_qsl instead",
-            PendingDeprecationWarning)
+         PendingDeprecationWarning, 2)
     return urlparse.parse_qsl(qs, keep_blank_values, strict_parsing)
 
 def parse_multipart(fp, pdict):
diff --git a/Lib/commands.py b/Lib/commands.py
index 287aa27..858b3d6 100644
--- a/Lib/commands.py
+++ b/Lib/commands.py
@@ -33,7 +33,7 @@
 def getstatus(file):
     """Return output of "ls -ld <file>" in a string."""
     import warnings
-    warnings.warn("commands.getstatus() is deprecated", DeprecationWarning)
+    warnings.warn("commands.getstatus() is deprecated", DeprecationWarning, 2)
     return getoutput('ls -ld' + mkarg(file))
 
 
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 7a3f813..b09d018 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -114,7 +114,7 @@
     @property
     def filename(self):
         import warnings
-        warnings.warn("use the name attribute", DeprecationWarning)
+        warnings.warn("use the name attribute", DeprecationWarning, 2)
         if self.mode == WRITE and self.name[-3:] != ".gz":
             return self.name + ".gz"
         return self.name
diff --git a/Lib/macpath.py b/Lib/macpath.py
index 38e6eae..14e49a3 100644
--- a/Lib/macpath.py
+++ b/Lib/macpath.py
@@ -170,7 +170,8 @@
     beyond that arg is always passed to func.  It can be used, e.g., to pass
     a filename pattern, or a mutable object designed to accumulate
     statistics.  Passing None for arg is common."""
-    warnings.warnpy3k("In 3.x, os.path.walk is removed in favor of os.walk.")
+    warnings.warnpy3k("In 3.x, os.path.walk is removed in favor of os.walk.",
+                      stacklevel=2)
     try:
         names = os.listdir(top)
     except os.error:
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 714f205..37f32f0 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -250,7 +250,8 @@
     beyond that arg is always passed to func.  It can be used, e.g., to pass
     a filename pattern, or a mutable object designed to accumulate
     statistics.  Passing None for arg is common."""
-    warnings.warnpy3k("In 3.x, os.path.walk is removed in favor of os.walk.")
+    warnings.warnpy3k("In 3.x, os.path.walk is removed in favor of os.walk.",
+                      stacklevel=2)
     try:
         names = os.listdir(top)
     except os.error:
diff --git a/Lib/plistlib.py b/Lib/plistlib.py
index 05a6ae8..0b1748c 100644
--- a/Lib/plistlib.py
+++ b/Lib/plistlib.py
@@ -114,7 +114,8 @@
 def readPlistFromResource(path, restype='plst', resid=0):
     """Read plst resource from the resource fork of path.
     """
-    warnings.warnpy3k("In 3.x, readPlistFromResource is removed.")
+    warnings.warnpy3k("In 3.x, readPlistFromResource is removed.",
+                      stacklevel=2)
     from Carbon.File import FSRef, FSGetResourceForkName
     from Carbon.Files import fsRdPerm
     from Carbon import Res
@@ -129,7 +130,7 @@
 def writePlistToResource(rootObject, path, restype='plst', resid=0):
     """Write 'rootObject' as a plst resource to the resource fork of path.
     """
-    warnings.warnpy3k("In 3.x, writePlistToResource is removed.")
+    warnings.warnpy3k("In 3.x, writePlistToResource is removed.", stacklevel=2)
     from Carbon.File import FSRef, FSGetResourceForkName
     from Carbon.Files import fsRdWrPerm
     from Carbon import Res
@@ -300,13 +301,13 @@
             raise AttributeError, attr
         from warnings import warn
         warn("Attribute access from plist dicts is deprecated, use d[key] "
-             "notation instead", PendingDeprecationWarning)
+             "notation instead", PendingDeprecationWarning, 2)
         return value
 
     def __setattr__(self, attr, value):
         from warnings import warn
         warn("Attribute access from plist dicts is deprecated, use d[key] "
-             "notation instead", PendingDeprecationWarning)
+             "notation instead", PendingDeprecationWarning, 2)
         self[attr] = value
 
     def __delattr__(self, attr):
@@ -316,14 +317,14 @@
             raise AttributeError, attr
         from warnings import warn
         warn("Attribute access from plist dicts is deprecated, use d[key] "
-             "notation instead", PendingDeprecationWarning)
+             "notation instead", PendingDeprecationWarning, 2)
 
 class Dict(_InternalDict):
 
     def __init__(self, **kwargs):
         from warnings import warn
         warn("The plistlib.Dict class is deprecated, use builtin dict instead",
-             PendingDeprecationWarning)
+             PendingDeprecationWarning, 2)
         super(Dict, self).__init__(**kwargs)
 
 
@@ -336,7 +337,7 @@
     def __init__(self, **kwargs):
         from warnings import warn
         warn("The Plist class is deprecated, use the readPlist() and "
-             "writePlist() functions instead", PendingDeprecationWarning)
+             "writePlist() functions instead", PendingDeprecationWarning, 2)
         super(Plist, self).__init__(**kwargs)
 
     def fromFile(cls, pathOrFile):
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 4f3519b..cdce5af 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -216,7 +216,8 @@
     beyond that arg is always passed to func.  It can be used, e.g., to pass
     a filename pattern, or a mutable object designed to accumulate
     statistics.  Passing None for arg is common."""
-    warnings.warnpy3k("In 3.x, os.path.walk is removed in favor of os.walk.")
+    warnings.warnpy3k("In 3.x, os.path.walk is removed in favor of os.walk.",
+                      stacklevel=2)
     try:
         names = os.listdir(top)
     except os.error:
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 508d88e..2c22839 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -1591,7 +1591,8 @@
         return self.format == USTAR_FORMAT
     def _setposix(self, value):
         import warnings
-        warnings.warn("use the format attribute instead", DeprecationWarning)
+        warnings.warn("use the format attribute instead", DeprecationWarning,
+                      2)
         if value:
             self.format = USTAR_FORMAT
         else:
diff --git a/Lib/xmllib.py b/Lib/xmllib.py
index 2a189cd..96ee841 100644
--- a/Lib/xmllib.py
+++ b/Lib/xmllib.py
@@ -6,7 +6,8 @@
 import string
 
 import warnings
-warnings.warn("The xmllib module is obsolete.  Use xml.sax instead.", DeprecationWarning)
+warnings.warn("The xmllib module is obsolete.  Use xml.sax instead.",
+              DeprecationWarning, 2)
 del warnings
 
 version = '0.3'
