diff --git a/collections_extended/_util.py b/collections_extended/_util.py
index f5a81f8..84050a5 100644
--- a/collections_extended/_util.py
+++ b/collections_extended/_util.py
@@ -67,6 +67,11 @@ class Sentinel(object):
 NOT_SET = Sentinel('not_set')
 
 
+def deprecation_warning(msg):
+	"""Raise a deprecation warning."""
+	warnings.warn(msg, category=DeprecationWarning, stacklevel=2)
+
+
 def deprecated(msg, dep_version):
 	"""Decorate a function, method or class to mark as deprecated.
 
@@ -96,7 +101,7 @@ def deprecated(msg, dep_version):
 
 		@wraps(func)
 		def inner(*args, **kwargs):
-			warnings.warn(msg, category=DeprecationWarning, stacklevel=2)
+			deprecation_warning(msg)
 			return func(*args, **kwargs)
 
 		return inner
diff --git a/collections_extended/bags.py b/collections_extended/bags.py
index c23094f..fa67503 100644
--- a/collections_extended/bags.py
+++ b/collections_extended/bags.py
@@ -188,7 +188,7 @@ class _basebag(Set):
 	@deprecated(
 		"Use `heapq.nlargest(n, self.counts(), key=itemgetter(1))` instead or "
 		"`sorted(self.counts(), reverse=True, key=itemgetter(1))` for `n=None`",
-		'1.1',
+		'1.0',
 		)
 	def nlargest(self, n=None):
 		"""List the n most common elements and their counts.
diff --git a/collections_extended/indexed_dict.py b/collections_extended/indexed_dict.py
index a1c9275..2b6fc0f 100644
--- a/collections_extended/indexed_dict.py
+++ b/collections_extended/indexed_dict.py
@@ -4,7 +4,7 @@
 """
 import collections
 
-from ._util import NOT_SET
+from ._util import NOT_SET, deprecation_warning
 
 __all__ = ('IndexedDict', )
 
@@ -33,38 +33,82 @@ class IndexedDict(collections.MutableMapping):
 		self._dict = {}
 		self._list = []
 
-	def get(self, key=NOT_SET, index=NOT_SET, d=None):
-		"""Return value with given key or index.
+	def get(self, key=NOT_SET, index=NOT_SET, default=NOT_SET, d=NOT_SET):
+		"""Return value with given `key` or `index`.
 
-		If no value is found, return d (None by default).
+		If no value is found, return `default` (`None` by default).
+
+		.. deprecated :: 1.1
+		The `d` parameter has been renamed `default`. `d` will be removed in
+		some future version.
+
+		Args:
+			key: The key of the value to get
+			index: The index of the value to get
+			default: The value to return if `key` is not found or `index` is
+				out of bounds. If it is NOT_SET, None is returned.
+			d: DEPRECATED: Old parameter name for `default`
 		"""
+		if d is not NOT_SET:
+			if default is not NOT_SET:
+				raise ValueError('Specified default and d')
+			deprecation_warning(
+				"IndexedDict.pop parameter 'd' has been renamed to 'default'"
+				)
+			default = d
+		if default is NOT_SET:
+			default = None
+
 		if index is NOT_SET and key is not NOT_SET:
 			try:
 				index, value = self._dict[key]
 			except KeyError:
-				return d
+				return default
 			else:
 				return value
 		elif index is not NOT_SET and key is NOT_SET:
 			try:
 				key, value = self._list[index]
 			except IndexError:
-				return d
+				return default
 			else:
 				return value
 		else:
 			raise KEY_EQ_INDEX_ERROR
 
-	def pop(self, key=NOT_SET, index=NOT_SET, d=NOT_SET):
-		"""Remove and return value with given key or index (last item by default).
+	def pop(self, key=NOT_SET, index=NOT_SET, default=NOT_SET, d=NOT_SET):
+		"""Remove and return value.
+
+		Optionally, specify the `key` or `index` of the value to pop.
+		If `key` is specified and is not found a `KeyError` is raised unless
+		`default` is specified. Likewise, if `index` is specified that is out of
+		bounds, an `IndexError` is raised unless `default` is specified.
 
-		If key is not found, returns d if given,
-		otherwise raises KeyError or IndexError.
+		Both `index` and `key` cannot be specified. If neither is specified,
+		then the last value is popped.
 
 		This is generally O(N) unless removing last item, then O(1).
-		"""
-		has_default = d is not NOT_SET
 
+		.. deprecated :: 1.1
+		The `d` parameter has been renamed `default`. `d` will be removed in
+		some future version.
+
+		Args:
+			key: The key of the value to pop
+			index: The index of the value to pop
+			default: The value to return if the key is not found or the index is
+				out of bounds
+			d: DEPRECATED: Old parameter name for `default`
+		"""
+		if d is not NOT_SET:
+			if default is not NOT_SET:
+				raise ValueError('Specified default and d')
+			deprecation_warning(
+				"IndexedDict.pop parameter 'd' has been renamed to 'default'"
+				)
+			default = d
+
+		has_default = default is not NOT_SET
 		if index is NOT_SET and key is not NOT_SET:
 			index, value = self._pop_key(key, has_default)
 		elif key is NOT_SET:
@@ -73,7 +117,7 @@ class IndexedDict(collections.MutableMapping):
 			raise KEY_AND_INDEX_ERROR
 
 		if index is None:
-			return d
+			return default
 		else:
 			self._fix_indices_after_delete(index)
 			return value

Rename `d` arguments to `default` in indexed_dict
diff --git a/tests/test_bags.py b/tests/test_bags.py
index 0e66f01..43f9d39 100644
--- a/tests/test_bags.py
+++ b/tests/test_bags.py
@@ -66,10 +66,8 @@ def test_nlargest():
 def test_nlargest_deprecated():
 	"""Test that nlargest raises a DeprecationWarning."""
 	b = bag()
-	with warnings.catch_warnings():
-		warnings.simplefilter('error')
-		with pytest.raises(DeprecationWarning):
-			b.nlargest()
+	with pytest.deprecated_call():
+		b.nlargest()
 
 
 def test_from_map():
diff --git a/tests/test_indexed_dict.py b/tests/test_indexed_dict.py
index af5f81e..b6c1f0e 100644
--- a/tests/test_indexed_dict.py
+++ b/tests/test_indexed_dict.py
@@ -1,6 +1,3 @@
-# pylint: disable=redefined-outer-name
-# pylint: disable=W0212
-
 import pytest
 
 from collections_extended.indexed_dict import IndexedDict
@@ -11,7 +8,7 @@ def assert_internal_state(self):
 	Returns True, so it can be used in an assert expression itself."""
 
 	assert len(self._dict) == len(self._list)
-	for k, (i, v) in self._dict.items():
+	for k, (i, v) in self._dict.items():  # noqa
 		k2, v2 = self._list[i]
 		assert k2 == k
 		assert v2 is v
@@ -61,11 +58,32 @@ def test_get_key_found(d, indexing):
 	assert d.get(**indexing) == 11
 
 
+@pytest.mark.parametrize("indexing", [{"key": "x"}, {"index": 100}, {"index": -6}])
+def test_get_specifying_missing_default(d, indexing):
+	assert d.get(default=5, **indexing) == 5
+
+
+def test_get_deprecated_param(d):
+	with pytest.deprecated_call():
+		assert d.get('x', d='XXX') == 'XXX'
+
+
 @pytest.mark.parametrize("indexing", [{"key": "x"}, {"index": 100}, {"index": -6}])
 def test_get_missing_default(d, indexing):
 	assert d.get(**indexing) is None
 
 
+def test_get_duplicate_default(d):
+	with pytest.raises(ValueError):
+		d.get(d=None, default=None)
+	with pytest.raises(ValueError):
+		d.get(d='XXX', default=None)
+	with pytest.raises(ValueError):
+		d.get(d=None, default='XXX')
+	with pytest.raises(ValueError):
+		d.get(d='XXX', default='XXX')
+
+
 def test_get_both_key_and_index(d):
 	with pytest.raises(TypeError):
 		d.get(key="a", index=4)
@@ -93,6 +111,11 @@ def test_pop_missing_default(d, indexing):
 	assert list(d) == list("abcde")
 
 
+def test_pop_duplicate_default(d):
+	with pytest.raises(ValueError):
+		d.pop(d='XXX', default='XXX')
+
+
 def test_pop_missing_key_no_default(d):
 	with pytest.raises(KeyError):
 		d.pop("X")
@@ -106,6 +129,11 @@ def test_pop_missing_index_no_default(d, index):
 	assert list(d) == list("abcde")
 
 
+def test_deprecated_pop_default(d):
+	with pytest.deprecated_call():
+		assert d.pop(999, d='XXX') == 'XXX'
+
+
 def test_pop_empty_default():
 	d = IndexedDict()
 	assert d.pop(d="XXX") == "XXX"

pip install -e .
parse_log_pytest
requirements.txt
pytest
rm -rf build dist data_structures.egg-info find . -name *.pyc -delete find . -name *.pyo -delete find . -name *~ -delete find . -name __pycache__ -delete find . -name *,cover -delete
3.7
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster @ git+https://github.com/mlenzen/alabaster.git@63c5f262ea46062fcfba445e848fb7c5657c671e
Babel==2.14.0
backcall==0.2.0
bump2version==1.0.1
bumpversion==0.6.0
cachetools==5.5.2
certifi @ file:///croot/certifi_1671487769961/work/certifi
chardet==5.2.0
charset-normalizer==3.4.1
codecov==2.1.13
-e git+https://github.com/mlenzen/collections-extended.git@490b8457266f40a0268aab3e038733ebe2a2020f#egg=collections_extended
colorama==0.4.6
coverage==7.2.7
decorator==5.1.1
distlib==0.3.9
docutils==0.19
exceptiongroup==1.2.2
filelock==3.12.2
flake8==3.9.2
flake8-docstrings==1.7.0
idna==3.10
imagesize==1.4.1
importlib-metadata==6.7.0
iniconfig==2.0.0
ipython==7.34.0
jedi==0.19.2
Jinja2==3.1.6
MarkupSafe==2.1.5
matplotlib-inline==0.1.6
mccabe==0.6.1
packaging==24.0
parso==0.8.4
pexpect==4.9.0
pickleshare==0.7.5
platformdirs==4.0.0
pluggy==1.2.0
pockets==0.9.1
prompt_toolkit==3.0.48
ptyprocess==0.7.0
pycodestyle==2.7.0
pydocstyle==6.1.1
pyflakes==2.3.1
Pygments==2.17.2
pyproject-api==1.5.3
pytest==7.4.4
pytz==2025.2
requests==2.31.0
six==1.17.0
snowballstemmer==2.2.0
Sphinx==5.3.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-napoleon==0.7
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
tomli==2.0.1
tox==4.8.0
traitlets==5.9.0
typing_extensions==4.7.1
urllib3==2.0.7
virtualenv==20.26.6
wcwidth==0.2.13
zipp==3.15.0

name: collections-extended
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.17
      - babel==2.14.0
      - backcall==0.2.0
      - bump2version==1.0.1
      - bumpversion==0.6.0
      - cachetools==5.5.2
      - chardet==5.2.0
      - charset-normalizer==3.4.1
      - codecov==2.1.13
      - colorama==0.4.6
      - coverage==7.2.7
      - decorator==5.1.1
      - distlib==0.3.9
      - docutils==0.19
      - exceptiongroup==1.2.2
      - filelock==3.12.2
      - flake8==3.9.2
      - flake8-docstrings==1.7.0
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - ipython==7.34.0
      - jedi==0.19.2
      - jinja2==3.1.6
      - markupsafe==2.1.5
      - matplotlib-inline==0.1.6
      - mccabe==0.6.1
      - packaging==24.0
      - parso==0.8.4
      - pexpect==4.9.0
      - pickleshare==0.7.5
      - platformdirs==4.0.0
      - pluggy==1.2.0
      - pockets==0.9.1
      - prompt-toolkit==3.0.48
      - ptyprocess==0.7.0
      - pycodestyle==2.7.0
      - pydocstyle==6.1.1
      - pyflakes==2.3.1
      - pygments==2.17.2
      - pyproject-api==1.5.3
      - pytest==7.4.4
      - pytz==2025.2
      - requests==2.31.0
      - six==1.17.0
      - snowballstemmer==2.2.0
      - sphinx==5.3.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-napoleon==0.7
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - tomli==2.0.1
      - tox==4.8.0
      - traitlets==5.9.0
      - typing-extensions==4.7.1
      - urllib3==2.0.7
      - virtualenv==20.26.6
      - wcwidth==0.2.13
      - zipp==3.15.0
prefix: /opt/conda/envs/collections-extended

tests/test_indexed_dict.py::test_get_specifying_missing_default[indexing0] tests/test_indexed_dict.py::test_get_specifying_missing_default[indexing1] tests/test_indexed_dict.py::test_get_specifying_missing_default[indexing2] tests/test_indexed_dict.py::test_get_deprecated_param tests/test_indexed_dict.py::test_get_duplicate_default tests/test_indexed_dict.py::test_pop_duplicate_default tests/test_indexed_dict.py::test_deprecated_pop_default
tests/test_bags.py::test_init tests/test_bags.py::test_repr tests/test_bags.py::test_str tests/test_bags.py::test_count tests/test_bags.py::test_nlargest tests/test_bags.py::test_nlargest_deprecated tests/test_bags.py::test_from_map tests/test_bags.py::test_copy tests/test_bags.py::test_len tests/test_bags.py::test_contains tests/test_bags.py::test_compare_eq_set[-] tests/test_bags.py::test_compare_eq_set[a-a] tests/test_bags.py::test_compare_eq_set[ab-ab] tests/test_bags.py::test_compare_ne_set[ab-a] tests/test_bags.py::test_compare_ne_set[a-ab] tests/test_bags.py::test_compare_ne_set[aa-a] tests/test_bags.py::test_compare_ne_set[aa-ab] tests/test_bags.py::test_compare_ne_set[ac-ab] tests/test_bags.py::test_compare_unorderable tests/test_bags.py::test_rich_comp_equal tests/test_bags.py::test_rich_comp_superset tests/test_bags.py::test_rich_comp_subset tests/test_bags.py::test_rich_comp_unorderable_eq_len tests/test_bags.py::test_rich_comp_unorderable_diff_len tests/test_bags.py::test_rich_comp_type_mismatch tests/test_bags.py::test_comparison_chaining tests/test_bags.py::test_and tests/test_bags.py::test_isdisjoint tests/test_bags.py::test_or tests/test_bags.py::test_add_op tests/test_bags.py::test_add tests/test_bags.py::test_clear tests/test_bags.py::test_discard tests/test_bags.py::test_sub tests/test_bags.py::test_mul tests/test_bags.py::test_mul_empty_set tests/test_bags.py::test_product tests/test_bags.py::test_product_commutative tests/test_bags.py::test_xor tests/test_bags.py::test_ior tests/test_bags.py::test_iand tests/test_bags.py::test_ixor tests/test_bags.py::test_isub tests/test_bags.py::test_remove_all tests/test_bags.py::test_iadd tests/test_bags.py::test_hash tests/test_bags.py::test_num_unique_elems tests/test_bags.py::test_pop tests/test_bags.py::test_hashability tests/test_indexed_dict.py::test_empty_construction tests/test_indexed_dict.py::test_dict_construction tests/test_indexed_dict.py::test_kwargs_construction tests/test_indexed_dict.py::test_tuples_construction tests/test_indexed_dict.py::test_clear tests/test_indexed_dict.py::test_get_key_found[indexing0] tests/test_indexed_dict.py::test_get_key_found[indexing1] tests/test_indexed_dict.py::test_get_key_found[indexing2] tests/test_indexed_dict.py::test_get_missing_default[indexing0] tests/test_indexed_dict.py::test_get_missing_default[indexing1] tests/test_indexed_dict.py::test_get_missing_default[indexing2] tests/test_indexed_dict.py::test_get_both_key_and_index tests/test_indexed_dict.py::test_get_no_key_or_index tests/test_indexed_dict.py::test_pop_found[indexing0] tests/test_indexed_dict.py::test_pop_found[indexing1] tests/test_indexed_dict.py::test_pop_found[indexing2] tests/test_indexed_dict.py::test_pop_last tests/test_indexed_dict.py::test_pop_missing_default[indexing0] tests/test_indexed_dict.py::test_pop_missing_default[indexing1] tests/test_indexed_dict.py::test_pop_missing_default[indexing2] tests/test_indexed_dict.py::test_pop_missing_key_no_default tests/test_indexed_dict.py::test_pop_missing_index_no_default[100] tests/test_indexed_dict.py::test_pop_missing_index_no_default[-6] tests/test_indexed_dict.py::test_pop_empty_default tests/test_indexed_dict.py::test_pop_empty_no_default tests/test_indexed_dict.py::test_pop_both_key_and_index tests/test_indexed_dict.py::test_fast_pop_found[indexing0] tests/test_indexed_dict.py::test_fast_pop_found[indexing1] tests/test_indexed_dict.py::test_fast_pop_found[indexing2] tests/test_indexed_dict.py::test_fast_pop_last tests/test_indexed_dict.py::test_fast_pop_last_key tests/test_indexed_dict.py::test_fast_pop_missing_key tests/test_indexed_dict.py::test_fast_pop_missing_index tests/test_indexed_dict.py::test_fast_pop_empty tests/test_indexed_dict.py::test_fast_pop_both_key_and_index tests/test_indexed_dict.py::test_popitem tests/test_indexed_dict.py::test_popitem_first tests/test_indexed_dict.py::test_popitem_empty tests/test_indexed_dict.py::test_copy tests/test_indexed_dict.py::test_move_to_end_key_found[indexing0] tests/test_indexed_dict.py::test_move_to_end_key_found[indexing1] tests/test_indexed_dict.py::test_move_to_end_key_found[indexing2] tests/test_indexed_dict.py::test_move_to_end_noop tests/test_indexed_dict.py::test_move_to_begin_key_found[indexing0] tests/test_indexed_dict.py::test_move_to_begin_key_found[indexing1] tests/test_indexed_dict.py::test_move_to_begin_key_found[indexing2] tests/test_indexed_dict.py::test_move_to_begin_noop tests/test_indexed_dict.py::test_move_to_end_missing_key tests/test_indexed_dict.py::test_move_to_end_missing_index[100] tests/test_indexed_dict.py::test_move_to_end_missing_index[-6] tests/test_indexed_dict.py::test_move_to_end_both_key_and_index tests/test_indexed_dict.py::test_move_to_end_no_key_or_index tests/test_indexed_dict.py::test_index tests/test_indexed_dict.py::test_index_missing tests/test_indexed_dict.py::test_key tests/test_indexed_dict.py::test_key_negative tests/test_indexed_dict.py::test_key_missing tests/test_indexed_dict.py::test_len tests/test_indexed_dict.py::test_getitem tests/test_indexed_dict.py::test_getitem_missing tests/test_indexed_dict.py::test_setitem_overwrite tests/test_indexed_dict.py::test_setitem_create tests/test_indexed_dict.py::test_delitem tests/test_indexed_dict.py::test_delitem_missing tests/test_indexed_dict.py::test_contains tests/test_indexed_dict.py::test_keys tests/test_indexed_dict.py::test_values tests/test_indexed_dict.py::test_none_key tests/test_indexed_dict.py::test_repr
collections_extended/bags.py collections_extended/indexed_dict.py collections_extended/_util.py
collections_extended/bags.py collections_extended/indexed_dict.py collections_extended/_util.py