private boolean removeHierarchicalWrapperComponent(BasicComponent comp)
	{
		Logger.logln("Found possible QSys subsytem " + comp.getInstanceName() + " of type " + comp.getClassName(), LogLevel.DEBUG);
		if((versionMajor==10) || (versionMajor == 11)) {
			Logger.logln("Trying to find matching QSys file", LogLevel.DEBUG);
			File qsysFile = new File(sourceFile.getAbsoluteFile().getParent()+ File.separator + comp.getClassName() + ".qsys");
			if(qsysFile.exists())
			{
				Logger.logln("Using " + qsysFile.getAbsolutePath(), LogLevel.DEBUG);
				QSysSystemLoader qsl = new QSysSystemLoader();
				qsl.reloadSubSystem(qsysFile, this, comp);
				while(comp.getInterfaces().size()>0)
				{
					Interface intf = comp.getInterfaces().firstElement();
					String internalName = intf.getParamValByName("internal");
					BasicComponent internalComponent = getComponentByName(comp.getInstanceName() + '_' + internalName.split("\\.")[0]);
					Interface internalIntf = internalComponent.getInterfaceByName(internalName.split("\\.")[1]);
					if(internalIntf == null)
					{
						//Just move the interface inwards :)
						internalComponent.getInterfaces().add(intf);
						intf.setOwner(internalComponent);
					} else {
						while(intf.getConnections().size()>0)
						{
							intf.getConnections().firstElement().connect(internalIntf);
						}
					}
					comp.getInterfaces().remove(0);
				}
				vSystemComponents.remove(comp); 
				return true;
			} else {
				Logger.logln(qsysFile.getAbsolutePath() + " does not exist");
			}
		} else {
			boolean isConnected = false;
			for(Interface intf : comp.getInterfaces()) {
				if(!intf.getConnections().isEmpty()) {
					isConnected = true;
				}
			}
			if(isConnected) {
				Logger.logln(comp, "Looks like a QSys subsystem, but it's connected. Not removing.",LogLevel.INFO);
			} else {
				Logger.logln(comp, "Looks like an unconnected QSys subsystem. Removing...",LogLevel.DEBUG);
				removeSystemComponent(comp);
				return true;
			}
		}
		return false;
	}