diff --git a/NifImport/NIFImport.cpp b/NifImport/NIFImport.cpp
index b686e7896840d37445c2139c48b332a25aa921e4..298b3748f497624c005698ce4a79ed03b2fe7a5a 100644
--- a/NifImport/NIFImport.cpp
+++ b/NifImport/NIFImport.cpp
@@ -182,96 +182,84 @@ bool NifImporter::DoImport()
 {
    bool ok = true;
    NiNodeRef rootNode = root;
-   if (isBiped)
-   {
-      if (useBiped){
-         ImportBipeds(nodes);
-      } else {
-         ImportBones(DynamicCast<NiNode>(rootNode->GetChildren()));
-      }
-   }
-   else
+
+   vector<string> importedBones;
+   if (!isBiped && importSkeleton && importBones)
    {
-      vector<string> importedBones;
-      if (importSkeleton && importBones)
+      if (browseForSkeleton)
       {
-         if (browseForSkeleton)
-         {
-            TCHAR filter[64], *pfilter=filter;
-            pfilter = _tcscpy(filter, shortDescription.c_str());
-            pfilter = _tcscat(pfilter, " (*.NIF)");
-            pfilter += strlen(pfilter);
-            *pfilter++ = '\0';
-            _tcscpy(pfilter, "*.NIF");
-            pfilter += strlen(pfilter);
-            *pfilter++ = '\0';
-            *pfilter++ = '\0';
-
-            TCHAR filename[MAX_PATH];
-            GetFullPathName(skeleton.c_str(), _countof(filename), filename, NULL);
-
-            OPENFILENAME ofn;
-            memset(&ofn, 0, sizeof(ofn));
-            ofn.lStructSize = sizeof(ofn);
-            ofn.hwndOwner = gi->GetMAXHWnd();
-            ofn.lpstrFilter = filter;
-            ofn.lpstrFile = filename;
-            ofn.nMaxFile = _countof(filename);
-            ofn.lpstrTitle = TEXT("Browse for Skeleton NIF...");
-            ofn.lpstrDefExt = TEXT("NIF");
-            ofn.Flags = OFN_HIDEREADONLY|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR|OFN_PATHMUSTEXIST;
-            importSkeleton = GetOpenFileName(&ofn) ? true : false;
-            if (importSkeleton) {
-               skeleton = filename;
-            }
+         TCHAR filter[64], *pfilter=filter;
+         pfilter = _tcscpy(filter, shortDescription.c_str());
+         pfilter = _tcscat(pfilter, " (*.NIF)");
+         pfilter += strlen(pfilter);
+         *pfilter++ = '\0';
+         _tcscpy(pfilter, "*.NIF");
+         pfilter += strlen(pfilter);
+         *pfilter++ = '\0';
+         *pfilter++ = '\0';
+
+         TCHAR filename[MAX_PATH];
+         GetFullPathName(skeleton.c_str(), _countof(filename), filename, NULL);
+
+         OPENFILENAME ofn;
+         memset(&ofn, 0, sizeof(ofn));
+         ofn.lStructSize = sizeof(ofn);
+         ofn.hwndOwner = gi->GetMAXHWnd();
+         ofn.lpstrFilter = filter;
+         ofn.lpstrFile = filename;
+         ofn.nMaxFile = _countof(filename);
+         ofn.lpstrTitle = TEXT("Browse for Skeleton NIF...");
+         ofn.lpstrDefExt = TEXT("NIF");
+         ofn.Flags = OFN_HIDEREADONLY|OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR|OFN_PATHMUSTEXIST;
+         importSkeleton = GetOpenFileName(&ofn) ? true : false;
+         if (importSkeleton) {
+            skeleton = filename;
          }
-         if (importSkeleton && !skeleton.empty()) {
-            NifImporter skelImport(skeleton.c_str(), i, gi, suppressPrompts);
-            if (skelImport.isValid())
-            {
-               if (skelImport.useBiped){
-                  skelImport.ImportBipeds(skelImport.nodes);
-               } else {
-                  NiNodeRef skelRoot = skelImport.root;
-                  skelImport.ImportBones(DynamicCast<NiNode>(skelRoot->GetChildren()));
-                  if (removeUnusedImportedBones){
-                     importedBones = GetNamesOfNodes(skelImport.nodes);
-                  }
-               }
-            }
+      }
+      if (importSkeleton && !skeleton.empty()) {
+         NifImporter skelImport(skeleton.c_str(), i, gi, suppressPrompts);
+         if (skelImport.isValid())
+         {
+            skelImport.isBiped = true;
+            skelImport.importBones = true;
+            skelImport.DoImport();
+            if (!skelImport.useBiped && removeUnusedImportedBones)
+               importedBones = GetNamesOfNodes(skelImport.nodes);
+            ok = ImportMeshes(rootNode); // do we really want to import meshes on skeletons?
          }
-      } else if (hasSkeleton && useBiped && importBones) {
-         ImportBipeds(nodes);
       }
+   } else if (hasSkeleton && useBiped && importBones) {
+      ImportBipeds(nodes);
+   }
 
-      if (isValid()) {
-         if (importBones) {
-            if (strmatch(rootNode->GetName(), "Scene Root"))
-               ImportBones(DynamicCast<NiNode>(rootNode->GetChildren()));
-            else
-               ImportBones(rootNode);
-         }
+   if (isValid()) {
+      if (importBones) {
+         if (strmatch(rootNode->GetName(), "Scene Root"))
+            ImportBones(DynamicCast<NiNode>(rootNode->GetChildren()));
+         else
+            ImportBones(rootNode);
+      }
 
-         ok = ImportMeshes(rootNode);
-
-         if (importSkeleton && removeUnusedImportedBones){
-            vector<string> importedNodes = GetNamesOfNodes(nodes);
-            sort(importedBones.begin(), importedBones.end());
-            sort(importedNodes.begin(), importedNodes.end());
-            vector<string> results;
-            results.resize(importedBones.size());
-            vector<string>::iterator end = set_difference ( 
-               importedBones.begin(), importedBones.end(),
-               importedNodes.begin(), importedNodes.end(), results.begin());
-            for (vector<string>::iterator itr = results.begin(); itr != end; ++itr){
-               if (INode *node = gi->GetINodeByName((*itr).c_str())){
-                  node->Delete(0, TRUE);
-               }
+      ok = ImportMeshes(rootNode);
+
+      if (importSkeleton && removeUnusedImportedBones){
+         vector<string> importedNodes = GetNamesOfNodes(nodes);
+         sort(importedBones.begin(), importedBones.end());
+         sort(importedNodes.begin(), importedNodes.end());
+         vector<string> results;
+         results.resize(importedBones.size());
+         vector<string>::iterator end = set_difference ( 
+            importedBones.begin(), importedBones.end(),
+            importedNodes.begin(), importedNodes.end(), results.begin());
+         for (vector<string>::iterator itr = results.begin(); itr != end; ++itr){
+            if (INode *node = gi->GetINodeByName((*itr).c_str())){
+               node->Delete(0, TRUE);
             }
          }
       }
    }
 
+
    // Kick of animation import
    ImportAnimation();
    return true;