diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowEncrypted.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowEncrypted.java
index 42682f5..ba1aaf4 100644
--- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowEncrypted.java
+++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowEncrypted.java
@@ -28,6 +28,7 @@
 import java.util.TreeMap;
 
 import org.apache.poi.EncryptedDocumentException;
+import org.apache.poi.ddf.EscherRecordTypes;
 import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException;
 import org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException;
 import org.apache.poi.hslf.record.DocumentEncryptionAtom;
@@ -220,7 +221,7 @@
             offset += 8;
             int endOffset = offset + rlen;
 
-            if (recType == 0xF007) {
+            if (recType == EscherRecordTypes.BSE.typeID) {
                 // TOOD: get a real example file ... to actual test the FBSE entry
                 // not sure where the foDelay block is
 
@@ -298,7 +299,7 @@
             offset += 8;
             int endOffset = offset + rlen;
 
-            if (recType == 0xF007) {
+            if (recType == EscherRecordTypes.BSE.typeID) {
                 // TOOD: get a real example file ... to actual test the FBSE entry
                 // not sure where the foDelay block is
 
diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
index 4295712..98b62bf 100644
--- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
+++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
@@ -40,6 +40,7 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.poi.POIDocument;
+import org.apache.poi.ddf.EscherRecordTypes;
 import org.apache.poi.hpsf.PropertySet;
 import org.apache.poi.hslf.exceptions.CorruptPowerPointFileException;
 import org.apache.poi.hslf.exceptions.HSLFException;
@@ -380,7 +381,7 @@
 
                 // When parsing the BStoreDelay stream, [MS-ODRAW] says that we
                 //  should terminate if the type isn't 0xf007 or 0xf018->0xf117
-                if (!((type == 0xf007) || (type >= 0xf018 && type <= 0xf117))) {
+                if (!((type == EscherRecordTypes.BSE.typeID) || (type >= 0xf018 && type <= 0xf117))) {
                     break;
                 }
 
diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/PICFAndOfficeArtData.java b/src/scratchpad/src/org/apache/poi/hwpf/model/PICFAndOfficeArtData.java
index 85205b7..fdf0a12 100644
--- a/src/scratchpad/src/org/apache/poi/hwpf/model/PICFAndOfficeArtData.java
+++ b/src/scratchpad/src/org/apache/poi/hwpf/model/PICFAndOfficeArtData.java
@@ -22,6 +22,7 @@
 import org.apache.poi.ddf.DefaultEscherRecordFactory;
 import org.apache.poi.ddf.EscherContainerRecord;
 import org.apache.poi.ddf.EscherRecord;
+import org.apache.poi.ddf.EscherRecordTypes;
 import org.apache.poi.hwpf.model.types.PICFAbstractType;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.Internal;
@@ -71,7 +72,7 @@
         {
             EscherRecord nextRecord = escherRecordFactory.createRecord(
                     dataStream, offset );
-            if ( nextRecord.getRecordId() != (short) 0xF007
+            if ( nextRecord.getRecordId() != EscherRecordTypes.BSE.typeID
                     && ( nextRecord.getRecordId() < (short) 0xF018 || nextRecord
                             .getRecordId() > (short) 0xF117 ) )
                 break;
diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Picture.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Picture.java
index 315e0be..528df95 100644
--- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Picture.java
+++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Picture.java
@@ -34,6 +34,7 @@
 import org.apache.poi.ddf.EscherProperty;
 import org.apache.poi.ddf.EscherPropertyTypes;
 import org.apache.poi.ddf.EscherRecord;
+import org.apache.poi.ddf.EscherRecordTypes;
 import org.apache.poi.hwpf.model.PICF;
 import org.apache.poi.hwpf.model.PICFAndOfficeArtData;
 import org.apache.poi.sl.image.ImageHeaderPNG;
@@ -512,56 +513,51 @@
         }
 
         EscherRecord escherRecord = _blipRecords.get( 0 );
-        switch ( escherRecord.getRecordId() )
-        {
-        case (short) 0xF007:
-        {
+        short recordId = escherRecord.getRecordId();
+        if (recordId == EscherRecordTypes.BSE.typeID) {
             EscherBSERecord bseRecord = (EscherBSERecord) escherRecord;
-            switch ( bseRecord.getBlipTypeWin32() )
-            {
-            case 0x00:
-                return PictureType.UNKNOWN;
-            case 0x01:
-                return PictureType.UNKNOWN;
-            case 0x02:
-                return PictureType.EMF;
-            case 0x03:
-                return PictureType.WMF;
-            case 0x04:
-                return PictureType.PICT;
-            case 0x05:
-                return PictureType.JPEG;
-            case 0x06:
-                return PictureType.PNG;
-            case 0x07:
-                return PictureType.BMP;
-            case 0x11:
-                return PictureType.TIFF;
-            case 0x12:
-                return PictureType.JPEG;
-            default:
-                return PictureType.UNKNOWN;
+            switch (bseRecord.getBlipTypeWin32()) {
+                case 0x00:
+                    return PictureType.UNKNOWN;
+                case 0x01:
+                    return PictureType.UNKNOWN;
+                case 0x02:
+                    return PictureType.EMF;
+                case 0x03:
+                    return PictureType.WMF;
+                case 0x04:
+                    return PictureType.PICT;
+                case 0x05:
+                    return PictureType.JPEG;
+                case 0x06:
+                    return PictureType.PNG;
+                case 0x07:
+                    return PictureType.BMP;
+                case 0x11:
+                    return PictureType.TIFF;
+                case 0x12:
+                    return PictureType.JPEG;
+                default:
+                    return PictureType.UNKNOWN;
             }
-        }
-        case (short) 0xF01A:
+        } else if (recordId == (short) 0xF01A) {
             return PictureType.EMF;
-        case (short) 0xF01B:
+        } else if (recordId == (short) 0xF01B) {
             return PictureType.WMF;
-        case (short) 0xF01C:
+        } else if (recordId == (short) 0xF01C) {
             return PictureType.PICT;
-        case (short) 0xF01D:
+        } else if (recordId == (short) 0xF01D) {
             return PictureType.JPEG;
-        case (short) 0xF01E:
+        } else if (recordId == (short) 0xF01E) {
             return PictureType.PNG;
-        case (short) 0xF01F:
+        } else if (recordId == (short) 0xF01F) {
             return PictureType.BMP;
-        case (short) 0xF029:
+        } else if (recordId == (short) 0xF029) {
             return PictureType.TIFF;
-        case (short) 0xF02A:
+        } else if (recordId == (short) 0xF02A) {
             return PictureType.JPEG;
-        default:
-            return PictureType.UNKNOWN;
         }
+        return PictureType.UNKNOWN;
     }
 
     /**
