diff --git a/io_scene_fbx/export_fbx_bin.py b/io_scene_fbx/export_fbx_bin.py
index c122d0c5502d01c852749ec54c59e283d1b1d1d3..8516c5b55a95fa687cb92758fb7f19e3c46519a0 100644
--- a/io_scene_fbx/export_fbx_bin.py
+++ b/io_scene_fbx/export_fbx_bin.py
@@ -360,29 +360,38 @@ def elem_data_vec_float64(elem, name, value):
 #     Also, those "custom" types like 'FieldOfView' or 'Lcl Translation' are pure nonsense,
 #     these are just Vector3D ultimately... *sigh* (again).
 FBX_PROPERTIES_DEFINITIONS = {
+    # Generic types.
     "p_bool": (b"bool", b"", "add_int32"),  # Yes, int32 for a bool (and they do have a core bool type)!!!
     "p_integer": (b"int", b"Integer", "add_int32"),
     "p_ulonglong": (b"ULongLong", b"", "add_int64"),
     "p_double": (b"double", b"Number", "add_float64"),  # Non-animatable?
     "p_number": (b"Number", b"", "add_float64"),  # Animatable-only?
     "p_enum": (b"enum", b"", "add_int32"),
-    "p_visibility": (b"Visibility", b"", "add_float64"),
-    "p_fov": (b"FieldOfView", b"", "add_float64"),
-    "p_fov_x": (b"FieldOfViewX", b"", "add_float64"),
-    "p_fov_y": (b"FieldOfViewY", b"", "add_float64"),
     "p_vector_3d": (b"Vector3D", b"Vector", "add_float64", "add_float64", "add_float64"),  # Non-animatable?
     "p_vector": (b"Vector", b"", "add_float64", "add_float64", "add_float64"),  # Animatable-only?
-    "p_lcl_translation": (b"Lcl Translation", b"", "add_float64", "add_float64", "add_float64"),
-    "p_lcl_rotation": (b"Lcl Rotation", b"", "add_float64", "add_float64", "add_float64"),
-    "p_lcl_scaling": (b"Lcl Scaling", b"", "add_float64", "add_float64", "add_float64"),
     "p_color_rgb": (b"ColorRGB", b"Color", "add_float64", "add_float64", "add_float64"),  # Non-animatable?
     "p_color": (b"Color", b"", "add_float64", "add_float64", "add_float64"),  # Animatable-only?
     "p_string": (b"KString", b"", "add_string_unicode"),
     "p_string_url": (b"KString", b"Url", "add_string_unicode"),
     "p_timestamp": (b"KTime", b"Time", "add_int64"),
     "p_datetime": (b"DateTime", b"", "add_string_unicode"),
-    "p_object": (b"object", b""),  # XXX Check this! No value for this prop???
+    # Special types.
+    "p_object": (b"object", b""),  # XXX Check this! No value for this prop??? Would really like to know how it works!
     "p_compound": (b"Compound", b""),
+    # Specific types (sic).
+    ## Objects (Models).
+    "p_lcl_translation": (b"Lcl Translation", b"", "add_float64", "add_float64", "add_float64"),
+    "p_lcl_rotation": (b"Lcl Rotation", b"", "add_float64", "add_float64", "add_float64"),
+    "p_lcl_scaling": (b"Lcl Scaling", b"", "add_float64", "add_float64", "add_float64"),
+    "p_visibility": (b"Visibility", b"", "add_float64"),
+    "p_visibility_inheritance": (b"Visibility Inheritance", b"", "add_int32"),
+    ## Cameras!!!
+    "p_roll": (b"Roll", b"", "add_float64"),
+    "p_opticalcenterx": (b"OpticalCenterX", b"", "add_float64"),
+    "p_opticalcentery": (b"OpticalCenterY", b"", "add_float64"),
+    "p_fov": (b"FieldOfView", b"", "add_float64"),
+    "p_fov_x": (b"FieldOfViewX", b"", "add_float64"),
+    "p_fov_y": (b"FieldOfViewY", b"", "add_float64"),
 }
 
 
@@ -489,8 +498,8 @@ def fbx_template_def_globalsettings(scene, settings, override_defaults=None, nbr
 def fbx_template_def_model(scene, settings, override_defaults=None, nbr_users=0):
     gscale = settings.global_scale
     props = OrderedDict((
-        # Name,                     Value, Type,     Animatable
-        (b"QuaternionInterpolate", (False, "p_bool", False)),
+        # Name,                   Value, Type, Animatable
+        (b"QuaternionInterpolate", (0, "p_enum", False)),  # 0 = no quat interpolation.
         (b"RotationOffset", ((0.0, 0.0, 0.0), "p_vector_3d", False)),
         (b"RotationPivot", ((0.0, 0.0, 0.0), "p_vector_3d", False)),
         (b"ScalingOffset", ((0.0, 0.0, 0.0), "p_vector_3d", False)),
@@ -560,6 +569,7 @@ def fbx_template_def_model(scene, settings, override_defaults=None, nbr_users=0)
         (b"Lcl Rotation", ((0.0, 0.0, 0.0), "p_lcl_rotation", True)),
         (b"Lcl Scaling", (Vector((1.0, 1.0, 1.0)) * gscale, "p_lcl_scaling", True)),
         (b"Visibility", (1.0, "p_visibility", True)),
+        (b"Visibility Inheritance", (1, "p_visibility_inheritance", False)),
     ))
     if override_defaults is not None:
         props.update(override_defaults)
@@ -571,12 +581,12 @@ def fbx_template_def_light(scene, settings, override_defaults=None, nbr_users=0)
     props = OrderedDict((
         (b"LightType", (0, "p_enum", False)),  # Point light.
         (b"CastLight", (True, "p_bool", False)),
-        (b"Color", ((1.0, 1.0, 1.0), "p_color_rgb", True)),
+        (b"Color", ((1.0, 1.0, 1.0), "p_color", True)),
         (b"Intensity", (100.0, "p_number", True)),  # Times 100 compared to Blender values...
         (b"DecayType", (2, "p_enum", False)),  # Quadratic.
         (b"DecayStart", (30.0 * gscale, "p_double", False)),
         (b"CastShadows", (True, "p_bool", False)),
-        (b"ShadowColor", ((0.0, 0.0, 0.0), "p_color_rgb", True)),
+        (b"ShadowColor", ((0.0, 0.0, 0.0), "p_color", True)),
         (b"AreaLightShape", (0, "p_enum", False)),  # Rectangle.
     ))
     if override_defaults is not None:
@@ -585,7 +595,115 @@ def fbx_template_def_light(scene, settings, override_defaults=None, nbr_users=0)
 
 
 def fbx_template_def_camera(scene, settings, override_defaults=None, nbr_users=0):
-    props = OrderedDict()  # TODO!!!
+    r = scene.render
+    props = OrderedDict((
+        (b"Color", ((0.8, 0.8, 0.8), "p_color_rgb", False)),
+        (b"Position", ((0.0, 0.0, -50.0), "p_vector", True)),
+        (b"UpVector", ((0.0, 1.0, 0.0), "p_vector", True)),
+        (b"InterestPosition", ((0.0, 0.0, 0.0), "p_vector", True)),
+        (b"Roll", (0.0, "p_roll", True)),
+        (b"OpticalCenterX", (0.0, "p_opticalcenterx", True)),
+        (b"OpticalCenterY", (0.0, "p_opticalcentery", True)),
+        (b"BackgroundColor", ((0.8, 0.8, 0.8), "p_color", True)),
+        (b"TurnTable", (0.0, "p_number", True)),
+        (b"DisplayTurnTableIcon", (False, "p_bool", False)),
+        (b"UseMotionBlur", (False, "p_bool", False)),
+        (b"UseRealTimeMotionBlur", (True, "p_bool", False)),
+        (b"Motion Blur Intensity", (1.0, "p_number", True)),
+        (b"AspectRatioMode", (2, "p_enum", False)),  # Fixed ratio, height and width in pixels.
+        (b"AspectWidth", (float(r.resolution_x), "p_double", False)),
+        (b"AspectHeight", (float(r.resolution_y), "p_double", False)),
+        (b"PixelAspectRatio", (float(r.pixel_aspect_x / r.pixel_aspect_y), "p_double", False)),
+        (b"FilmOffsetX", (0.0, "p_number", True)),
+        (b"FilmOffsetY", (0.0, "p_number", True)),
+        (b"FilmWidth", (1.2598425196850394, "p_double", False)),
+        (b"FilmHeight", (0.7086614173228346, "p_double", False)),
+        (b"FilmAspectRatio", (1.777777777777778, "p_double", False)),
+        (b"FilmSqueezeRatio", (1.0, "p_double", False)),
+        (b"FilmFormatIndex", (0, "p_enum", False)),  # Assuming this is ApertureFormat, 0 = custom.
+        (b"PreScale", (1.0, "p_number", True)),
+        (b"FilmTranslateX", (0.0, "p_number", True)),
+        (b"FilmTranslateY", (0.0, "p_number", True)),
+        (b"FilmRollPivotX", (0.0, "p_number", True)),
+        (b"FilmRollPivotY", (0.0, "p_number", True)),
+        (b"FilmRollValue", (0.0, "p_number", True)),
+        (b"FilmRollOrder", (0, "p_enum", False)),  # 0 = rotate first (default).
+        (b"ApertureMode", (3, "p_enum", False)),  # 3 = focal length.
+        (b"GateFit", (0, "p_enum", False)),  # 0 = no resolution gate fit.
+        (b"FieldOfView", (49.13434207760448, "p_fov", True)),
+        (b"FieldOfViewX", (49.13434207760448, "p_fov_x", True)),
+        (b"FieldOfViewY", (28.841546110078532, "p_fov_y", True)),
+        (b"FocalLength", (35.0, "p_number", True)),
+        (b"CameraFormat", (0, "p_enum", False)),  # Custom camera format.
+        (b"UseFrameColor", (False, "p_bool", False)),
+        (b"FrameColor", ((0.3, 0.3, 0.3), "p_color_rgb", False)),
+        (b"ShowName", (True, "p_bool", False)),
+        (b"ShowInfoOnMoving", (True, "p_bool", False)),
+        (b"ShowGrid", (True, "p_bool", False)),
+        (b"ShowOpticalCenter", (False, "p_bool", False)),
+        (b"ShowAzimut", (True, "p_bool", False)),
+        (b"ShowTimeCode", (True, "p_bool", False)),
+        (b"ShowAudio", (False, "p_bool", False)),
+        (b"AudioColor", ((0.0, 1.0, 0.0), "p_vector_3d", False)),  # Yep, vector3d, not corlorgb… :cry:
+        (b"NearPlane", (1.0, "p_double", False)),
+        (b"FarPlane", (100.0, "p_double", False)),
+        (b"AutoComputeClipPanes", (False, "p_bool", False)),
+        (b"ViewCameraToLookAt", (True, "p_bool", False)),
+        (b"ViewFrustumNearFarPlane", (False, "p_bool", False)),
+        (b"ViewFrustumBackPlaneMode", (2, "p_enum", False)),  # 2 = show back plane if texture added.
+        (b"BackPlaneDistance", (100.0, "p_number", True)),
+        (b"BackPlaneDistanceMode", (1, "p_enum", False)),  # 1 = relative to camera.
+        (b"ViewFrustumFrontPlaneMode", (2, "p_enum", False)),  # 2 = show front plane if texture added.
+        (b"FrontPlaneDistance", (1.0, "p_number", True)),
+        (b"FrontPlaneDistanceMode", (1, "p_enum", False)),  # 1 = relative to camera.
+        (b"LockMode", (False, "p_bool", False)),
+        (b"LockInterestNavigation", (False, "p_bool", False)),
+        (b"BackPlateFitImage", (False, "p_bool", False)),
+        (b"BackPlateCrop", (False, "p_bool", False)),
+        (b"BackPlateCenter", (True, "p_bool", False)),
+        (b"BackPlateKeepRatio", (True, "p_bool", False)),
+        (b"BackgroundAlphaTreshold", (0.5, "p_double", False)),
+        (b"ShowBackplate", (True, "p_bool", False)),
+        (b"BackPlaneOffsetX", (0.0, "p_number", True)),
+        (b"BackPlaneOffsetY", (0.0, "p_number", True)),
+        (b"BackPlaneRotation", (0.0, "p_number", True)),
+        (b"BackPlaneScaleX", (1.0, "p_number", True)),
+        (b"BackPlaneScaleY", (1.0, "p_number", True)),
+        (b"Background Texture", (None, "p_object", False)),
+        (b"FrontPlateFitImage", (True, "p_bool", False)),
+        (b"FrontPlateCrop", (False, "p_bool", False)),
+        (b"FrontPlateCenter", (True, "p_bool", False)),
+        (b"FrontPlateKeepRatio", (True, "p_bool", False)),
+        (b"Foreground Opacity", (1.0, "p_double", False)),
+        (b"ShowFrontplate", (True, "p_bool", False)),
+        (b"FrontPlaneOffsetX", (0.0, "p_number", True)),
+        (b"FrontPlaneOffsetY", (0.0, "p_number", True)),
+        (b"FrontPlaneRotation", (0.0, "p_number", True)),
+        (b"FrontPlaneScaleX", (1.0, "p_number", True)),
+        (b"FrontPlaneScaleY", (1.0, "p_number", True)),
+        (b"Foreground Texture", (None, "p_object", False)),
+        (b"DisplaySafeArea", (True, "p_bool", False)),
+        (b"DisplaySafeAreaOnRender", (False, "p_bool", False)),
+        (b"SafeAreaDisplayStyle", (1, "p_enum", False)),  # 1 = rounded corners.
+        (b"SafeAreaAspectRatio", (1.777777777777778, "p_double", False)),
+        (b"Use2DMagnifierZoom", (False, "p_bool", False)),
+        (b"2D Magnifier Zoom", (100.0, "p_number", True)),
+        (b"2D Magnifier X", (50.0, "p_number", True)),
+        (b"2D Magnifier Y", (50.0, "p_number", True)),
+        (b"CameraProjectionType", (0, "p_enum", False)),  # 0 = perspective, 1 = orthogonal.
+        (b"OrthoZoom", (1.0, "p_double", False)),
+        (b"UseRealTimeDOFAndAA", (False, "p_bool", False)),
+        (b"UseDepthOfField", (False, "p_bool", False)),
+        (b"FocusSource", (1, "p_enum", False)),  # 0 = camera interest, 1 = distance from camera interest.
+        (b"FocusAngle", (3.5, "p_double", False)),  # ???
+        (b"FocusDistance", (10.0, "p_double", False)),
+        (b"UseAntialiasing", (False, "p_bool", False)),
+        (b"AntialiasingIntensity", (0.77777, "p_double", False)),
+        (b"AntialiasingMethod", (0, "p_enum", False)),  # 0 = oversampling, 1 = hardware.
+        (b"UseAccumulationBuffer", (False, "p_bool", False)),
+        (b"FrameSamplingCount", (7, "p_integer", False)),
+        (b"FrameSamplingType", (1, "p_enum", False)),  # 0 = uniform, 1 = stochastic.
+    ))
     if override_defaults is not None:
         props.update(override_defaults)
     return FBXTemplate(b"NodeAttribute", b"FbxCamera", props, nbr_users)
@@ -615,7 +733,7 @@ def fbx_template_def_geometry(scene, settings, override_defaults=None, nbr_users
 def fbx_template_def_material(scene, settings, override_defaults=None, nbr_users=0):
     # WIP...
     props = OrderedDict((
-        (b"ShadingModel", ("phong", "p_string", False)),
+        (b"ShadingModel", ("Phong", "p_string", False)),
         (b"MultiLayer", (False, "p_bool", False)),
         # Lambert-specific.
         (b"EmissiveColor", ((0.8, 0.8, 0.8), "p_color", True)),  # Same as diffuse.
@@ -1359,7 +1477,7 @@ def fbx_data_material_elements(root, mat, scene_data):
 
     mat_key, _objs = scene_data.data_materials[mat]
     # Approximation...
-    mat_type = b"phong" if mat.specular_shader in {'COOKTORR', 'PHONG', 'BLINN'} else b"lambert"
+    mat_type = b"Phong" if mat.specular_shader in {'COOKTORR', 'PHONG', 'BLINN'} else b"Lambert"
 
     fbx_mat = elem_data_single_int64(root, b"Material", get_fbxuid_from_key(mat_key))
     fbx_mat.add_string(fbx_name_class(mat.name.encode(), b"Material"))
@@ -1392,7 +1510,7 @@ def fbx_data_material_elements(root, mat, scene_data):
     b"DisplacementColor": ((0.0, 0.0, 0.0), "p_color_rgb"),
     b"DisplacementFactor": (0.0, "p_double"),
     """
-    if mat_type == b"phong":
+    if mat_type == b"Phong":
         elem_props_template_set(tmpl, props, "p_color", b"SpecularColor", mat.specular_color)
         elem_props_template_set(tmpl, props, "p_number", b"SpecularFactor", mat.specular_intensity / 2.0)
         # See Material template about those two!
@@ -2058,6 +2176,7 @@ def fbx_data_from_scene(scene, settings):
     templates = OrderedDict()
     templates[b"GlobalSettings"] = fbx_template_def_globalsettings(scene, settings, nbr_users=1)
 
+    # XXX Looks like there can only be one NodeAttribute template? At lest, never found a light template... :/
     if data_lamps:
         templates[b"Light"] = fbx_template_def_light(scene, settings, nbr_users=len(data_lamps))
 
@@ -2321,7 +2440,10 @@ def fbx_header_elements(root, scene_data, time=None):
     elem_props_set(props, "p_integer", b"FrontAxisSign", front_axis[1])
     elem_props_set(props, "p_integer", b"CoordAxis", coord_axis[0])
     elem_props_set(props, "p_integer", b"CoordAxisSign", coord_axis[1])
+    elem_props_set(props, "p_integer", b"OriginalUpAxis", -1)
+    elem_props_set(props, "p_integer", b"OriginalUpAxisSign", 1)
     elem_props_set(props, "p_double", b"UnitScaleFactor", 1.0)
+    elem_props_set(props, "p_double", b"OriginalUnitScaleFactor", 1.0)
     elem_props_set(props, "p_color_rgb", b"AmbientColor", (0.0, 0.0, 0.0))
     elem_props_set(props, "p_string", b"DefaultCamera", "Producer Perspective")
 
@@ -2331,10 +2453,10 @@ def fbx_header_elements(root, scene_data, time=None):
     f_start = scene_data.scene.frame_start
     f_end = scene_data.scene.frame_end
     elem_props_set(props, "p_enum", b"TimeMode", 14)  # FPS, 14 = custom...
-    #elem_props_set(props, "p_timestamp", b"TimeSpanStart", int(units_convert(f_start / fps, "second", "ktime")))
-    #elem_props_set(props, "p_timestamp", b"TimeSpanStop", int(units_convert(f_end / fps, "second", "ktime")))
-    elem_props_set(props, "p_timestamp", b"TimeSpanStart", 0)
-    elem_props_set(props, "p_timestamp", b"TimeSpanStop", FBX_KTIME)
+    elem_props_set(props, "p_timestamp", b"TimeSpanStart", int(units_convert(f_start / fps, "second", "ktime")))
+    elem_props_set(props, "p_timestamp", b"TimeSpanStop", int(units_convert(f_end / fps, "second", "ktime")))
+    #elem_props_set(props, "p_timestamp", b"TimeSpanStart", 0)
+    #elem_props_set(props, "p_timestamp", b"TimeSpanStop", FBX_KTIME)
     elem_props_set(props, "p_double", b"CustomFrameRate", fps)
 
     ##### End of GlobalSettings element.
@@ -2355,7 +2477,7 @@ def fbx_documents_elements(root, scene_data):
 
     doc_uid = get_fbxuid_from_key("__FBX_Document__" + name)
     doc = elem_data_single_int64(docs, b"Document", doc_uid)
-    doc.add_string(b"")
+    doc.add_string_unicode(name)
     doc.add_string_unicode(name)
 
     props = elem_properties(doc)