public Turnout newTurnout(String systemName, String userName) {
    if (log.isDebugEnabled()) {
      log.debug(
          "newTurnout:"
              + ((systemName == null) ? "null" : systemName)
              + ";"
              + ((userName == null) ? "null" : userName));
    }
    if (systemName == null) {
      log.error(
          "SystemName cannot be null. UserName was " + ((userName == null) ? "null" : userName));
      throw new IllegalArgumentException(
          "SystemName cannot be null. UserName was " + ((userName == null) ? "null" : userName));
    }
    // is system name in correct format?
    if (!systemName.startsWith(getSystemPrefix() + typeLetter())) {
      log.error(
          "Invalid system name for turnout: "
              + systemName
              + " needed "
              + getSystemPrefix()
              + typeLetter());
      throw new IllegalArgumentException(
          "Invalid system name for turnout: "
              + systemName
              + " needed "
              + getSystemPrefix()
              + typeLetter());
    }

    // return existing if there is one
    Turnout s;
    if ((userName != null) && ((s = getByUserName(userName)) != null)) {
      if (getBySystemName(systemName) != s) {
        log.error(
            "inconsistent user ("
                + userName
                + ") and system name ("
                + systemName
                + ") results; userName related to ("
                + s.getSystemName()
                + ")");
      }
      return s;
    }
    if ((s = getBySystemName(systemName)) != null) {
      if ((s.getUserName() == null) && (userName != null)) {
        s.setUserName(userName);
      } else if (userName != null) {
        log.warn(
            "Found turnout via system name ("
                + systemName
                + ") with non-null user name ("
                + s.getUserName()
                + "). Turnout \""
                + systemName
                + "("
                + userName
                + ")\" cannot be used.");
      }
      return s;
    }

    // doesn't exist, make a new one
    s = createNewTurnout(systemName, userName);

    // if that failed, blame it on the input arguements
    if (s == null) {
      throw new IllegalArgumentException("Unable to create turnout from " + systemName);
    }

    // save in the maps if successful
    register(s);
    try {
      s.setStraightSpeed("Global");
    } catch (jmri.JmriException ex) {
      log.error(ex.toString());
    }

    try {
      s.setDivergingSpeed("Global");
    } catch (jmri.JmriException ex) {
      log.error(ex.toString());
    }
    return s;
  }
  @Test
  public void testUpperLower() {
    Turnout t = l.provideTurnout("" + getNumToTest2());

    Assert.assertNull(l.getTurnout(t.getSystemName().toLowerCase()));
  }