diff --git a/nif.xml b/nif.xml
index 395625155fc3175ef0d4850b3f05717016b5774c..d5f8f1c1577b836cb496e2bcffe09ac701bfedb7 100644
--- a/nif.xml
+++ b/nif.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE niftoolsxml>
-<niftoolsxml version="0.7.1.1">
+<niftoolsxml version="0.8.0.0">
     <!--These are the version numbers marked as supported by NifSkope.
         The num argument is the numeric representation created by storing
         each part of the version in a byte.  For example, 4.0.0.2 is
@@ -29,7 +29,7 @@
     <version num="20.0.0.4">Civilization IV, Oblivion, Sid Meier's Railroads</version>
     <version num="20.0.0.5">Oblivion</version>
     <version num="20.1.0.3">Megami Tensei: Imagine</version>
-    <version num="20.2.0.7">Emerge, Empire Earth III, Fallout 3, Skyrim</version>
+    <version num="20.2.0.7">Emerge, Empire Earth III, Fallout 3, Skyrim, Fallout 4</version>
     <version num="20.2.0.8">Emerge, Empire Earth III, Atlantica</version>
     <!-- version 20.3.0.1 is found in Props/GDCLargeContainer.nif-->
     <version num="20.3.0.1">Emerge</version>
@@ -106,7 +106,11 @@
     <basic name="float" count="0" niflibtype="float" nifskopetype="float">
         A standard 32-bit floating point number.
     </basic>
-
+    
+    <basic name="hfloat" count="0" niflibtype="hfloat" nifskopetype="hfloat">
+        A 16-bit floating point number.
+    </basic>
+    
     <basic name="HeaderString" count="0" niflibtype="HeaderString" nifskopetype="headerstring">
         A variable length string that ends with a newline character (0x0A).  The string starts as follows depending on the version:
 
@@ -1049,7 +1053,7 @@
         <add name="a" type="float">Alpha.</add>
     </compound>
 
-    <compound name="ByteColor4"><!-- niflibtype="Color4" nifskopetype="color4" -->
+    <compound name="ByteColor4" nifskopetype="bytecolor4"><!-- niflibtype="Color4" nifskopetype="color4" -->
         A color with alpha (red, green, blue, alpha).
         <add name="r" type="byte">Red color component.</add>
         <add name="g" type="byte">Green color component.</add>
@@ -1081,6 +1085,20 @@
         <add name="Num Vertices" type="ushort">Number of vertices in this group.</add>
         <add name="Vertex Indices" type="ushort" arr1="Num Vertices">The vertex indices.</add>
     </compound>
+    
+    <compound name="ByteVector3" nifskopetype="bytevector3">
+        A vector in 3D space (x,y,z).
+        <add name="x" type="byte">First coordinate.</add>
+        <add name="y" type="byte">Second coordinate.</add>
+        <add name="z" type="byte">Third coordinate.</add>
+    </compound>
+    
+    <compound name="HalfVector3" nifskopetype="halfvector3">
+        A vector in 3D space (x,y,z).
+        <add name="x" type="hfloat">First coordinate.</add>
+        <add name="y" type="hfloat">Second coordinate.</add>
+        <add name="z" type="hfloat">Third coordinate.</add>
+    </compound>
 
     <compound name="Vector3" niflibtype="Vector3" nifskopetype="vector3">
         A vector in 3D space (x,y,z).
@@ -1268,6 +1286,7 @@
         <add name="Unknown Int 3" type="uint" default="0" ver1="30.0.0.2">Unknown. Possibly User Version 2?</add>
         <add name="Export Info" type="ExportInfo" ver1="10.0.1.2" ver2="10.0.1.2" />
         <add name="Export Info" type="ExportInfo" ver1="10.1.0.0" cond="(User Version &gt;= 10) || ((User Version == 1) &amp;&amp; (Version != 10.2.0.0))" />
+        <add name="Export Info 3" type="ShortString" cond="((Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130))" />
         <add name="Num Block Types" type="ushort" ver1="10.0.1.0">Number of object types in this NIF file.</add>
         <add name="Block Types" type="SizedString" arr1="Num Block Types" ver1="10.0.1.0">List of all object types used in this NIF file.</add>
         <add name="Block Type Index" type="BlockTypeIndex" arr1="Num Blocks" ver1="10.0.1.0">Maps file objects on their corresponding type: first file object is of type object_types[object_type_index[0]], the second of object_types[object_type_index[1]], etc.</add>
@@ -1371,6 +1390,12 @@
         <add name="u" type="float">First coordinate.</add>
         <add name="v" type="float">Second coordinate.</add>
     </compound>
+    
+    <compound name="HalfTexCoord" nifskopetype="halfvector2">
+        Texture coordinates (u,v).
+        <add name="u" type="hfloat">First coordinate.</add>
+        <add name="v" type="hfloat">Second coordinate.</add>
+    </compound>
 
     <compound name="TexDesc">
         Texture description.
@@ -2378,9 +2403,9 @@
         <add name="Data Layers" type="HavokColFilter" arr1="Num Data Layers">Havok Layers for each strip data.</add>
     </niobject>
 
-    <niobject name="NiExtraData" abstract="1" inherit="NiObject">
+    <niobject name="NiExtraData" abstract="0" inherit="NiObject">
         A generic extra data object.
-        <add name="Name" type="string" ver1="10.0.1.0">Name of this object.</add>
+        <add name="Name" type="string" ver1="10.0.1.0" cond="!BSExtraData">Name of this object.</add>
         <add name="Next Extra Data" type="Ref" template="NiExtraData" ver2="4.2.2.0">Block number of the next extra data object.</add>
     </niobject>
 
@@ -2526,11 +2551,11 @@
 
     <niobject name="NiDynamicEffect" abstract="1" inherit="NiAVObject">
         A dynamic effect such as a light or environment map.
-        <add name="Switch State" type="bool" ver1="10.1.0.106">Turns effect on and off?  Switches list to list of unaffected nodes?</add>
-        <add name="Num Affected Node List Pointers" type="uint" ver2="4.0.0.2">The number of affected nodes referenced.</add>
-        <add name="Num Affected Nodes" type="uint" ver1="10.1.0.0">The number of affected nodes referenced.</add>
+        <add name="Switch State" type="bool" ver1="10.1.0.106" vercond="User Version 2 &lt; 130">Turns effect on and off?  Switches list to list of unaffected nodes?</add>
+        <add name="Num Affected Node List Pointers" type="uint" ver2="4.0.0.2" >The number of affected nodes referenced.</add>
         <add name="Affected Node List Pointers" type="uint" arr1="Num Affected Node List Pointers" ver2="4.0.0.2">This is probably the list of affected nodes. For some reason i do not know the max exporter seems to write pointers instead of links. But it doesn&#039;t matter because at least in version 4.0.0.2 the list is automagically updated by the engine during the load stage.</add>
-        <add name="Affected Nodes" type="Ref" template="NiAVObject" arr1="Num Affected Nodes" ver1="10.1.0.0">The list of affected nodes?</add>
+        <add name="Num Affected Nodes" type="uint" ver1="10.1.0.0" vercond="User Version 2 &lt; 130">The number of affected nodes referenced.</add>
+        <add name="Affected Nodes" type="Ref" template="NiAVObject" arr1="Num Affected Nodes" ver1="10.1.0.0" vercond="User Version 2 &lt; 130">The list of affected nodes?</add>
     </niobject>
 
     <niobject name="NiLight" abstract="1" inherit="NiDynamicEffect">
@@ -2789,8 +2814,12 @@
 
     <niobject name="NiGeometry" abstract="1" inherit="NiAVObject">
         Describes a visible scene element with vertices like a mesh, a particle system, lines, etc.
-        <add name="Data" type="Ref" template="NiGeometryData">Data index (NiTriShapeData/NiTriStripData).</add>
-        <add name="Skin Instance" type="Ref" template="NiSkinInstance" ver1="3.3.0.13">Skin instance index.</add>
+        <add name="Data" type="Ref" template="NiGeometryData" vercond="!((Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130))">Data index (NiTriShapeData/NiTriStripData).</add>
+        <add name="Data" type="Ref" template="NiGeometryData" ver="20.2.0.7" userver2="130" cond="!NiParticleSystem">Data index (NiTriShapeData/NiTriStripData).</add>
+        <add name="Data" type="uint" ver="20.2.0.7" userver2="130" cond="NiParticleSystem">Data index (NiTriShapeData/NiTriStripData).</add>
+        <add name="Skin Instance" type="Ref" template="NiSkinInstance" vercond="(Version &gt;= 3.3.0.13) &amp;&amp; !((Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130))">Skin instance index.</add>
+        <add name="Skin Instance" type="Ref" template="NiSkinInstance" ver="20.2.0.7" userver2="130" cond="!NiParticleSystem">Skin instance index.</add>
+        <add name="Skin Instance" type="uint" ver="20.2.0.7" userver2="130" cond="NiParticleSystem">Skin instance index.</add>
         <add name="Num Materials" type="uint" ver1="20.2.0.7">Num Materials</add>
         <add name="Material Name" type="string" arr1="Num Materials" ver1="20.2.0.7">Unknown string.  Shader?</add>
         <add name="Material Extra Data" type="int" arr1="Num Materials" ver1="20.2.0.7">Unknown integer; often -1. (Is this a link, array index?)</add>
@@ -2800,7 +2829,8 @@
         <add name="Unknown Integer" type="int" cond="Has Shader" ver1="10.0.1.0" ver2="20.1.0.3">Unknown value, usually -1. (Not a link)</add>
         <add name="Unknown Byte" type="byte" default="255" userver="1">Cyanide extension (only in version 10.2.0.0?).</add>
         <add name="Unknown Integer 2" type="int" ver1="10.4.0.1" ver2="10.4.0.1">Unknown.</add>
-        <add name="Dirty Flag" type="bool" ver1="20.2.0.7">Dirty Flag?</add>
+        <add name="Dirty Flag" type="bool" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 &lt; 130)">Dirty Flag?</add>
+        <add name="Unknown Integer 3" type="int" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)">Dirty Flag?</add>
         <add name="BS Properties" type="Ref" template="NiProperty" arr1="2" ver1="20.2.0.7" userver="12">Two property links, used by Bethesda.</add>
     </niobject>
 
@@ -3347,8 +3377,8 @@
         Generic node object for grouping.
         <add name="Num Children" type="uint">The number of child objects.</add>
         <add name="Children" type="Ref" template="NiAVObject" arr1="Num Children">List of child node object indices.</add>
-        <add name="Num Effects" type="uint">The number of references to effect objects that follow.</add>
-        <add name="Effects" type="Ref" template="NiDynamicEffect" arr1="Num Effects">List of node effects. ADynamicEffect?</add>
+        <add name="Num Effects" type="uint" vercond="User Version 2 &lt; 130">The number of references to effect objects that follow.</add>
+        <add name="Effects" type="Ref" template="NiDynamicEffect" arr1="Num Effects" vercond="User Version 2 &lt; 130">List of node effects. ADynamicEffect?</add>
     </niobject>
 
     <niobject name="NiBone" abstract="0" inherit="NiNode">
@@ -3490,6 +3520,9 @@
 		<add name="Unknown Short 2" type="ushort" vercond="User Version >= 12">Unknown</add>
 		<add name="Unknown Short 3" type="ushort" vercond="User Version >= 12">Unknown</add>
 		<add name="Unknown Int 1" type="uint" vercond="User Version >= 12">Unknown</add>
+        <add name="Unknown Int 2" type="int" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)">Unknown</add>
+        <add name="Unknown Int 3" type="int" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)">Unknown</add>
+        <add name="Data" type="Ref" template="NiPSysData" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)">Unknown</add>
 		<add name="World Space" type="bool" ver1="10.1.0.0">If true, Particles are birthed into world space.  If false, Particles are birthed into object space.</add>
         <add name="Num Modifiers" type="uint" ver1="10.1.0.0">The number of modifier references.</add>
         <add name="Modifiers" type="Ref" template="NiPSysModifier" arr1="Num Modifiers" ver1="10.1.0.0">The list of particle modifiers.</add>
@@ -3754,7 +3787,8 @@
     <niobject name="NiPSysMeshEmitter" abstract="0" inherit="NiPSysEmitter">
         Particle emitter that uses points on a specified mesh to emit from.
         <add name="Num Emitter Meshes" type="uint">The number of references to emitter meshes that follow.</add>
-        <add name="Emitter Meshes" type="Ref" template="NiTriBasedGeom" arr1="Num Emitter Meshes">Links to meshes used for emitting.</add>
+        <!-- Note: Reduced strictness of validation -->
+        <add name="Emitter Meshes" type="Ref" template="NiAVObject" arr1="Num Emitter Meshes">Links to meshes used for emitting.</add>
         <add name="Initial Velocity Type" type="VelocityType">The way the particles get their initial direction and speed.</add>
         <add name="Emission Type" type="EmitFrom">The parts of the mesh that the particles emit from.</add>
         <add name="Emission Axis" type="Vector3">The emission axis.</add>
@@ -4861,7 +4895,8 @@
         <add name="Byte 1" type="byte">Unknown</add>
         <add name="Byte 2" type="byte">Unknown</add>
         <add name="Byte 3" type="byte">Unknown</add>
-        <add name="Interpolator 10?" type="Ref" template="NiInterpolator">Unknown, unsure if this is actually another interpolator link.</add>
+        <!-- Note: Reduced strictness of validation -->
+        <add name="Interpolator 10?" type="Ref" template="NiObject">Unknown, unsure if this is actually another interpolator link.</add>
 	</niobject>
 
    <niobject name="BSShaderTextureSet" abstract="0" inherit="NiObject">
@@ -5000,25 +5035,113 @@
         <option value="31" name="SLSF2_HD_LOD_Objects"></option>
     </bitflags>
 
+    <bitflags name="Fallout4ShaderPropertyFlags1" storage="uint">
+        Fallout 4 Shader Property Flags 1
+        <option value="0" name="FSF1_Specular" />
+        <option value="1" name="FSF1_Skinned" />
+        <option value="2" name="FSF1_Temp_Refraction" />
+        <option value="3" name="FSF1_Vertex_Alpha" />
+        <option value="4" name="FSF1_GreyscaleToPalette_Color" />
+        <option value="5" name="FSF1_GreyscaleToPalette_Alpha" />
+        <option value="6" name="FSF1_Use_Falloff" />
+        <option value="7" name="FSF1_Environment_Mapping" />
+        <option value="8" name="FSF1_RGB_Falloff" />
+        <option value="9" name="FSF1_Cast_Shadows" />
+        <option value="10" name="FSF1_Face" />
+        <option value="11" name="FSF1_UI_Mask_Rects" />
+        <option value="12" name="FSF1_Model_Space_Normals" />
+        <option value="13" name="FSF1_Non_Projective_Shadows" />
+        <option value="14" name="FSF1_Landscape" />
+        <option value="15" name="FSF1_Refraction" />
+        <option value="16" name="FSF1_Fire_Refraction" />
+        <option value="17" name="FSF1_Eye_Environment_Mapping" />
+        <option value="18" name="FSF1_Hair" />
+        <option value="19" name="FSF1_Screendoor_Alpha_Fade" />
+        <option value="20" name="FSF1_Localmap_Hide_Secret" />
+        <option value="21" name="FSF1_Skin_Tint" />
+        <option value="22" name="FSF1_Own_Emit" />
+        <option value="23" name="FSF1_Projected_UV" />
+        <option value="24" name="FSF1_Multiple_Textures" />
+        <option value="25" name="FSF1_Tessellate" />
+        <option value="26" name="FSF1_Decal" />
+        <option value="27" name="FSF1_Dynamic_Decal" />
+        <option value="28" name="FSF1_Character_Lighting" />
+        <option value="29" name="FSF1_External_Emittance" />
+        <option value="30" name="FSF1_Soft_Effect" />
+        <option value="31" name="FSF1_ZBuffer_Test" />
+    </bitflags>
+    
+    <bitflags name="Fallout4ShaderPropertyFlags2" storage="uint">
+        Fallout 4 Shader Property Flags 2
+        <option value="0" name="FSF2_ZBuffer_Write" />
+        <option value="1" name="FSF2_LOD_Landscape" />
+        <option value="2" name="FSF2_LOD_Objects" />
+        <option value="3" name="FSF2_No_Fade" />
+        <option value="4" name="FSF2_Double_Sided" />
+        <option value="5" name="FSF2_Vertex_Colors" />
+        <option value="6" name="FSF2_Glow_Map" />
+        <option value="7" name="FSF2_Transform_Changed" />
+        <option value="8" name="FSF2_Dismemberment_Meatcuff" />
+        <option value="9" name="FSF2_Tint" />
+        <option value="10" name="FSF2_Grass_Vertex_Lighting" />
+        <option value="11" name="FSF2_Grass_Uniform_Scale" />
+        <option value="12" name="FSF2_Grass_Fit_Slope" />
+        <option value="13" name="FSF2_Grass_Billboard" />
+        <option value="14" name="FSF2_No_LOD_Land_Blend" />
+        <option value="15" name="FSF2_Dismemberment" />
+        <option value="16" name="FSF2_Wireframe" />
+        <option value="17" name="FSF2_Weapon_Blood" />
+        <option value="18" name="FSF2_Hide_On_Local_Map" />
+        <option value="19" name="FSF2_Premult_Alpha" />
+        <option value="20" name="FSF2_VATS_Target" />
+        <option value="21" name="FSF2_Anisotropic_Lighting" />
+        <option value="22" name="FSF2_Skew_Specular_Alpha" />
+        <option value="23" name="FSF2_Menu_Screen" />
+        <option value="24" name="FSF2_Multi_Layer_Parallax" />
+        <option value="25" name="FSF2_Alpha_Test" />
+        <option value="26" name="FSF2_Gradient_Remap" />
+        <option value="27" name="FSF2_VATS_Target_Draw_All" />
+        <option value="28" name="FSF2_Pipboy_Screen" />
+        <option value="29" name="FSF2_Tree_Anim" />
+        <option value="30" name="FSF2_Effect_Lighting" />
+        <option value="31" name="FSF2_Refraction_Writes_Depth" />
+    </bitflags>
+
     <niobject name="BSLightingShaderProperty"  abstract="0" inherit="NiProperty">
-        Skyrim PP shader for assigning material/shader/texture.
-        <add name="Shader Flags 1" type="SkyrimShaderPropertyFlags1" vercond="User Version == 12" default="2185233153">Skyrim Shader Flags for setting render/shader options.</add>
-        <add name="Shader Flags 2" type="SkyrimShaderPropertyFlags2" vercond="User Version == 12" default="32801">Skyrim Shader Flags for setting render/shader options.</add>
+        Bethesda shader property for Skyrim and later.
+        <add name="Shader Flags 1" type="SkyrimShaderPropertyFlags1" vercond="(User Version 2 != 130)" default="2185233153">Skyrim Shader Flags for setting render/shader options.</add>
+        <add name="Shader Flags 2" type="SkyrimShaderPropertyFlags2" vercond="(User Version 2 != 130)" default="32801">Skyrim Shader Flags for setting render/shader options.</add>
+        <add name="Shader Flags 1" type="Fallout4ShaderPropertyFlags1" vercond="(User Version 2 == 130)" default="2151678465">Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file.</add>
+        <add name="Shader Flags 2" type="Fallout4ShaderPropertyFlags2" vercond="(User Version 2 == 130)" default="129">Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file.</add>
         <add name="UV Offset" type="TexCoord">Offset UVs</add>
         <add name="UV Scale" type="TexCoord" default="1.0, 1.0">Offset UV Scale to repeat tiling textures, see above.</add>
         <add name="Texture Set" type="Ref" template="BSShaderTextureSet">Texture Set, can have override in an esm/esp</add>
         <add name="Emissive Color" type="Color3">Glow color and alpha</add>
         <add name="Emissive Multiple" type="float">Multiplied emissive colors</add>
+        <add name="Wet Material" type="string" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
         <add name="Texture Clamp Mode" type="TexClampMode">How to handle texture borders.</add>
         <add name="Alpha" type="float" default="1.0">The material&#039;s opacity (1=non-transparent).</add>
         <add name="Refraction Strength" type="float">The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1)</add>
         <add name="Glossiness" type="float">The material&#039;s specular power, or glossiness (0-999).</add>
         <add name="Specular Color" type="Color3">Adds a colored highlight.</add>
         <add name="Specular Strength" type="float" default="1.0">Brightness of specular highlight. (0=not visible) (0-999)</add>
-        <add name="Lighting Effect 1" type="float">Controls strength for envmap/backlight/rim/softlight lighting effect?</add>
-        <add name="Lighting Effect 2" type="float">Controls strength for envmap/backlight/rim/softlight lighting effect?</add>
+        <add name="Lighting Effect 1" type="float" vercond="User Version 2 &lt; 130">Controls strength for envmap/backlight/rim/softlight lighting effect?</add>
+        <add name="Lighting Effect 2" type="float" vercond="User Version 2 &lt; 130">Controls strength for envmap/backlight/rim/softlight lighting effect?</add>
+        <add name="Subsurface Rolloff" type="float"  vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Unknown Float 1" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Backlight Power" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Grayscale to Palette Scale" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Fresnel Power" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Wetness Spec Scale" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Wetness Spec Power" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Wetness Min Var" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Wetness Env Map Scale" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Wetness Fresnel Power" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Wetness Metalness" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
         <add name="Environment Map Scale" type="float" cond="Skyrim Shader Type == 1">Scales the intensity of the environment/cube map. (0-1)</add>
+        <add name="Unknown Env Map Int" type="ushort" cond="Skyrim Shader Type == 1" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
         <add name="Skin Tint Color" type="Color3" cond="Skyrim Shader Type == 5">Tints the base texture. Overridden by game settings.</add>
+        <add name="Unknown Skin Tint Int" type="uint" cond="Skyrim Shader Type == 5" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
         <add name="Hair Tint Color" type="Color3" cond="Skyrim Shader Type == 6">Tints the base texture. Overridden by game settings.</add>
         <add name="Max Passes" type="float" cond="Skyrim Shader Type == 7">Max Passes</add>
         <add name="Scale" type="float" cond="Skyrim Shader Type == 7">Scale</add>
@@ -5033,9 +5156,11 @@
     </niobject>
 
     <niobject name="BSEffectShaderProperty" abstract="0" inherit="NiProperty">
-        Skyrim non-PP shader model, used primarily for transparency effects, often as decal.
-        <add name="Shader Flags 1" type="SkyrimShaderPropertyFlags1"></add>
-        <add name="Shader Flags 2" type="SkyrimShaderPropertyFlags2"></add>
+        Bethesda effect shader property for Skyrim and later.
+        <add name="Shader Flags 1" type="SkyrimShaderPropertyFlags1" vercond="(User Version 2 != 130)" />
+        <add name="Shader Flags 2" type="SkyrimShaderPropertyFlags2" vercond="(User Version 2 != 130)" />
+        <add name="Shader Flags 1" type="Fallout4ShaderPropertyFlags1" vercond="(User Version 2 == 130)" />
+        <add name="Shader Flags 2" type="Fallout4ShaderPropertyFlags2" vercond="(User Version 2 == 130)" />
         <add name="UV Offset" type="TexCoord">Offset UVs</add>
         <add name="UV Scale" type="TexCoord" default="1.0, 1.0">Offset UV Scale to repeat tiling textures</add>
         <add name="Source Texture"  type="SizedString">points to an external texture.</add>
@@ -5049,6 +5174,10 @@
         <add name="Emissive Multiple" type="float">Multiplier for Emissive Color (RGB part)</add>
         <add name="Soft Falloff Depth" type="float"></add>
         <add name="Greyscale Texture"  type="SizedString">Points to an external texture, used as palette for SLSF1_Greyscale_To_PaletteColor/SLSF1_Greyscale_To_PaletteAlpha.</add>
+        <add name="Env Map Texture" type="SizedString" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Normal Texture" type="SizedString" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Env Mask Texture" type="SizedString" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
+        <add name="Environment Map Scale" type="float" vercond="(Version == 20.2.0.7) &amp;&amp; (User Version 2 == 130)" />
     </niobject>
     
     <bitflags name="SkyrimWaterShaderFlags" storage="byte">
@@ -6243,4 +6372,260 @@
     </niobject>
     
     
+    <!-- Fallout 4 Geometry -->
+    
+    <bitflags name="VertexFlags" storage="ushort">
+        <option value="0" name="VF_Unknown_1" />       <!-- & 1 -->
+        <option value="1" name="VF_Unknown_2" />       <!-- & 2 -->
+        <option value="2" name="VF_Unknown_3" />       <!-- & 4 -->
+        <option value="3" name="VF_Unknown_4" />       <!-- & 8 -->
+        <option value="4" name="VF_Vertex" />          <!-- & 16 -->
+        <option value="5" name="VF_UVs" />             <!-- & 32 -->
+        <option value="6" name="VF_Unknown_5" />       <!-- & 64 -->
+        <option value="7" name="VF_Normals" />         <!-- & 128 -->
+        <option value="8" name="VF_Tangents" />        <!-- & 256 -->
+        <option value="9" name="VF_Vertex_Colors" />   <!-- & 512 -->
+        <option value="10" name="VF_Skinned" />        <!-- & 1024 -->
+        <option value="11" name="VF_Unknown_6" />      <!-- & 2048 -->
+        <option value="12" name="VF_Male_Eyes" />      <!-- & 4096 -->
+        <option value="13" name="VF_Unknown_7" />      <!-- & 8192 -->
+        <option value="14" name="VF_Full_Precision" /> <!-- & 16384 -->
+        <option value="15" name="VF_Unknown_8" />      <!-- & 32768 -->
+    </bitflags>
+    
+    <compound name="BSVertexData">
+        <add name="Vertex" type="HalfVector3" cond="((ARG &amp; 16) != 0) &amp;&amp; ((ARG &amp; 16384) == 0)" />
+        <add name="Bitangent X" type="hfloat" cond="((ARG &amp; 256) != 0) &amp;&amp; ((ARG &amp; 16384) == 0)" />
+        <add name="Unknown Short" type="ushort" cond="((ARG &amp; 256) == 0) &amp;&amp; ((ARG &amp; 16384) == 0)" />
+        <add name="Vertex" type="Vector3" cond="((ARG &amp; 16) != 0) &amp;&amp; ((ARG &amp; 16384) != 0)" />
+        <add name="Bitangent X" type="float" cond="((ARG &amp; 256) != 0) &amp;&amp; ((ARG &amp; 16384) != 0)" />
+        <add name="Unknown Int" type="uint" cond="((ARG &amp; 256) == 0) &amp;&amp; ((ARG &amp; 16384) != 0)" />
+        <add name="UV" type="HalfTexCoord" cond="(ARG &amp; 32) != 0" />
+        <add name="Normal" type="ByteVector3" cond="(ARG &amp; 128) != 0" />
+        <add name="Bitangent Y" type="byte" cond="(ARG &amp; 128) != 0" />
+        <add name="Tangent" type="ByteVector3" cond="((ARG &amp; 128) != 0) &amp;&amp; ((ARG &amp; 256) != 0)" />
+        <add name="Bitangent Z" type="byte" cond="((ARG &amp; 128) != 0) &amp;&amp; ((ARG &amp; 256) != 0)" />
+        <add name="Vertex Colors" type="ByteColor4" cond="(ARG &amp; 512) != 0" />
+        <add name="Bone Weights" type="hfloat" arr1="4" cond="(ARG &amp; 1024) != 0" />
+        <add name="Bone Indices" type="byte" arr1="4" cond="(ARG &amp; 1024) != 0" />
+        <add name="Unknown Int 2" type="uint" cond="(ARG &amp; 4096) != 0" />
+    </compound>
+
+    <niobject name="BSTriShape" abstract="0" inherit="NiAVObject">
+        Fallout 4 Tri Shape
+        <add name="Bounding Sphere" type="SphereBV" />
+        <add name="Skin" type="Ref" template="NiObject" />
+        <add name="BS Properties" type="Ref" template="NiProperty" arr1="2" />
+        <add name="Vertex Size" type="byte" />
+        <add name="Float Size" type="byte" />
+        <add name="VF3" type="byte" />
+        <add name="VF4" type="byte" />
+        <add name="VF5" type="byte" />
+        <add name="VF" type="VertexFlags" />
+        <add name="VF8" type="byte" />
+        <add name="Num Triangles" type="uint" />
+        <add name="Num Vertices" type="ushort" />
+        <add name="Data Size" type="uint" />
+        <add name="Vertex Data" type="BSVertexData" arr1="Num Vertices" arg="VF" cond="Data Size &gt; 0" />
+        <add name="Triangles" type="Triangle" arr1="Num Triangles" cond="Data Size &gt; 0" />
+    </niobject>
+
+    <niobject name="BSMeshLODTriShape" inherit="BSTriShape">
+        Fallout 4 LOD Tri Shape
+        <add name="LOD0 Size" type="uint" />
+        <add name="LOD1 Size" type="uint" />
+        <add name="LOD2 Size" type="uint" />
+    </niobject>
+    
+    <compound name="BSSITSSubSegment">
+        <add name="Start Index" type="uint" />
+        <add name="Num Primitives" type="uint" />
+        <add name="Parent Array Index" type="uint" />
+        <add name="Unknown Int 1" type="uint" />
+    </compound>
+    
+    <compound name="BSSITSSegment">
+        <add name="Start Index" type="uint" />
+        <add name="Num Primitives" type="uint" />
+        <add name="Parent Array Index" type="uint" />
+        <add name="Num Sub Segments" type="uint" />
+        <add name="Sub Segment" type="BSSITSSubSegment" arr1="Num Sub Segments" />
+    </compound>
+
+    <compound name="BSSITSSubSegmentData">
+        <add name="Segment/User" type="uint">If Unknown Int 2 is 0xffffffff, this value refers to the Segment at the listed index.</add>
+        <add name="Unknown Int 2" type="uint" />
+        <add name="Num Data" type="uint" />
+        <add name="Extra Data" type="float" arr1="Num Data" />
+    </compound>
+
+    <compound name="BSSITSSubSegmentRecord">
+        <add name="Num Segments" type="uint" />
+        <add name="Total Segments" type="uint" />
+        <add name="Array Indices" type="uint" arr1="Num Segments" />
+        <add name="Sub Segments" type="BSSITSSubSegmentData" arr1="Total Segments" />
+        <!-- TODO: Actual ShortString type (current "ShortString" is actually a byte) -->
+        <add name="SSF Length" type="ushort" />
+        <add name="SSF File" type="byte" arr1="SSF Length" />
+    </compound>
+
+    <niobject name="BSSubIndexTriShape" inherit="BSTriShape">
+        Fallout 4 Sub-Index Tri Shape
+        <add name="Num Primitives" type="uint" cond="Data Size &gt; 0" />
+        <add name="Num Segments" type="uint" cond="Data Size &gt; 0" />
+        <add name="Total Segments" type="uint" cond="Data Size &gt; 0" />
+        <add name="Segment" type="BSSITSSegment" arr1="Num Segments" cond="Data Size &gt; 0" />
+        <add name="Sub Segment Data" type="BSSITSSubSegmentRecord" cond="(Num Segments &lt; Total Segments) &amp;&amp; (Data Size &gt; 0)" />
+    </niobject>
+    
+    <!-- Fallout 4 Physics -->
+
+    <niobject name="bhkSystem" abstract="1" inherit="NiObject">
+        Fallout 4 Physics System
+    </niobject>
+    
+    <niobject name="bhkNPCollisionObject" inherit="NiCollisionObject">
+        Fallout 4 Collision Object
+        <add name="Flags" type="ushort">
+            Due to inaccurate reporting in the CK the Reset and Sync On Update positions are a guess.
+            Bits: 0=Reset, 2=Notify, 3=SetLocal, 7=SyncOnUpdate, 10=AnimTargeted
+        </add>
+        <add name="Data" type="Ref" template="bhkSystem" />
+        <add name="Body ID" type="uint" />
+    </niobject>
+    
+    <niobject name="bhkPhysicsSystem" inherit="bhkSystem">
+        Fallout 4 Collision System
+        <add name="Size" type="uint" />
+        <add name="Data" type="byte" nifskopetype="blob" arr1="Size" />
+    </niobject>
+
+    <niobject name="bhkRagdollSystem" inherit="bhkSystem">
+        Fallout 4 Ragdoll System
+        <add name="Size" type="uint" />
+        <add name="Data" type="byte" nifskopetype="blob" arr1="Size" />
+    </niobject>
+
+    <niobject name="BSExtraData" inherit="NiExtraData">
+        Fallout 4 Extra Data
+    </niobject>
+
+    <niobject name="BSClothExtraData" inherit="BSExtraData">
+        Fallout 4 Cloth data
+        <add name="Size" type="uint" />
+        <add name="Data" type="byte" nifskopetype="blob" arr1="Size" />
+    </niobject>
+    
+    <!-- Fallout 4 Skeleton -->
+
+    <compound name="BSSkinBoneTrans">
+        Fallout 4 Bone Transform
+        <add name="Bounding Sphere" type="SphereBV" />
+        <add name="Rotation" type="Matrix33" />
+        <add name="Translation" type="Vector3" />
+        <add name="Scale" type="float" />
+    </compound>
+
+    <niobject name="BSSkin::Instance" inherit="NiObject">
+        Fallout 4 Skin Instance
+        <add name="Root Parent" type="Ptr" template="NiAVObject" />
+        <add name="Bone Data" type="Ref" template="BSSkin::BoneData" />
+        <add name="Num Bones" type="uint" />
+        <add name="Bones" type="Ptr" arr1="Num Bones" />
+        <add name="Num Unknown" type="uint" />
+        <add name="Unknown" type="Vector3" arr1="Num Unknown" />
+    </niobject>
+
+    <niobject name="BSSkin::BoneData" inherit="NiObject">
+        Fallout 4 Bone Data
+        <add name="Num Bones" type="uint" />
+        <add name="Bones" type="BSSkinBoneTrans" arr1="Num Bones" />
+    </niobject>
+
+    <niobject name="BSPositionData" inherit="NiExtraData">
+        Fallout 4 Positional Data
+        <add name="Num Data" type="uint" />
+        <add name="Data" type="hfloat" arr1="Num Data" />
+    </niobject>
+
+    <compound name="BSConnectPoint">
+        <add name="Parent" type="SizedString" />
+        <add name="Name" type="SizedString" />
+        <add name="Rotation" type="Quaternion" />
+        <add name="Translation" type="Vector3" />
+        <add name="Scale" type="float" />
+    </compound>
+
+    <niobject name="BSConnectPoint::Parents" inherit="NiExtraData">
+        Fallout 4 Item Slot Parent
+        <add name="Num Connect Points" type="uint" />
+        <add name="Connect Points" type="BSConnectPoint" arr1="Num Connect Points" />
+    </niobject>
+
+    <niobject name="BSConnectPoint::Children" inherit="NiExtraData">
+        Fallout 4 Item Slot Child
+        <add name="Skinned" type="bool" />
+        <add name="Num Points" type="int" />
+        <add name="Name" type="SizedString" arr1="Num Points" />
+    </niobject>
+    
+    <niobject name="BSEyeCenterExtraData" inherit="NiExtraData">
+        Fallout 4 Eye Center Data
+        <add name="Num Data" type="int" />
+        <add name="Data" type="float" arr1="Num Data" />
+    </niobject>
+	
+    <compound name="BSPackedGeomDataCombined">
+        <add name="Grayscale to Palette Scale" type="float" />
+        <add name="Rotation" type="Matrix33" />
+        <add name="Translation" type="Vector3" />
+        <add name="Scale" type="float" />
+        <add name="Bounding Sphere" type="SphereBV" />
+    </compound>
+    
+    <compound name="BSPackedGeomDataLOD">
+        <add name="Triangle Count" type="uint" />
+        <add name="Triangle Offset" type="uint" />
+    </compound>
+    
+    <compound name="BSPackedGeomData">
+        <add name="Num Verts" type="uint" />
+        <add name="LOD Levels" type="uint" />
+        <add name="LOD" type="BSPackedGeomDataLOD" arr1="LOD Levels" />
+        <add name="Num Combined" type="uint" />
+        <add name="Combined" type="BSPackedGeomDataCombined" arr1="Num Combined" />
+        <add name="Unk Int 1" type="uint" />
+        <add name="Unk Int 2" type="uint" />
+    </compound>
+	
+    <compound name="BSPackedGeomObject">
+        <add name="Unknown Int 1" type="uint" />
+        <add name="Object Hash?" type="uint" />
+    </compound>
+    
+    <niobject name="BSPackedCombinedSharedGeomDataExtra" inherit="NiExtraData">
+        Fallout 4 Packed Combined Geometry Data
+        <add name="VF1" type="byte" />
+        <add name="VF2" type="byte" />
+        <add name="VF3" type="byte" />
+        <add name="VF4" type="byte" />
+        <add name="VF5" type="byte" />
+        <add name="VF6" type="byte" />
+        <add name="VF7" type="byte" />
+        <add name="VF8" type="byte" />
+        <add name="Num Vertices" type="uint" />
+        <add name="Num Triangles" type="uint" />
+        <add name="Unknown Flags 1" type="uint" />
+        <add name="Unknown Flags 2" type="uint" />
+        <add name="Num Data" type="uint" />
+        <add name="Object" type="BSPackedGeomObject" arr1="Num Data" />
+        <add name="Object Data" type="BSPackedGeomData" arr1="Num Data" />
+    </niobject>
+    
+    <!-- Fallout 4 Animation -->
+    
+    <niobject name="NiLightRadiusController" inherit="NiFloatInterpController">
+    
+    </niobject>
+
 </niftoolsxml>