diff --git a/NEWS b/NEWS
index fce2ade06b..ac227110de 100644
--- a/NEWS
+++ b/NEWS
@@ -77,6 +77,9 @@ sufficient information, see the ChangeLog file or Redmine
# .bar
.baz # => foo.baz
+* Calling a private method with a literal self.
as the receiver
+ is now allowed. [Feature #11297] [Feature #16123]
+
=== Core classes updates (outstanding ones only)
Complex::
diff --git a/doc/syntax/assignment.rdoc b/doc/syntax/assignment.rdoc
index 7361b7d3bd..91d5d5bba4 100644
--- a/doc/syntax/assignment.rdoc
+++ b/doc/syntax/assignment.rdoc
@@ -93,7 +93,8 @@ be cached. To call the method, use self.big_calculation
.
You can force a method call by using empty argument parentheses as shown above
or by using an explicit receiver like self.
. Using an explicit
-receiver may raise a NameError if the method's visibility is not public.
+receiver may raise a NameError if the method's visibility is not public or the
+receiver is the literal self
.
Another commonly confusing case is when using a modifier +if+:
diff --git a/doc/syntax/modules_and_classes.rdoc b/doc/syntax/modules_and_classes.rdoc
index dd70d4ac21..8fc84d522a 100644
--- a/doc/syntax/modules_and_classes.rdoc
+++ b/doc/syntax/modules_and_classes.rdoc
@@ -191,8 +191,8 @@ Here is an example:
a.n b # raises NoMethodError A is not a subclass of B
The third visibility is +private+. A private method may not be called with a
-receiver, not even +self+. If a private method is called with a receiver a
-NoMethodError will be raised.
+receiver, not even if it equals +self+. If a private method is called with a
+receiver other than a literal +self+ a NoMethodError will be raised.
=== +alias+ and +undef+