diff --git a/release-notes/VERSION b/release-notes/VERSION
index 0871810..6a2291d 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -19,7 +19,7 @@
 #253: Add `JsonGenerator. writeEmbeddedObject()` to allow writes of opaque native types
  (suggested by Gregoire C)
 
-2.7.2 (not yet released)
+2.7.2 (26-Feb-2016)
 
 #246: Fix UTF8JsonGenerator to allow QUOTE_FIELD_NAMES to be toggled
  (suggested by philipa@github)
diff --git a/src/main/java/com/fasterxml/jackson/core/JsonGenerator.java b/src/main/java/com/fasterxml/jackson/core/JsonGenerator.java
index 4804fb3..cef4f9b 100644
--- a/src/main/java/com/fasterxml/jackson/core/JsonGenerator.java
+++ b/src/main/java/com/fasterxml/jackson/core/JsonGenerator.java
@@ -1480,9 +1480,9 @@
      * parser, although it may cause parser to internally process
      * more data (if it lazy loads contents of value events, for example)
      */
-    public void copyCurrentEvent(JsonParser jp) throws IOException
+    public void copyCurrentEvent(JsonParser p) throws IOException
     {
-        JsonToken t = jp.getCurrentToken();
+        JsonToken t = p.getCurrentToken();
         // sanity check; what to do?
         if (t == null) {
             _reportError("No current event to copy");
@@ -1503,36 +1503,36 @@
             writeEndArray();
             break;
         case ID_FIELD_NAME:
-            writeFieldName(jp.getCurrentName());
+            writeFieldName(p.getCurrentName());
             break;
         case ID_STRING:
-            if (jp.hasTextCharacters()) {
-                writeString(jp.getTextCharacters(), jp.getTextOffset(), jp.getTextLength());
+            if (p.hasTextCharacters()) {
+                writeString(p.getTextCharacters(), p.getTextOffset(), p.getTextLength());
             } else {
-                writeString(jp.getText());
+                writeString(p.getText());
             }
             break;
         case ID_NUMBER_INT:
         {
-            NumberType n = jp.getNumberType();
+            NumberType n = p.getNumberType();
             if (n == NumberType.INT) {
-                writeNumber(jp.getIntValue());
+                writeNumber(p.getIntValue());
             } else if (n == NumberType.BIG_INTEGER) {
-                writeNumber(jp.getBigIntegerValue());
+                writeNumber(p.getBigIntegerValue());
             } else {
-                writeNumber(jp.getLongValue());
+                writeNumber(p.getLongValue());
             }
             break;
         }
         case ID_NUMBER_FLOAT:
         {
-            NumberType n = jp.getNumberType();
+            NumberType n = p.getNumberType();
             if (n == NumberType.BIG_DECIMAL) {
-                writeNumber(jp.getDecimalValue());
+                writeNumber(p.getDecimalValue());
             } else if (n == NumberType.FLOAT) {
-                writeNumber(jp.getFloatValue());
+                writeNumber(p.getFloatValue());
             } else {
-                writeNumber(jp.getDoubleValue());
+                writeNumber(p.getDoubleValue());
             }
             break;
         }
@@ -1546,7 +1546,7 @@
             writeNull();
             break;
         case ID_EMBEDDED_OBJECT:
-            writeObject(jp.getEmbeddedObject());
+            writeObject(p.getEmbeddedObject());
             break;
         default:
             _throwInternal();
@@ -1583,37 +1583,37 @@
      * the event parser already pointed to (if there were no
      * enclosed events), or the last enclosed event copied.
      */
-    public void copyCurrentStructure(JsonParser jp) throws IOException
+    public void copyCurrentStructure(JsonParser p) throws IOException
     {
-        JsonToken t = jp.getCurrentToken();
+        JsonToken t = p.getCurrentToken();
         if (t == null) {
             _reportError("No current event to copy");
         }
         // Let's handle field-name separately first
         int id = t.id();
         if (id == ID_FIELD_NAME) {
-            writeFieldName(jp.getCurrentName());
-            t = jp.nextToken();
+            writeFieldName(p.getCurrentName());
+            t = p.nextToken();
             id = t.id();
             // fall-through to copy the associated value
         }
         switch (id) {
         case ID_START_OBJECT:
             writeStartObject();
-            while (jp.nextToken() != JsonToken.END_OBJECT) {
-                copyCurrentStructure(jp);
+            while (p.nextToken() != JsonToken.END_OBJECT) {
+                copyCurrentStructure(p);
             }
             writeEndObject();
             break;
         case ID_START_ARRAY:
             writeStartArray();
-            while (jp.nextToken() != JsonToken.END_ARRAY) {
-                copyCurrentStructure(jp);
+            while (p.nextToken() != JsonToken.END_ARRAY) {
+                copyCurrentStructure(p);
             }
             writeEndArray();
             break;
         default:
-            copyCurrentEvent(jp);
+            copyCurrentEvent(p);
         }
     }
 
