diff --git a/qucs/extsimkernels/spicelibcompdialog.cpp b/qucs/extsimkernels/spicelibcompdialog.cpp
index f8e9d27ed..a93f6b371 100644
--- a/qucs/extsimkernels/spicelibcompdialog.cpp
+++ b/qucs/extsimkernels/spicelibcompdialog.cpp
@@ -304,7 +304,13 @@ int SpiceLibCompDialog::parseLibFile(const QString &filename)
       if (line.startsWith("+")) {
         line.remove(0,1);
         QStringList pins = line.split(QRegularExpression("[ \\t]"),Qt::SkipEmptyParts);
-        a_subcirPins[last_subcir].append(pins);
+        for (const auto &s1: pins) {
+        if (s1 == "PARAMS:") header_start = false;
+        if (!s1.contains('=') && (s1 != "PARAMS:")) {
+            a_subcirPins[subname].append(s1);
+          }
+        }
+        line.prepend('+'); // put the plus back
       } else {
         // end of header
         header_start = false;
diff --git a/qucs/qucs.cpp b/qucs/qucs.cpp
index 0cc0954db..756a59325 100644
--- a/qucs/qucs.cpp
+++ b/qucs/qucs.cpp
@@ -1793,9 +1793,11 @@ bool QucsApp::saveAs()
   QucsDoc *Doc = getDoc();
 
   int n = -1;
-  QString s, Filter;
+  QString s, Filter, selfilter;
+  QStringList Filters;
   QFileInfo Info;
   while(true) {
+    QString file_ext;
     s = Doc->getDocName();
     Info.setFile(s);
     if(s.isEmpty()) {   // which is default directory ?
@@ -1804,6 +1806,8 @@ bool QucsApp::saveAs()
         else  s = lastDirOpenSave;
       }
       else s = QucsSettings.QucsWorkDir.path();
+    } else {
+      file_ext = QString("*.") + Info.suffix();
     }
 
     // list of known file extensions
@@ -1811,25 +1815,40 @@ bool QucsApp::saveAs()
     QStringList extlist = ext.split (';');
 
     if(isTextDocument (w)) {
-      Filter = tr("VHDL Sources")+" (*.vhdl *.vhd);;" +
-        tr("Verilog Sources")+" (*.v);;"+
-        tr("Verilog-A Sources")+" (*.va);;"+
-        tr("Octave Scripts")+" (*.m *.oct);;"+
-        tr("Qucs Netlist")+" (*.net *.qnet);;"+
-        tr("SPICE Netlist")+" (*.ckt *.cir *.sp);;"+
-        tr("Plain Text")+" (*.txt);;"+
-        tr("Any File")+" (*)";
+      Filters << tr("VHDL Sources")+" (*.vhdl *.vhd);;"
+              << tr("Verilog Sources")+" (*.v);;"
+              << tr("Verilog-A Sources")+" (*.va);;"
+              << tr("Octave Scripts")+" (*.m *.oct);;"
+              << tr("Qucs Netlist")+" (*.net *.qnet);;"
+              << tr("SPICE Netlist")+" (*.ckt *.cir *.sp);;"
+              << tr("Plain Text")+" (*.txt);;"
+              << tr("Any File")+" (*)";
+      Filter = Filters.join("");
+      bool found = false;
+      for (const auto &ss: Filters) {
+        if (ss.contains(file_ext)) {
+          found = true;
+          selfilter = ss;
+          selfilter.chop(2);
+          break;
+        }
+      }
+      if (!found) {
+        selfilter = Filters.first();
+      }
     } else {
       Schematic *sch = (Schematic *) Doc;
       if (sch->getIsSymbolOnly()) {
         Filter = tr("Subcircuit symbol") + "(*.sym)";
+        selfilter = tr("Subcircuit symbol") + "(*.sym)";
       } else {
         Filter = QucsFileFilter;
+        selfilter = tr("Schematic") + " (*.sch)";
       }
     }
 
     s = QFileDialog::getSaveFileName(this, tr("Enter a Document Name"),
-                                     s, Filter);
+                                     s, Filter, &selfilter);
     if(s.isEmpty())  return false;
     Info.setFile(s);               // try to guess the best extension ...
     ext = Info.suffix();